日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]后臺服務(wù)可以劃分為兩類,有狀態(tài)和無狀態(tài)。高可用對于無狀態(tài)的應(yīng)用來說是比較簡單的,無狀態(tài)的應(yīng)用,只需要通過F5或者任何代理的方式就可以很好的解決。后文描述的主要是針對有狀態(tài)的服務(wù)進(jìn)行分析。服務(wù)端進(jìn)行狀態(tài)維護(hù)主要是通過磁盤或內(nèi)存進(jìn)行保存,比如MySQL數(shù)據(jù)庫,redis等內(nèi)存數(shù)據(jù)庫。除了這兩種類型的維護(hù)方式,還有jvm的內(nèi)存的狀態(tài)維持,但jvm的狀態(tài)生命周期通常很短。

后臺服務(wù)可以劃分為兩類,有狀態(tài)和無狀態(tài)。高可用對于無狀態(tài)的應(yīng)用來說是比較簡單的,無狀態(tài)的應(yīng)用,只需要通過F5或者任何代理的方式就可以很好的解決。后文描述的主要是針對有狀態(tài)的服務(wù)進(jìn)行分析。服務(wù)端進(jìn)行狀態(tài)維護(hù)主要是通過磁盤或內(nèi)存進(jìn)行保存,比如MySQL數(shù)據(jù)庫,redis等內(nèi)存數(shù)據(jù)庫。除了這兩種類型的維護(hù)方式,還有jvm的內(nèi)存的狀態(tài)維持,但jvm的狀態(tài)生命周期通常很短。

高可用的一些解決方案

高可用,從發(fā)展來看,大致經(jīng)過了這幾個過程:

  • 冷備
  • 雙機(jī)熱備
  • 同城雙活
  • 異地雙活
  • 異地多活

在聊異地多活的時候,還是先看一些其他的方案,這有利于我們理解很多設(shè)計(jì)的緣由。

冷備

冷備,通過停止數(shù)據(jù)庫對外服務(wù)的能力,通過文件拷貝的方式將數(shù)據(jù)快速進(jìn)行備份歸檔的操作方式。簡而言之,冷備,就是復(fù)制粘貼,在linux上通過cp命令就可以很快完成。可以通過人為操作,或者定時腳本進(jìn)行。有如下好處:

  • 簡單
  • 快速備份(相對于其他備份方式)
  • 快速恢復(fù)。只需要將備份文件拷貝回工作目錄即完成恢復(fù)過程(亦或者修改數(shù)據(jù)庫的配置,直接將備份的目錄修改為數(shù)據(jù)庫工作目錄)。更甚,通過兩次 mv命令就可瞬間完成恢復(fù)。
  • 可以按照時間點(diǎn)恢復(fù)。比如,幾天前發(fā)生的拼多多優(yōu)惠券漏洞被人刷掉很多錢,可以根據(jù)前一個時間點(diǎn)進(jìn)行還原,“挽回?fù)p失”。

以上的好處,對于以前的軟件來說,是很好的方式。但是對于現(xiàn)如今的很多場景,已經(jīng)不好用了,因?yàn)椋?/p>

  • 服務(wù)需要停機(jī)。n個9肯定無法做到了。然后,以前我們的停機(jī)冷備是在凌晨沒有人使用的時候進(jìn)行,但是現(xiàn)在很多的互聯(lián)網(wǎng)應(yīng)用已經(jīng)是面向全球了,所以,任何時候都是有人在使用的。
  • 數(shù)據(jù)丟失。如果不采取措施,那么在完成了數(shù)據(jù)恢復(fù)后,備份時間點(diǎn)到還原時間內(nèi)的數(shù)據(jù)會丟失。傳統(tǒng)的做法,是冷備還原以后,通過數(shù)據(jù)庫日志手動恢復(fù)數(shù)據(jù)。比如通過redo日志,更甚者,我還曾經(jīng)通過業(yè)務(wù)日志去手動回放請求恢復(fù)數(shù)據(jù)?;謴?fù)是極大的體力活,錯誤率高,恢復(fù)時間長。
  • 冷備是全量備份。全量備份會造成磁盤空間浪費(fèi),以及容量不足的問題,只能通過將備份拷貝到其他移動設(shè)備上解決。所以,整個備份過程的時間其實(shí)更長了。想象一下每天拷貝幾個T的數(shù)據(jù)到移動硬盤上,需要多少移動硬盤和時間。并且,全量備份是無法定制化的,比如只備份某一些表,是無法做到的。

如何權(quán)衡冷備的利弊,是每個業(yè)務(wù)需要考慮的。

雙機(jī)熱備

熱備,和冷備比起來,主要的差別是不用停機(jī),一邊備份一邊提供服務(wù)。但還原的時候還是需要停機(jī)的。由于我們討論的是和存儲相關(guān)的,所以不將共享磁盤的方式看作雙機(jī)熱備。

Active/Standby模式

相當(dāng)于1主1從,主節(jié)點(diǎn)對外提供服務(wù),從節(jié)點(diǎn)作為backup。通過一些手段將數(shù)據(jù)從主節(jié)點(diǎn)同步到從節(jié)點(diǎn),當(dāng)故障發(fā)生時,將從節(jié)點(diǎn)設(shè)置為工作節(jié)點(diǎn)。數(shù)據(jù)同步的方式可以是偏軟件層面,也可以是偏硬件層面的。

偏軟件層面的,比如mysql的master/slave方式,通過同步binlog的方式;sqlserver的訂閱復(fù)制方式。

偏硬件層面,通過扇區(qū)和磁盤的攔截等鏡像技術(shù),將數(shù)據(jù)拷貝到另外的磁盤。偏硬件的方式,也被叫做數(shù)據(jù)級災(zāi)備;偏軟件的,被叫做應(yīng)用級災(zāi)備。后文談得更多的是應(yīng)用級災(zāi)備。

雙機(jī)互備

本質(zhì)上還是Active/Standby,只是互為主從而已。雙機(jī)互備并不能工作于同一個業(yè)務(wù),只是在服務(wù)器角度來看,更好的壓榨了可用的資源。比如,兩個業(yè)務(wù)分別有庫A和B,通過兩個機(jī)器P和Q進(jìn)行部署。那么對于A業(yè)務(wù),P主Q從,對于B業(yè)務(wù),Q主P從。整體上看起來是兩個機(jī)器互為主備。這種架構(gòu)下,讀寫分離是很好的,單寫多讀,減少沖突又提高了效率。

其他的高可用方案還可以參考各類數(shù)據(jù)庫的多種部署模式,比如mysql的主從、雙主多從、MHA;redis的主從,哨兵,cluster等等。

同城雙活

前面講到的幾種方案,基本都是在一個局域網(wǎng)內(nèi)進(jìn)行的。業(yè)務(wù)發(fā)展到后面,有了同城多活的方案。和前面比起來,不信任的粒度從機(jī)器轉(zhuǎn)為了機(jī)房。這種方案可以解決某個IDC機(jī)房整體掛掉的情況(停電,斷網(wǎng)等)。

同城雙活其實(shí)和前文提到的雙機(jī)熱備沒有本質(zhì)的區(qū)別,只是“距離”更遠(yuǎn)了,基本上還是一樣(同城專線網(wǎng)速還是很快的)。雙機(jī)熱備提供了災(zāi)備能力,雙機(jī)互備避免了過多的資源浪費(fèi)。

在程序代碼的輔助下,有的業(yè)務(wù)還可以做到真正的雙活,即同一個業(yè)務(wù),雙主,同時提供讀寫,只要處理好沖突的問題即可。需要注意的是,并不是所有的業(yè)務(wù)都能做到。

業(yè)界更多采用的是兩地三中心的做法。遠(yuǎn)端的備份機(jī)房能更大的提供災(zāi)備能力,能更好的抵抗地震,恐襲等情況。雙活的機(jī)器必須部署到同城,距離更遠(yuǎn)的城市作為災(zāi)備機(jī)房。災(zāi)備機(jī)房是不對外提供服務(wù)的,只作為備份使用,發(fā)生故障了才切流量到災(zāi)備機(jī)房;或者是只作為數(shù)據(jù)備份。原因主要在于:距離太遠(yuǎn),網(wǎng)絡(luò)延遲太大。

高可用解決方案:同城雙活?異地雙活?異地多活?

如上圖,用戶流量通過負(fù)載均衡,將服務(wù)A的流量發(fā)送到IDC1,服務(wù)器集A;將服務(wù)B的流量發(fā)送到IDC2,服務(wù)器B;同時,服務(wù)器集a和b分別從A和B進(jìn)行同城專線的數(shù)據(jù)同步,并且通過長距離的異地專線往IDC3進(jìn)行同步。當(dāng)任何一個IDC當(dāng)機(jī)時,將所有流量切到同城的另一個IDC機(jī)房,完成了failover。當(dāng)城市1發(fā)生大面積故障時,比如發(fā)生地震導(dǎo)致IDC1和2同時停止工作,則數(shù)據(jù)在IDC3得以保全。同時,如果負(fù)載均衡仍然有效,也可以將流量全部轉(zhuǎn)發(fā)到IDC3中。不過,此時IDC3機(jī)房的距離非常遠(yuǎn),網(wǎng)絡(luò)延遲變得很嚴(yán)重,通常用戶的體驗(yàn)的會受到嚴(yán)重影響的。

高可用解決方案:同城雙活?異地雙活?異地多活?

上圖是一種基于Master-Slave模式的兩地三中心示意圖。城市1中的兩個機(jī)房作為1主1從,異地機(jī)房作為從。也可以采用同城雙主+keepalived+vip的方式,或者M(jìn)HA的方式進(jìn)行failover。但城市2不能(最好不要)被選擇為Master。

異地雙活

同城雙活可以應(yīng)對大部分的災(zāi)備情況,但是碰到大面積停電,或者自然災(zāi)害的時候,服務(wù)依然會中斷。對上面的兩地三中心進(jìn)行改造,在異地也部署前端入口節(jié)點(diǎn)和應(yīng)用,在城市1停止服務(wù)后將流量切到城市2,可以在降低用戶體驗(yàn)的情況下,進(jìn)行降級。但用戶的體驗(yàn)下降程度非常大。

所以大多數(shù)的互聯(lián)網(wǎng)公司采用了異地雙活的方案。

高可用解決方案:同城雙活?異地雙活?異地多活?

上圖是一個簡單的異地雙活的示意圖。流量經(jīng)過LB后分發(fā)到兩個城市的服務(wù)器集群中,服務(wù)器集群只連接本地的數(shù)據(jù)庫集群,只有當(dāng)本地的所有數(shù)據(jù)庫集群均不能訪問,才failover到異地的數(shù)據(jù)庫集群中。

在這種方式下,由于異地網(wǎng)絡(luò)問題,雙向同步需要花費(fèi)更多的時間。更長的同步時間將會導(dǎo)致更加嚴(yán)重的吞吐量下降,或者出現(xiàn)數(shù)據(jù)沖突的情況。吞吐量和沖突是兩個對立的問題,你需要在其中進(jìn)行權(quán)衡。例如,為了解決沖突,引入分布式鎖/分布式事務(wù);為了解決達(dá)到更高的吞吐量,利用中間狀態(tài)、錯誤重試等手段,達(dá)到最終一致性;降低沖突,將數(shù)據(jù)進(jìn)行恰當(dāng)?shù)膕harding,盡可能在一個節(jié)點(diǎn)中完成整個事務(wù)。

對于一些無法接受最終一致性的業(yè)務(wù),餓了么采用的是下圖的方式:

高可用解決方案:同城雙活?異地雙活?異地多活?

對于個別一致性要求很高的應(yīng)用,我們提供了一種強(qiáng)一致的方案(Global Zone),Globa Zone是一種跨機(jī)房的讀寫分離機(jī)制,所有的寫操作被定向到一個 Master 機(jī)房進(jìn)行,以保證一致性,讀操作可以在每個機(jī)房的 Slave庫執(zhí)行,也可以 bind 到 Master 機(jī)房進(jìn)行,這一切都基于我們的數(shù)據(jù)庫訪問層(DAL)完成,業(yè)務(wù)基本無感知。

也就是說,在這個區(qū)域是不能進(jìn)行雙活的。采用主從而不是雙寫,自然解決了沖突的問題。

實(shí)際上,異地雙活和異地多活已經(jīng)很像了,雙活的結(jié)構(gòu)更為簡單,所以在程序架構(gòu)上不用做過多的考慮,只需要做傳統(tǒng)的限流,failover等操作即可。但其實(shí)雙活只是一個臨時的步驟,最終的目的是切換到多活。因?yàn)殡p活除了有數(shù)據(jù)沖突上的問題意外,還無法進(jìn)行橫向擴(kuò)展。

異地多活

高可用解決方案:同城雙活?異地雙活?異地多活?

根據(jù)異地雙活的思路,我們可以畫出異地多活的一種示意圖。每個節(jié)點(diǎn)的出度和入度都是4,在這種情況下,任何節(jié)點(diǎn)下線都不會對業(yè)務(wù)有影響。但是,考慮到距離的問題,一次寫操作將帶來更大的時間開銷。時間開銷除了影響用戶體驗(yàn)以外,還帶來了更多的數(shù)據(jù)沖突。在嚴(yán)重的數(shù)據(jù)沖突下,使用分布式鎖的代價也更大。這將導(dǎo)致系統(tǒng)的復(fù)雜度上升,吞吐量下降。所以上圖的方案是無法使用的。

回憶一下我們在解決網(wǎng)狀網(wǎng)絡(luò)拓?fù)涞臅r候是怎么優(yōu)化的?引入中間節(jié)點(diǎn),將網(wǎng)狀改為星狀:

高可用解決方案:同城雙活?異地雙活?異地多活?

改造為上圖后,每個城市下線都不會對數(shù)據(jù)造成影響。對于原有請求城市的流量,會被重新LoadBalance到新的節(jié)點(diǎn)(最好是LB到最近的城市)。為了解決數(shù)據(jù)安全的問題,我們只需要針對中心節(jié)點(diǎn)進(jìn)行處理即可。但是這樣,對于中心城市的要求,比其他城市會更高。比如恢復(fù)速度,備份完整性等,這里暫時不展開。我們先假定中心是完全安全的。

如果我們已經(jīng)將異地多活的業(yè)務(wù)部署為上圖的結(jié)構(gòu),很大程度解決了數(shù)據(jù)到處同步的問題,不過依然會存在大量的沖突,沖突的情況可以簡單認(rèn)為和雙活差不多。那么還有沒有更好的方式呢?

回顧一下前文提到的餓了么的GlobalZone方案,總體思路就是“去分布式”,也就是說將寫的業(yè)務(wù)放到一個節(jié)點(diǎn)的(同城)機(jī)器上。阿里是這么思考的:

高可用解決方案:同城雙活?異地雙活?異地多活?

實(shí)際上我猜測很多業(yè)務(wù)也是按照上圖去實(shí)現(xiàn)的,比如滴滴打車業(yè)務(wù)這種,所有的業(yè)務(wù)都是按城市劃分開的。用戶、車主、目的地,他們的經(jīng)緯度通常都是在同一個城市的。單個數(shù)據(jù)中心并不需要和其他數(shù)據(jù)中心進(jìn)行數(shù)據(jù)交互,只有在統(tǒng)計(jì)出報(bào)表的時候才需要,但報(bào)表是不太注重實(shí)時性的。那么,在這種情況下,全國的業(yè)務(wù)其實(shí)可以被很好的sharding的。

但是對于電商這種復(fù)雜的場景和業(yè)務(wù),按照前文說的方式進(jìn)行sharding已經(jīng)無法滿足需求了。因?yàn)闃I(yè)務(wù)線非常復(fù)雜,數(shù)據(jù)依賴也非常復(fù)雜,每個數(shù)據(jù)中心相互進(jìn)行數(shù)據(jù)同步的情況無可避免。淘寶的解決方式和我們切分微服務(wù)的方式有點(diǎn)類似:

高可用解決方案:同城雙活?異地雙活?異地多活?

注意看圖中的數(shù)據(jù)同步箭頭。以交易單元為例,屬于交易單元的業(yè)務(wù)數(shù)據(jù),將與中心單元進(jìn)行雙向同步;不屬于交易單元的業(yè)務(wù)數(shù)據(jù),單向從中心單元同步。中心單元承擔(dān)了最復(fù)雜的業(yè)務(wù)場景,業(yè)務(wù)單元承擔(dān)了相對單一的場景。對于業(yè)務(wù)單元,可以進(jìn)行彈性伸縮和容災(zāi);對于中心單元,擴(kuò)展能力較差,穩(wěn)定性要求更高??梢杂鲆?,大部分的故障都會出現(xiàn)在中心單元。

按照業(yè)務(wù)進(jìn)行單元切分,已經(jīng)需要對代碼和架構(gòu)進(jìn)行徹底的改造了(可能這也是為什么阿里要先從雙活再切到多活,歷時3年)。比如,業(yè)務(wù)拆分,依賴拆分,網(wǎng)狀改星狀,分布式事務(wù),緩存失效等。除了對于編碼的要求很高以外,對測試和運(yùn)維也有非常大的挑戰(zhàn)。如此復(fù)雜的情況,如何進(jìn)行自動化覆蓋,如何進(jìn)行演練,如何改造流水線。這種級別的災(zāi)備,不是一般公司敢做的,投入產(chǎn)出也不成正比。不過還是可以把這種場景當(dāng)作我們的“假想敵”,去思考我們自己的業(yè)務(wù),未來會怎么發(fā)展,需要做到什么級別的災(zāi)備。相對而言,餓了么的多活方案可能更適合大多數(shù)的企業(yè)。

本文只是通過畫圖的方式進(jìn)行了簡單的描述,其實(shí)異地多活是需要很多很強(qiáng)大的基礎(chǔ)能力的。比如,數(shù)據(jù)傳輸,數(shù)據(jù)校驗(yàn),數(shù)據(jù)操作層(簡化客戶端控制寫和同步的過程)等。

思考

文末,留幾個問題大家可以思考一下:

  • 假設(shè)你在做餓了么的開發(fā),服務(wù)按照異地多活方式部署,sharding key根據(jù)省市區(qū)進(jìn)行分片。假設(shè)買家在多個城市交匯的地方,比如,十字路口的四個位置分別是4個城市,那么如何處理才能讓他拉到比較正常的數(shù)據(jù)?
  • 你們現(xiàn)在的業(yè)務(wù)模塊中,哪些業(yè)務(wù)是可以做多活的,哪些無法做多活?
  • 所有的業(yè)務(wù)都要做多活嗎?還是只需要核心業(yè)務(wù)做多活?
    ·END·

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

高可用解決方案:同城雙活?異地雙活?異地多活?

高可用解決方案:同城雙活?異地雙活?異地多活?

高可用解決方案:同城雙活?異地雙活?異地多活?

長按訂閱更多精彩▼

高可用解決方案:同城雙活?異地雙活?異地多活?

如有收獲,點(diǎn)個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉