肖立鵬原來在騰訊云做架構(gòu)師,目前在Udesk擔(dān)任CTO職位。下面是他分享的Udesk在可擴(kuò)展高并發(fā)架構(gòu)方面的一些實(shí)踐經(jīng)驗(yàn)。
隨著智能設(shè)備的普及使得高并發(fā)場(chǎng)景越來越多,可擴(kuò)展成為系統(tǒng)設(shè)計(jì)的必要條件,下面分別介紹下可擴(kuò)展系統(tǒng)的四個(gè)重要組成部分
一、負(fù)載均衡——可擴(kuò)展性&冗余容錯(cuò)
水平擴(kuò)展:負(fù)載能力和增加硬件呈線性關(guān)系。如果你有一臺(tái)服務(wù)器并增加一臺(tái),負(fù)載能力翻 倍,再增加一臺(tái),負(fù)載能力增長(zhǎng)33%。
冗余容錯(cuò):一臺(tái)服務(wù)器死機(jī)不會(huì)影響服務(wù)的正確性,只是降低系統(tǒng)的負(fù)載能力。
一般的冗余和水平擴(kuò)展等,都可以通過負(fù)載均衡來實(shí)現(xiàn)。主要有3種實(shí)現(xiàn)方法:
客戶端負(fù)載均衡:這里的客戶端是廣義的客戶端,例如服務(wù)a調(diào)用服務(wù)b,我們認(rèn)為服務(wù)a是客戶端??蛻舳伺渲胣個(gè)服務(wù)端的地址,采取 Round-Robin或者其他隨機(jī)策略訪問服務(wù)端。優(yōu)點(diǎn)是編碼實(shí)現(xiàn)簡(jiǎn)單;缺點(diǎn)是變更困難,服務(wù)端遷移需要升級(jí)所有客戶端配置,當(dāng)然你可以搭建配置服務(wù),這個(gè)服務(wù)本身也是單點(diǎn),然后為配置服務(wù)實(shí)現(xiàn)負(fù)載均衡……
硬件負(fù)載均衡:購(gòu)買專用的負(fù)載均衡器,例如Citrix NetScaler。優(yōu)點(diǎn):性能卓越; 缺點(diǎn):昂貴,高富帥專用。
軟件負(fù)載均衡:通過路由分發(fā),心跳探測(cè)等方法,實(shí)現(xiàn)軟件層面的負(fù)載均衡,典型的開源組件有:LVS,Nginx和HAProxy等。目前大多數(shù)互聯(lián)網(wǎng)公司均采用軟件負(fù)載均衡。
二、數(shù)據(jù)緩存
緩存是一個(gè)系統(tǒng)中性能提升的關(guān)鍵。主要有5種實(shí)現(xiàn)方法:
應(yīng)用層:應(yīng)用自己在本地內(nèi)存或其他介質(zhì)中緩存部分?jǐn)?shù)據(jù),一般通過LRU算法淘汰。
數(shù)據(jù)庫層:數(shù)據(jù)庫引擎自身的緩存,需要DBA來配置優(yōu)化,當(dāng)然現(xiàn)在也有不少NoSQL的緩存+存儲(chǔ)解決方案如MongoDB、帶HandlerSocket插件MySQL、ttserver等。數(shù)據(jù)庫緩存的好處是應(yīng)用側(cè)代碼不需要更改。
內(nèi)存緩存:目前的主流解決方案,代表有MemCached和Redis,Redis的優(yōu)點(diǎn)是數(shù)據(jù)結(jié)構(gòu) 豐富,可以輕松支持排名等場(chǎng)景,缺點(diǎn)是單進(jìn)程實(shí)現(xiàn)導(dǎo)致持久化方案不夠完美,今年4月Redis Cluster終于迎來了第一個(gè)穩(wěn)定版本,可以實(shí)現(xiàn)數(shù)據(jù)自動(dòng)sharding和容錯(cuò),穩(wěn)定性有待后續(xù)檢驗(yàn)。
網(wǎng)頁緩存:在Apache等HTTP服務(wù)器上,配置full-page cache等策略。
CDN:對(duì)于靜態(tài)文件,一般采用CDN來加速。
使用緩存的過程中,必須要注意緩存有效性,在數(shù)據(jù)源更新后,要及時(shí)更新緩存中的數(shù)據(jù)。目前主要有read-through和write-through兩種策略,采用write-through的多些。
三、離線處理
對(duì)搜索引擎,廣告推薦等數(shù)據(jù)分析類場(chǎng)景,必須對(duì)數(shù)據(jù)做離線處理。主要有3種主流的實(shí)現(xiàn)方法:
定期任務(wù):每天每小時(shí)的任務(wù),使用crontab或者其他cron服務(wù)來調(diào)度。
并行計(jì)算:采用MapReduce,其它主流開源組件有Hive,Impala等。
消息隊(duì)列:任務(wù)排隊(duì),并發(fā)處理等,主流開源組件有RabbitMQ,Kafka。
四、平臺(tái)建設(shè)
提供給應(yīng)用的,不是一堆組件,而是一組API,把底層架構(gòu)隱藏起來。這樣有兩個(gè)主要的好 處:
底層架構(gòu)重用,可支撐多應(yīng)用,運(yùn)營(yíng)更方便。
應(yīng)用和底層架構(gòu)解耦合,底層架構(gòu)可自我演進(jìn),是Scale的必備基礎(chǔ)。