摘要:隨著智能設(shè)備的普及使得高并發(fā)場景越來越多,可擴展成為系統(tǒng)設(shè)計的必要條件,下面分別介紹下可擴展系統(tǒng)的四個重要組成部分一負(fù)載均衡可擴展性冗余容錯水平擴展負(fù)載能力和增加硬件呈線性關(guān)系。目前大多數(shù)互聯(lián)網(wǎng)公司均采用軟件負(fù)載均衡。
肖立鵬原來在騰訊云做架構(gòu)師,目前在Udesk擔(dān)任CTO職位。下面是他分享的Udesk在可擴展高并發(fā)架構(gòu)方面的一些實踐經(jīng)驗。
隨著智能設(shè)備的普及使得高并發(fā)場景越來越多,可擴展成為系統(tǒng)設(shè)計的必要條件,下面分別介紹下可擴展系統(tǒng)的四個重要組成部分
一、負(fù)載均衡——可擴展性&冗余容錯水平擴展:負(fù)載能力和增加硬件呈線性關(guān)系。如果你有一臺服務(wù)器并增加一臺,負(fù)載能力翻 倍,再增加一臺,負(fù)載能力增長33%。
冗余容錯:一臺服務(wù)器死機不會影響服務(wù)的正確性,只是降低系統(tǒng)的負(fù)載能力。
一般的冗余和水平擴展等,都可以通過負(fù)載均衡來實現(xiàn)。主要有3種實現(xiàn)方法:
客戶端負(fù)載均衡:這里的客戶端是廣義的客戶端,例如服務(wù)a調(diào)用服務(wù)b,我們認(rèn)為服務(wù)a是客戶端??蛻舳伺渲胣個服務(wù)端的地址,采取Round-Robin或者其他隨機策略訪問服務(wù)端。優(yōu)點是編碼實現(xiàn)簡單;缺點是變更困難,服務(wù)端遷移需要升級所有客戶端配置,當(dāng)然你可以搭建配置服務(wù),這個服務(wù)本身也是單點,然后為配置服務(wù)實現(xiàn)負(fù)載均衡……
硬件負(fù)載均衡:購買專用的負(fù)載均衡器,例如Citrix NetScaler。優(yōu)點:性能卓越; 缺點:昂貴,高富帥專用。
軟件負(fù)載均衡:通過路由分發(fā),心跳探測等方法,實現(xiàn)軟件層面的負(fù)載均衡,典型的開源組件有:LVS,Nginx和HAProxy等。目前大多數(shù)互聯(lián)網(wǎng)公司均采用軟件負(fù)載均衡。
二、數(shù)據(jù)緩存緩存是一個系統(tǒng)中性能提升的關(guān)鍵。主要有5種實現(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的緩存+存儲解決方案如MongoDB、帶HandlerSocket插件MySQL、ttserver等。數(shù)據(jù)庫緩存的好處是應(yīng)用側(cè)代碼不需要更改。
內(nèi)存緩存:目前的主流解決方案,代表有MemCached和Redis,Redis的優(yōu)點是數(shù)據(jù)結(jié)構(gòu) 豐富,可以輕松支持排名等場景,缺點是單進程實現(xiàn)導(dǎo)致持久化方案不夠完美,今年4月Redis Cluster終于迎來了第一個穩(wěn)定版本,可以實現(xiàn)數(shù)據(jù)自動sharding和容錯,穩(wěn)定性有待后續(xù)檢驗。
網(wǎng)頁緩存:在Apache等HTTP服務(wù)器上,配置full-page cache等策略。
CDN:對于靜態(tài)文件,一般采用CDN來加速。
使用緩存的過程中,必須要注意緩存有效性,在數(shù)據(jù)源更新后,要及時更新緩存中的數(shù)據(jù)。目前主要有read-through和write-through兩種策略,采用write-through的多些。
三、離線處理對搜索引擎,廣告推薦等數(shù)據(jù)分析類場景,必須對數(shù)據(jù)做離線處理。主要有3種主流的實現(xiàn)方法:
定期任務(wù):每天每小時的任務(wù),使用crontab或者其他cron服務(wù)來調(diào)度。
并行計算:采用MapReduce,其它主流開源組件有Hive,Impala等。
消息隊列:任務(wù)排隊,并發(fā)處理等,主流開源組件有RabbitMQ,Kafka。
四、平臺建設(shè)提供給應(yīng)用的,不是一堆組件,而是一組API,把底層架構(gòu)隱藏起來。這樣有兩個主要的好 處:
底層架構(gòu)重用,可支撐多應(yīng)用,運營更方便。
應(yīng)用和底層架構(gòu)解耦合,底層架構(gòu)可自我演進,是Scale的必備基礎(chǔ)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/25145.html
摘要:好的項目代碼結(jié)構(gòu)會大大提升項目的維護性和可擴展性。多說無益,我這里直接給大家一個示意圖,大家可以按照我給的這個項目結(jié)構(gòu)組織項目。你連文件目錄都設(shè)計不好,我拿什么相信你能設(shè)計出來可擴展的程序 很多人都會用項目腳手架,也會跑hello world,然后再寫寫簡單的todolist。但是再往下深入就難了。比如很多教程和老師都會說,大家要多問一個為什么。其實我想說多問你妹啊。我都不知道問為什么...
摘要:網(wǎng)易高級架構(gòu)師談,菜鳥如何發(fā)展成為架構(gòu)師一方面是因為是知識密集型的行業(yè)。那作為一名開發(fā)者,如何規(guī)劃自己的職業(yè)生涯呢一般來說,程序員的技術(shù)生涯會分為技術(shù)新人技術(shù)專家架構(gòu)師個階段,這也是我們的成長的路徑。 作為一名程序員,大家都會為自己未來的職業(yè)發(fā)展焦慮。 網(wǎng)易高級Java架構(gòu)師談,菜鳥如何發(fā)展成為架構(gòu)師一方面是因為IT是知識密集型的行業(yè)。 知識體系復(fù)雜且知識更新速度非??欤蝗詹粚W(xué)就會落...
摘要:第三部分對于參加工作年到年的同學(xué)。我當(dāng)時看的是大話設(shè)計模式這本書,并且寫了完整版的設(shè)計模式博客。這一年,你必須對于設(shè)計模式了如指掌,大話設(shè)計模式可以作為你的開端。與此同時,這個階段你要做的事情還遠(yuǎn)不止如此。 這一部分其實也算是今天的重點,這一部分用來回答很多群里的朋友所問過的問題,那就是大佬你是如何學(xué)習(xí)Java的,能不能給點建議? 今天我是打算來點干貨,因此咱們就不說一些學(xué)習(xí)方法和技巧...
閱讀 2709·2021-11-18 10:07
閱讀 1157·2021-08-03 14:04
閱讀 777·2019-08-30 13:08
閱讀 2632·2019-08-29 15:33
閱讀 1169·2019-08-29 14:07
閱讀 3081·2019-08-29 14:04
閱讀 1516·2019-08-29 11:19
閱讀 1200·2019-08-29 10:59