架构杂谈《三》
一致性問(wèn)題
前面的《架構(gòu)雜談一》和《架構(gòu)雜談二》 雜談了從服務(wù)化到微服務(wù)架構(gòu)的演進(jìn),并肯定了服務(wù)化和微服務(wù)架構(gòu)是一脈相承的。微服務(wù)在服務(wù)化架構(gòu)的基礎(chǔ)上,對(duì)服務(wù)化的細(xì)節(jié)和方案進(jìn)行了優(yōu)化和細(xì)化,重點(diǎn)突出了無(wú)中心化管理的微服務(wù)架構(gòu),通過(guò)對(duì)服務(wù)進(jìn)行有效的拆分來(lái)實(shí)現(xiàn)敏捷開發(fā)和自動(dòng)化部署,并在海量用戶的請(qǐng)求下,提高了微服務(wù)架構(gòu)下較細(xì)粒度的水平伸縮能力。
然而,微服務(wù)架構(gòu)并不是萬(wàn)能的它可以說(shuō)就是一把雙刃劍,我們?cè)谙硎芩鼛?lái)的便利的同時(shí),也會(huì)遇到數(shù)據(jù)和服務(wù)之間不一致性的問(wèn)題,在為服務(wù)架構(gòu)下多個(gè)服務(wù)通過(guò)非可靠的網(wǎng)絡(luò)通信,如何讓服務(wù)之間高效的通信和協(xié)作,如何解決系統(tǒng)之間狀態(tài)不一致等問(wèn)題,這可以說(shuō)是我們?cè)谑褂梦⒎?wù)架構(gòu)后不得不面對(duì)的問(wèn)題。
1、什么是一致性
一致性是一個(gè)抽象的概念,在不同的場(chǎng)景下有不同的含義,在傳統(tǒng)IT時(shí)代,一致性通常指強(qiáng)一致性,在雜談互聯(lián)網(wǎng)時(shí)代的一致性之前,我們先了解一下互聯(lián)網(wǎng)時(shí)代的特點(diǎn):
互聯(lián)網(wǎng)時(shí)代信息量大,需要非常強(qiáng)大的計(jì)算能力
互聯(lián)網(wǎng)時(shí)代要求對(duì)用戶的響應(yīng)速度快,還要求吞吐量指標(biāo)向外擴(kuò)展(水平伸縮)
通過(guò)這些個(gè)互聯(lián)網(wǎng)時(shí)代的特點(diǎn)分析后,我們發(fā)現(xiàn)單節(jié)點(diǎn)的服務(wù)器無(wú)法滿足人們的需求,服務(wù)節(jié)點(diǎn)開始池化。但是池化不是越多越好的(常言說(shuō),人多不一定能解決所有問(wèn)題),還得有序、合理的分配任務(wù),并有效的進(jìn)行管理,于是在互聯(lián)網(wǎng)時(shí)代討論最多的話題就是拆分。拆分又一般分為水平和垂直,這不單指對(duì)數(shù)據(jù)庫(kù)或者緩存的拆分,主要是表達(dá)一種分而治之的思想和邏輯
水平拆分:由于單一節(jié)點(diǎn)無(wú)法滿足性能的需求,需要擴(kuò)展成多個(gè)節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)之間具有一致的功能,組成一個(gè)服務(wù)池,一個(gè)節(jié)點(diǎn)服務(wù)一部分的請(qǐng)求量,所有節(jié)點(diǎn)共同處理大規(guī)模的高并發(fā)的請(qǐng)求量。
垂直拆分:按照功能進(jìn)行拆分,把一個(gè)復(fù)雜的功能拆分成多個(gè)單一、簡(jiǎn)單的功能,由于每個(gè)功能職責(zé)單一、簡(jiǎn)單,使得維護(hù)和變更變的更容易、簡(jiǎn)單和安全,所以更易于產(chǎn)品迭代,還能夠快速地進(jìn)行敏捷發(fā)布和上線。
在這樣的一個(gè)互聯(lián)網(wǎng)時(shí)代,一致性指分布式服務(wù)化之間的弱一致性,包括應(yīng)用系統(tǒng)的一致性和數(shù)據(jù)的一致性。
無(wú)論是水平還是垂直拆分,都解決了特定場(chǎng)景下的特定問(wèn)題,然而,拆分后的系統(tǒng)或者服務(wù)化的系統(tǒng)的最大問(wèn)題就是一致性問(wèn)題。
2、解決一致性問(wèn)題的思路
1、ACID
如何保證一致性問(wèn)題呢?我們?cè)趯W(xué)習(xí)關(guān)系性數(shù)據(jù)庫(kù)時(shí)都學(xué)習(xí)了ACID原理,這里簡(jiǎn)單的對(duì)ACID做個(gè)介紹。
A:原子性
C:一致性
I:隔離性
D:持久性
具有ACID特性的數(shù)據(jù)庫(kù)支持強(qiáng)一致性,強(qiáng)一致性代表數(shù)據(jù)庫(kù)本身不會(huì)出現(xiàn)不一致,每個(gè)事務(wù)都是原子的(要么成功要么失敗),事務(wù)間是隔離的,互相不受影響。最終狀態(tài)是持久的。因此,數(shù)據(jù)庫(kù)會(huì)從一個(gè)明確的狀態(tài)過(guò)渡到另外一個(gè)明確的狀態(tài),中間的臨時(shí)狀態(tài)是不會(huì)出現(xiàn)的。如果出現(xiàn)也會(huì)及時(shí)地自動(dòng)修復(fù),因此是強(qiáng)一致性的。然而,前面提到,互聯(lián)網(wǎng)項(xiàng)目大多數(shù)具有大規(guī)模、高并發(fā)的特性,必須使用拆分的理念。即使使用關(guān)系型數(shù)據(jù)庫(kù),單機(jī)是難以滿足存儲(chǔ)和吞吐量上的性能需求。由于業(yè)務(wù)規(guī)則的限制,我們無(wú)法將相關(guān)數(shù)據(jù)分到同一個(gè)數(shù)據(jù)庫(kù)分片,這時(shí)就需要實(shí)現(xiàn)最終一致性。
2、CAP
由于對(duì)系統(tǒng)或者數(shù)據(jù)進(jìn)行了拆分,我們的系統(tǒng)不再是單機(jī)系統(tǒng),而是分布式系統(tǒng)。針對(duì)分布式系統(tǒng)的CAP原理有三個(gè)元素。
C:一致性。在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在統(tǒng)一時(shí)刻具有相同的值,所有節(jié)點(diǎn)在同一時(shí)刻讀取的數(shù)據(jù)都是最新的數(shù)據(jù)副本。(Consistency)
A:可用性,好的響應(yīng)性能。完全的可用性指的是在任何故障模型下,服務(wù)都會(huì)在有限的時(shí)間內(nèi)處理完成并進(jìn)行響應(yīng)。(Availability)
P:分區(qū)容忍性。盡管網(wǎng)絡(luò)上有部分消息丟失,但系統(tǒng)仍然可繼續(xù)工作。(Partition tolerance)
CAP原理說(shuō)明,任何分布式系統(tǒng)只可滿足以上兩點(diǎn),無(wú)法三者兼顧。由于關(guān)系型數(shù)據(jù)庫(kù)是單節(jié)點(diǎn)無(wú)復(fù)制的,因此不具有分區(qū)容忍性,但是具有一致性和可用性。而分布式的服務(wù)化系統(tǒng)都需要滿足分區(qū)容忍性,這就需要我們?cè)谝恢滦院涂捎眯詢烧咧羞M(jìn)行權(quán)衡選擇。
3、BASE
eBay的架構(gòu)師Dan Pritchett源于對(duì)大規(guī)模分布式系統(tǒng)的實(shí)踐總結(jié),在ACM上發(fā)表文章提出BASE理論,BASE理論是對(duì)CAP理論的延伸,核心思想是即使無(wú)法做到強(qiáng)一致性(Strong Consistency,CAP的一致性就是強(qiáng)一致性),但應(yīng)用可以采用適合的方式達(dá)到最終一致性(Eventual Consitency)。(BASE 思想解決了CAP提出的分布式系統(tǒng)的一致性和可用性不可兼得的問(wèn)題)
BASE思想與ACID原理截然不同,它滿足CAP原理,通過(guò)犧牲強(qiáng)一致性獲得可用性,一般應(yīng)用于服務(wù)化系統(tǒng)的應(yīng)用層或者大數(shù)據(jù)處理系統(tǒng)中,通過(guò)達(dá)到最終一致性來(lái)盡量滿足業(yè)務(wù)的絕大多數(shù)需求。
BASE思想的三個(gè)元素。
BA:基本可用(Basically Available)。
S:軟狀態(tài),狀態(tài)可以在一段時(shí)間內(nèi)不同步(Soft State)。
E:最終一致性,在一定的時(shí)間內(nèi),最終數(shù)據(jù)達(dá)成一致性即可。(Eventually Consistent)
軟狀態(tài)是實(shí)現(xiàn)BASE思想的方法,基本可用和最終一致性是目標(biāo)。以BASE 思想實(shí)現(xiàn)的系統(tǒng)由于不保證強(qiáng)一致性,所以系統(tǒng)在處理請(qǐng)求的過(guò)程中可以存在短暫的不一致,在短暫的不一致的時(shí)間內(nèi),請(qǐng)求處理處于臨時(shí)狀態(tài)中,系統(tǒng)在進(jìn)行每步操作時(shí),通過(guò)記錄每個(gè)臨時(shí)狀態(tài),在系統(tǒng)出現(xiàn)故障時(shí)可以從這些中間狀態(tài)繼續(xù)處理未完成的請(qǐng)求或者退回到原始狀態(tài),最終達(dá)到一致狀態(tài) 。
有了BASE 思想作為基礎(chǔ),我們對(duì)復(fù)雜的分布式事務(wù)進(jìn)行拆解,對(duì)其中的每個(gè)步驟記錄其狀態(tài),有問(wèn)題可以根據(jù)記錄的狀態(tài)來(lái)繼續(xù)執(zhí)行任務(wù),達(dá)到最終一致性。
說(shuō)明:
1、參考書籍:《分布式服務(wù)架構(gòu):原理、設(shè)計(jì)與實(shí)戰(zhàn)》
2、如有不合適的地方請(qǐng)反饋。綜合后更改。
總結(jié)
- 上一篇: 资深开发者们是如何读书的?---线下读书
- 下一篇: 腾讯发布 Tencent SCF Too