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