精品国产亚洲一区二区三区|亚洲国产精彩中文乱码AV|久久久久亚洲AV综合波多野结衣|漂亮少妇各种调教玩弄在线

<blockquote id="ixlwe"><option id="ixlwe"></option></blockquote>
  • <span id="ixlwe"></span>

  • <abbr id="ixlwe"></abbr>

    互聯(lián)網(wǎng)高可用架構(gòu)技術(shù)實(shí)踐

    大數(shù)據(jù)

    作者:jihong10102006

    一、什么是高可用

    高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過(guò)設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。

    假設(shè)系統(tǒng)一直能夠提供服務(wù),我們說(shuō)系統(tǒng)的可用性是100%。如果系統(tǒng)每運(yùn)行100個(gè)時(shí)間單位,會(huì)有1個(gè)時(shí)間單位無(wú)法提供服務(wù),我們說(shuō)系統(tǒng)的可用性是99%。很多公司的高可用目標(biāo)是4個(gè)9,也就是99.99%,這就意味著,系統(tǒng)的年停機(jī)時(shí)間為8.76個(gè)小時(shí)。

    百度的搜索首頁(yè),是業(yè)內(nèi)公認(rèn)高可用保障非常出色的系統(tǒng),甚至人們會(huì)通過(guò)www.baidu.com能不能訪(fǎng)問(wèn)來(lái)判斷“網(wǎng)絡(luò)的連通性”,百度高可用的服務(wù)讓人留下啦“網(wǎng)絡(luò)通暢,百度就能訪(fǎng)問(wèn)”,“百度打不開(kāi),應(yīng)該是網(wǎng)絡(luò)連不上”的印象,這其實(shí)是對(duì)百度HA最高的褒獎(jiǎng)。

    二、如何保障系統(tǒng)的高可用

    我們都知道,單點(diǎn)是系統(tǒng)高可用的大敵,單點(diǎn)往往是系統(tǒng)高可用最大的風(fēng)險(xiǎn)和敵人,應(yīng)該盡量在系統(tǒng)設(shè)計(jì)的過(guò)程中避免單點(diǎn)。方法論上,高可用保證的原則是“集群化”,或者叫“冗余”:只有一個(gè)單點(diǎn),掛了服務(wù)會(huì)受影響;如果有冗余備份,掛了還有其他backup能夠頂上。

    保證系統(tǒng)高可用,架構(gòu)設(shè)計(jì)的核心準(zhǔn)則是:冗余。有了冗余之后,還不夠,每次出現(xiàn)故障需要人工介入恢復(fù)勢(shì)必會(huì)增加系統(tǒng)的不可服務(wù)實(shí)踐。所以,又往往是通過(guò)“自動(dòng)故障轉(zhuǎn)移”來(lái)實(shí)現(xiàn)系統(tǒng)的高可用。接下來(lái)我們看下典型互聯(lián)網(wǎng)架構(gòu)中,如何通過(guò)冗余+自動(dòng)故障轉(zhuǎn)移來(lái)保證系統(tǒng)的高可用特性。

    三、常見(jiàn)的互聯(lián)網(wǎng)分層架構(gòu)

    大數(shù)據(jù)

    常見(jiàn)互聯(lián)網(wǎng)分布式架構(gòu)如上,分為:

    (1)客戶(hù)端層:典型調(diào)用方是瀏覽器browser或者手機(jī)應(yīng)用APP(2)反向代理層:系統(tǒng)入口,反向代理(3)站點(diǎn)應(yīng)用層:實(shí)現(xiàn)核心應(yīng)用邏輯,返回html或者json(4)服務(wù)層:如果實(shí)現(xiàn)了服務(wù)化,就有這一層(5)數(shù)據(jù)-緩存層:緩存加速訪(fǎng)問(wèn)存儲(chǔ)(6)數(shù)據(jù)-數(shù)據(jù)庫(kù)層:數(shù)據(jù)庫(kù)固化數(shù)據(jù)存儲(chǔ)

    整個(gè)系統(tǒng)的高可用,又是通過(guò)每一層的冗余+自動(dòng)故障轉(zhuǎn)移來(lái)綜合實(shí)現(xiàn)的。

    四、分層高可用架構(gòu)實(shí)踐

    1. 客戶(hù)端層->反向代理層的高可用

    大數(shù)據(jù)

    客戶(hù)端層到反向代理層的高可用,是通過(guò)反向代理層的冗余來(lái)實(shí)現(xiàn)的。以nginx為例:有兩臺(tái)nginx,一臺(tái)對(duì)線(xiàn)上提供服務(wù),另一臺(tái)冗余以保證高可用,常見(jiàn)的實(shí)踐是keepalived存活探測(cè),相同virtual IP提供服務(wù)。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)nginx掛了的時(shí)候,keepalived能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到shadow-nginx,由于使用的是相同的virtual IP,這個(gè)切換過(guò)程對(duì)調(diào)用方是透明的。

    2. 反向代理層->站點(diǎn)層的高可用

    大數(shù)據(jù)

    反向代理層到站點(diǎn)層的高可用,是通過(guò)站點(diǎn)層的冗余來(lái)實(shí)現(xiàn)的。假設(shè)反向代理層是nginx,nginx.conf里能夠配置多個(gè)web后端,并且nginx能夠探測(cè)到多個(gè)后端的存活性。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)web-server掛了的時(shí)候,nginx能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到其他的web-server,整個(gè)過(guò)程由nginx自動(dòng)完成,對(duì)調(diào)用方是透明的。

    3. 站點(diǎn)層->服務(wù)層的高可用

    大數(shù)據(jù)

    站點(diǎn)層到服務(wù)層的高可用,是通過(guò)服務(wù)層的冗余來(lái)實(shí)現(xiàn)的?!胺?wù)連接池”會(huì)建立與下游服務(wù)多個(gè)連接,每次請(qǐng)求會(huì)“隨機(jī)”選取連接來(lái)訪(fǎng)問(wèn)下游服務(wù)。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)service掛了的時(shí)候,service-connection-pool能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到其他的service,整個(gè)過(guò)程由連接池自動(dòng)完成,對(duì)調(diào)用方是透明的(所以說(shuō)RPC-client中的服務(wù)連接池是很重要的基礎(chǔ)組件)。

    4. 服務(wù)層>緩存層的高可用

    大數(shù)據(jù)

    服務(wù)層到緩存層的高可用,是通過(guò)緩存數(shù)據(jù)的冗余來(lái)實(shí)現(xiàn)的。 緩存層的數(shù)據(jù)冗余又有幾種方式:第一種是利用客戶(hù)端的封裝,service對(duì)cache進(jìn)行雙讀或者雙寫(xiě)。

    大數(shù)據(jù)

    緩存層也可以通過(guò)支持主從同步的緩存集群來(lái)解決緩存層的高可用問(wèn)題。

    以redis為例,redis天然支持主從同步,redis官方也有sentinel哨兵機(jī)制,來(lái)做redis的存活性檢測(cè)。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)redis主掛了的時(shí)候,sentinel能夠探測(cè)到,會(huì)通知調(diào)用方訪(fǎng)問(wèn)新的redis,整個(gè)過(guò)程由sentinel和redis集群配合完成,對(duì)調(diào)用方是透明的。

    說(shuō)完緩存的高可用,這里要多說(shuō)一句,業(yè)務(wù)對(duì)緩存并不一定有“高可用”要求,更多的對(duì)緩存的使用場(chǎng)景,是用來(lái)“加速數(shù)據(jù)訪(fǎng)問(wèn)”:把一部分?jǐn)?shù)據(jù)放到緩存里,如果緩存掛了或者緩存沒(méi)有命中,是可以去后端的數(shù)據(jù)庫(kù)中再取數(shù)據(jù)的。

    這類(lèi)允許“cache miss”的業(yè)務(wù)場(chǎng)景,緩存架構(gòu)的建議是:

    大數(shù)據(jù)

    將kv緩存封裝成服務(wù)集群,上游設(shè)置一個(gè)代理(代理可以用集群的方式保證高可用),代理的后端根據(jù)緩存訪(fǎng)問(wèn)的key水平切分成若干個(gè)實(shí)例,每個(gè)實(shí)例的訪(fǎng)問(wèn)并不做高可用。

    大數(shù)據(jù)

    緩存實(shí)例掛了屏蔽:當(dāng)有水平切分的實(shí)例掛掉時(shí),代理層直接返回cache miss,此時(shí)緩存掛掉對(duì)調(diào)用方也是透明的。key水平切分實(shí)例減少,不建議做re-hash,這樣容易引發(fā)緩存數(shù)據(jù)的不一致。

    5. 服務(wù)層>數(shù)據(jù)庫(kù)層的高可用

    大部分互聯(lián)網(wǎng)技術(shù),數(shù)據(jù)庫(kù)層都用了“主從同步,讀寫(xiě)分離”架構(gòu),所以數(shù)據(jù)庫(kù)層的高可用,又分為“讀庫(kù)高可用”與“寫(xiě)庫(kù)高可用”兩類(lèi)。

    服務(wù)層>數(shù)據(jù)庫(kù)層“讀”的高可用

    大數(shù)據(jù)

    服務(wù)層到數(shù)據(jù)庫(kù)讀的高可用,是通過(guò)讀庫(kù)的冗余來(lái)實(shí)現(xiàn)的。

    既然冗余了讀庫(kù),一般來(lái)說(shuō)就至少有2個(gè)從庫(kù),“數(shù)據(jù)庫(kù)連接池”會(huì)建立與讀庫(kù)多個(gè)連接,每次請(qǐng)求會(huì)路由到這些讀庫(kù)。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)讀庫(kù)掛了的時(shí)候,db-connection-pool能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到其他的讀庫(kù),整個(gè)過(guò)程由連接池自動(dòng)完成,對(duì)調(diào)用方是透明的(所以說(shuō)DAO中的數(shù)據(jù)庫(kù)連接池是很重要的基礎(chǔ)組件)。

    服務(wù)層>數(shù)據(jù)庫(kù)層“寫(xiě)”的高可用

    大數(shù)據(jù)

    服務(wù)層到數(shù)據(jù)庫(kù)寫(xiě)的高可用,是通過(guò)寫(xiě)庫(kù)的冗余來(lái)實(shí)現(xiàn)的。

    以mysql為例,可以設(shè)置兩個(gè)mysql雙主同步,一臺(tái)對(duì)線(xiàn)上提供服務(wù),另一臺(tái)冗余以保證高可用,常見(jiàn)的實(shí)踐是keepalived存活探測(cè),相同virtual IP提供服務(wù)。

    大數(shù)據(jù)

    自動(dòng)故障轉(zhuǎn)移:當(dāng)寫(xiě)庫(kù)掛了的時(shí)候,keepalived能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到shadow-db-master,由于使用的是相同的virtual IP,這個(gè)切換過(guò)程對(duì)調(diào)用方是透明的。

    五、總結(jié)

    高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過(guò)設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。

    方法論上,高可用是通過(guò)冗余+自動(dòng)故障轉(zhuǎn)移來(lái)實(shí)現(xiàn)的。

    整個(gè)互聯(lián)網(wǎng)分層系統(tǒng)架構(gòu)的高可用,又是通過(guò)每一層的冗余+自動(dòng)故障轉(zhuǎn)移來(lái)綜合實(shí)現(xiàn)的,具體的:

    客戶(hù)端層到反向代理層的高可用,是通過(guò)反向代理層的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是keepalived + virtual IP自動(dòng)故障轉(zhuǎn)移。反向代理層到站點(diǎn)層的高可用,是通過(guò)站點(diǎn)層的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是nginx與web-server之間的存活性探測(cè)與自動(dòng)故障轉(zhuǎn)移。站點(diǎn)層到服務(wù)層的高可用,是通過(guò)服務(wù)層的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是通過(guò)service-connection-pool來(lái)保證自動(dòng)故障轉(zhuǎn)移。服務(wù)層到緩存層的高可用,是通過(guò)緩存數(shù)據(jù)的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是緩存客戶(hù)端雙讀雙寫(xiě),或者利用緩存集群的主從數(shù)據(jù)同步與sentinel?;钆c自動(dòng)故障轉(zhuǎn)移;更多的業(yè)務(wù)場(chǎng)景,對(duì)緩存沒(méi)有高可用要求,可以使用緩存服務(wù)化來(lái)對(duì)調(diào)用方屏蔽底層復(fù)雜性。服務(wù)層到數(shù)據(jù)庫(kù)“讀”的高可用,是通過(guò)讀庫(kù)的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是通過(guò)db-connection-pool來(lái)保證自動(dòng)故障轉(zhuǎn)移。服務(wù)層到數(shù)據(jù)庫(kù)“寫(xiě)”的高可用,是通過(guò)寫(xiě)庫(kù)的冗余實(shí)現(xiàn)的,常見(jiàn)實(shí)踐是keepalived + virtual IP自動(dòng)故障轉(zhuǎn)移。

    末了,希望文章的思路是清晰的,希望大家對(duì)高可用的概念和實(shí)踐有個(gè)系統(tǒng)的認(rèn)識(shí).

    極客網(wǎng)企業(yè)會(huì)員

    免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

    2017-10-27
    互聯(lián)網(wǎng)高可用架構(gòu)技術(shù)實(shí)踐
    作者:jihong10102006 一、什么是高可用 高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,

    長(zhǎng)按掃碼 閱讀全文