摘要:隨著智能設(shè)備的普及使得高并發(fā)場(chǎng)景越來越多,可擴(kuò)展成為系統(tǒng)設(shè)計(jì)的必要條件,下面分別介紹下可擴(kuò)展系統(tǒng)的四個(gè)重要組成部分一負(fù)載均衡可擴(kuò)展性冗余容錯(cuò)水平擴(kuò)展負(fù)載能力和增加硬件呈線性關(guān)系。目前大多數(shù)互聯(lián)網(wǎng)公司均采用軟件負(fù)載均衡。
肖立鵬原來在騰訊云做架構(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是客戶端。客戶端配置n個(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ù)庫(kù)層:數(shù)據(jù)庫(kù)引擎自身的緩存,需要DBA來配置優(yōu)化,當(dāng)然現(xiàn)在也有不少NoSQL的緩存+存儲(chǔ)解決方案如MongoDB、帶HandlerSocket插件MySQL、ttserver等。數(shù)據(jù)庫(kù)緩存的好處是應(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ǔ)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/25145.html
摘要:好的項(xiàng)目代碼結(jié)構(gòu)會(huì)大大提升項(xiàng)目的維護(hù)性和可擴(kuò)展性。多說無益,我這里直接給大家一個(gè)示意圖,大家可以按照我給的這個(gè)項(xiàng)目結(jié)構(gòu)組織項(xiàng)目。你連文件目錄都設(shè)計(jì)不好,我拿什么相信你能設(shè)計(jì)出來可擴(kuò)展的程序 很多人都會(huì)用項(xiàng)目腳手架,也會(huì)跑hello world,然后再寫寫簡(jiǎn)單的todolist。但是再往下深入就難了。比如很多教程和老師都會(huì)說,大家要多問一個(gè)為什么。其實(shí)我想說多問你妹啊。我都不知道問為什么...
摘要:網(wǎng)易高級(jí)架構(gòu)師談,菜鳥如何發(fā)展成為架構(gòu)師一方面是因?yàn)槭侵R(shí)密集型的行業(yè)。那作為一名開發(fā)者,如何規(guī)劃自己的職業(yè)生涯呢一般來說,程序員的技術(shù)生涯會(huì)分為技術(shù)新人技術(shù)專家架構(gòu)師個(gè)階段,這也是我們的成長(zhǎng)的路徑。 作為一名程序員,大家都會(huì)為自己未來的職業(yè)發(fā)展焦慮。 網(wǎng)易高級(jí)Java架構(gòu)師談,菜鳥如何發(fā)展成為架構(gòu)師一方面是因?yàn)镮T是知識(shí)密集型的行業(yè)。 知識(shí)體系復(fù)雜且知識(shí)更新速度非常快,一日不學(xué)就會(huì)落...
摘要:第三部分對(duì)于參加工作年到年的同學(xué)。我當(dāng)時(shí)看的是大話設(shè)計(jì)模式這本書,并且寫了完整版的設(shè)計(jì)模式博客。這一年,你必須對(duì)于設(shè)計(jì)模式了如指掌,大話設(shè)計(jì)模式可以作為你的開端。與此同時(shí),這個(gè)階段你要做的事情還遠(yuǎn)不止如此。 這一部分其實(shí)也算是今天的重點(diǎn),這一部分用來回答很多群里的朋友所問過的問題,那就是大佬你是如何學(xué)習(xí)Java的,能不能給點(diǎn)建議? 今天我是打算來點(diǎn)干貨,因此咱們就不說一些學(xué)習(xí)方法和技巧...
閱讀 2623·2021-11-18 10:07
閱讀 1083·2021-08-03 14:04
閱讀 725·2019-08-30 13:08
閱讀 2578·2019-08-29 15:33
閱讀 1086·2019-08-29 14:07
閱讀 2985·2019-08-29 14:04
閱讀 1435·2019-08-29 11:19
閱讀 1143·2019-08-29 10:59