資深P7架構(gòu)師詳解淘寶服務(wù)端高并發(fā)分布式架構(gòu)演…_第1頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、資深p7架構(gòu)師詳解淘寶服務(wù)端高并發(fā)分布式架構(gòu)演1.概述本文以淘寶作為例子,介紹從一百個(gè)并發(fā)到千萬(wàn)級(jí)并發(fā)狀況下服務(wù)端的架構(gòu)的演進(jìn)過(guò)程,同時(shí)列舉出每個(gè)演進(jìn)階段會(huì)碰到的相關(guān)技術(shù),讓大家對(duì)架構(gòu)的演進(jìn)有一個(gè)整體的認(rèn)知,文章最后匯總了一些架構(gòu)設(shè)計(jì)的原則。2.基本概念在介紹架構(gòu)之前,為了避開(kāi)部分讀者對(duì)架構(gòu)設(shè)計(jì)中的一些概念不了解,下面向幾個(gè)最基礎(chǔ)的概念舉行介紹:分布式系統(tǒng)中的多個(gè)模塊在不同服務(wù)器上部署,即可稱為分布式系統(tǒng),如tomcat和數(shù)據(jù)庫(kù)分離部署在不同的服務(wù)器上,或兩個(gè)相同功能的tomcat分離部署在不同服務(wù)器上高可用系統(tǒng)中部分節(jié)點(diǎn)失效時(shí),其他節(jié)點(diǎn)能夠接替它繼續(xù)提供服務(wù),則可認(rèn)為系統(tǒng)具有高可用性集群一個(gè)

2、特定領(lǐng)域的軟件部署在多臺(tái)服務(wù)器上并作為一個(gè)整體提供一類服務(wù),這個(gè)整體稱為集群。如zookeeper中的master和slave分離部署在多臺(tái)服務(wù)器上,共同組成一個(gè)整體提供集中配置服務(wù)。在頻繁的集群中,客戶端往往能夠銜接隨意一個(gè)節(jié)點(diǎn)獲得服務(wù),并且當(dāng)集群中一個(gè)節(jié)點(diǎn)掉線時(shí),其他節(jié)點(diǎn)往往能夠自動(dòng)的接替它繼續(xù)提供服務(wù),這時(shí)候解釋集群具有高可用性負(fù)載均衡哀求發(fā)送到系統(tǒng)時(shí),通過(guò)某些方式把哀求勻稱分發(fā)到多個(gè)節(jié)點(diǎn)上,使系統(tǒng)中每個(gè)節(jié)點(diǎn)能夠勻稱的處理哀求負(fù)載,則可認(rèn)為系統(tǒng)是負(fù)載均衡的正向代理和反向代理系統(tǒng)內(nèi)部要拜訪外部網(wǎng)絡(luò)時(shí),統(tǒng)一通過(guò)一個(gè)代理服務(wù)器把哀求轉(zhuǎn)發(fā)出去,在外部網(wǎng)絡(luò)看來(lái)就是代理服務(wù)器發(fā)起的拜訪,此時(shí)代理服務(wù)

3、器實(shí)現(xiàn)的是正向代理;當(dāng)外部哀求進(jìn)入系統(tǒng)時(shí),代理服務(wù)器把該哀求轉(zhuǎn)發(fā)到系統(tǒng)中的某臺(tái)服務(wù)器上,對(duì)外部哀求來(lái)說(shuō),與之交互的惟獨(dú)代理服務(wù)器,此時(shí)代理服務(wù)器實(shí)現(xiàn)的是反向代理。容易來(lái)說(shuō),正向代理是代理服務(wù)器代替系統(tǒng)內(nèi)部來(lái)拜訪外部網(wǎng)絡(luò)的過(guò)程,反向代理是外部哀求拜訪系統(tǒng)時(shí)通過(guò)代理服務(wù)器轉(zhuǎn)發(fā)到內(nèi)部服務(wù)器的過(guò)程。3.架構(gòu)演進(jìn)3.1單機(jī)架構(gòu)以淘寶作為例子。在網(wǎng)站最初時(shí),應(yīng)用數(shù)量與用戶數(shù)都較少,可以把tomcat和數(shù)據(jù)庫(kù)部署在同一臺(tái)服務(wù)器上。掃瞄器往發(fā)起哀求時(shí),首先經(jīng)過(guò)dns服務(wù)器(域名系統(tǒng))把域名轉(zhuǎn)換為實(shí)際ip地址,掃瞄器轉(zhuǎn)而拜訪該ip對(duì)應(yīng)的tomcat。隨著用戶數(shù)的增長(zhǎng),tomcat和數(shù)據(jù)庫(kù)之間

4、競(jìng)爭(zhēng)資源,單機(jī)性能不足以支撐業(yè)務(wù)3.2第一次演進(jìn):tomcat與數(shù)據(jù)庫(kù)分開(kāi)部署tomcat和數(shù)據(jù)庫(kù)分離獨(dú)占服務(wù)器資源,顯著提高兩者各自性能。隨著用戶數(shù)的增長(zhǎng),并發(fā)讀寫(xiě)數(shù)據(jù)庫(kù)成為瓶頸3.3其次次演進(jìn):引入本地緩存和分布式緩存在tomcat同服務(wù)器上或同jvm中增強(qiáng)本地緩存,并在外部增強(qiáng)分布式緩存,緩存熱門商品信息或熱門商品的html頁(yè)面等。通過(guò)緩存能把絕大多數(shù)哀求在讀寫(xiě)數(shù)據(jù)庫(kù)前攔截掉,大大降低數(shù)據(jù)庫(kù)壓力。其中涉及的技術(shù)包括:用法memcached作為本地緩存,用法redis作為分布式緩存,還會(huì)涉及緩存全都性、緩存穿透/擊穿、緩存雪崩、熱點(diǎn)數(shù)據(jù)集中失效等問(wèn)題。緩存抗住了大部分的拜訪哀求,隨著用戶數(shù)

5、的增長(zhǎng),并發(fā)壓力主要落在單機(jī)的tomcat上,響應(yīng)逐漸變慢3.4第三次演進(jìn):引入反向代理實(shí)現(xiàn)負(fù)載均衡在多臺(tái)服務(wù)器上分離部署tomcat,用法反向代理軟件(nginx)把哀求勻稱分發(fā)到每個(gè)tomcat中。此處假設(shè)tomcat最多支持100個(gè)并發(fā),nginx最多支持50000個(gè)并發(fā),那么理論上nginx把哀求分發(fā)到500個(gè)tomcat上,就能抗住50000個(gè)并發(fā)。其中涉及的技術(shù)包括:nginx、haproxy,兩者都是工作在網(wǎng)絡(luò)第七層的反向代理軟件,主要支持http協(xié)議,還會(huì)涉及session分享、文件上傳下載的問(wèn)題。反向代理使應(yīng)用服務(wù)器可支持的并發(fā)量大大增強(qiáng),但并發(fā)量的增長(zhǎng)也意味著更多哀求穿透到

6、數(shù)據(jù)庫(kù),單機(jī)的數(shù)據(jù)庫(kù)終于成為瓶頸3.5第四次演進(jìn):數(shù)據(jù)庫(kù)讀寫(xiě)分別把數(shù)據(jù)庫(kù)劃分為讀庫(kù)和寫(xiě)庫(kù),讀庫(kù)可以有多個(gè),通過(guò)同步機(jī)制把寫(xiě)庫(kù)的數(shù)據(jù)同步到讀庫(kù),對(duì)于需要查詢最新寫(xiě)入數(shù)據(jù)場(chǎng)景,可通過(guò)在緩存中多寫(xiě)一份,通過(guò)緩存獲得最新數(shù)據(jù)。其中涉及的技術(shù)包括:mycat,它是數(shù)據(jù)庫(kù)中間件,可通過(guò)它來(lái)組織數(shù)據(jù)庫(kù)的分別讀寫(xiě)和分庫(kù)分表,客戶端通過(guò)它來(lái)拜訪下層數(shù)據(jù)庫(kù),還會(huì)涉及數(shù)據(jù)同步,數(shù)據(jù)全都性的問(wèn)題。業(yè)務(wù)逐漸變多,不同業(yè)務(wù)之間的拜訪量差距較大,不同業(yè)務(wù)挺直競(jìng)爭(zhēng)數(shù)據(jù)庫(kù),互相影響性能3.6第五次演進(jìn):數(shù)據(jù)庫(kù)按業(yè)務(wù)分庫(kù)把不同業(yè)務(wù)的數(shù)據(jù)保存到不同的數(shù)據(jù)庫(kù)中,使業(yè)務(wù)之間的資源競(jìng)爭(zhēng)降低,對(duì)于拜訪量大的業(yè)務(wù),可以部署更多的服務(wù)器來(lái)支撐

7、。這樣同時(shí)導(dǎo)致跨業(yè)務(wù)的表無(wú)法挺直做關(guān)聯(lián)分析,需要通過(guò)其他途徑來(lái)解決,但這不是本文研究的重點(diǎn),有愛(ài)好的可以自行搜尋解決計(jì)劃。隨著用戶數(shù)的增長(zhǎng),單機(jī)的寫(xiě)庫(kù)會(huì)逐漸會(huì)達(dá)到性能瓶頸3.7第六次演進(jìn):把大表拆分為小表比如針對(duì)評(píng)論數(shù)據(jù),可根據(jù)商品id舉行hash,路由到對(duì)應(yīng)的表中存儲(chǔ);針對(duì)支付記錄,可根據(jù)小時(shí)創(chuàng)建表,每個(gè)小時(shí)表繼續(xù)拆分為小表,用法用戶id或記錄編號(hào)來(lái)路由數(shù)據(jù)。只要實(shí)時(shí)操作的表數(shù)據(jù)量足夠小,哀求能夠足夠勻稱的分發(fā)到多臺(tái)服務(wù)器上的小表,那數(shù)據(jù)庫(kù)就能通過(guò)水平擴(kuò)展的方式來(lái)提高性能。其中前面提到的mycat也支持在大表拆分為小表狀況下的拜訪控制。這種做法顯著的增強(qiáng)了數(shù)據(jù)庫(kù)運(yùn)維的難度,對(duì)dba的要求較高

8、。數(shù)據(jù)庫(kù)設(shè)計(jì)到這種結(jié)構(gòu)時(shí),已經(jīng)可以稱為分布式數(shù)據(jù)庫(kù),但是這只是一個(gè)規(guī)律的數(shù)據(jù)庫(kù)整體,數(shù)據(jù)庫(kù)里不同的組成部分是由不同的組件單獨(dú)來(lái)實(shí)現(xiàn)的,如分庫(kù)分表的管理和哀求分發(fā),由mycat實(shí)現(xiàn),sql的解析由單機(jī)的數(shù)據(jù)庫(kù)實(shí)現(xiàn),讀寫(xiě)分別可能由網(wǎng)關(guān)和消息隊(duì)列來(lái)實(shí)現(xiàn),查詢結(jié)果的匯總可能由數(shù)據(jù)庫(kù)接口層來(lái)實(shí)現(xiàn)等等,這種架構(gòu)其實(shí)是mpp(大規(guī)模并行處理)架構(gòu)的一類實(shí)現(xiàn)。目前開(kāi)源和商用都已經(jīng)有不少mpp數(shù)據(jù)庫(kù),開(kāi)源中比較流行的有g(shù)reenplum、tidb、postgresqlxc、hawq等,商用的如南大通用的gbase、睿帆科技的雪球db、華為的libra等等,不同的mpp數(shù)據(jù)庫(kù)的側(cè)重點(diǎn)也不一樣,如tidb更側(cè)重于分布式oltp場(chǎng)景,greenplum更側(cè)重于分布式olap場(chǎng)景,這些mpp數(shù)據(jù)庫(kù)基本都提供了類似postgresql、oracle、mysql那樣的sql標(biāo)準(zhǔn)支持能力,能把一個(gè)查詢解析為分布式的執(zhí)行方案分發(fā)到每臺(tái)機(jī)器上并行執(zhí)行,終于由數(shù)據(jù)庫(kù)本身匯總數(shù)據(jù)舉行返回,也提供了諸如權(quán)限管

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論