分布式系統(微服務架構)的一致性和冪等性問題相關概念解析

2021-02-19 dotNET跨平臺
前言

什麼是分布式系統?關於這點其實並沒有明確且統一的定義。在我看來,只要一個系統滿足以下幾點就可以稱之為分布式系統

系統由物理上不同分布的多個機器節點組成

系統的多個節點通過網絡進行通信,協調彼此之間的工作。

系統作為整體統一對外提供服務,其分布式細節對客戶端透明。

要想更好的理解分布式系統,並正確使用甚至構建分布式系統,需要理解其中的兩個關鍵概念——分布式系統的數據一致性和分布式系統的冪等性。

1. 分布式系統的數據一致性

對於分布式系統,數據可能存在於不同的物理節點上,節點之間只能通過網絡進行通信來協調彼此之間的狀態,而網絡通信需要時間並且其本身並不十分可靠,因而如何保持數據一致性成為了分布式系統的難題。對於不同的分布式系統,其一致性語義以及面對的一致性難題可能略有差別

1.1 分布式存儲系統中的一致性問題

在分布式存儲系統中,為了保持系統的高可用,同時增加讀操作的並發性,同一份數據會有多份副本,不同的副本存儲於不同的節點上,如下圖所示

在並發環境下,因為存在多個客戶端同時讀取同一數據在不同節點上的副本,因而如何維護數據的一致性視圖就非常重要,即對於使用該分布式系統的客戶端而言,對於多副本數據的讀寫其表現應該和單份數據一樣,通常系統是通過數據複製的方式來達到這一點的,

客戶端將節點1中的副本A修改為10,系統將通過網絡通信的方式將節點2和節點3中的副本A也更新為10。然而網絡通信是需要時間的,假設在系統還未將節點1中的A值同步到節點2和節點3,此時另一個客戶端訪問了節點2和節點3,這個時候系統怎麼辦?

甚至,考慮更極端的場景,節點之間的網絡被斷開,不同節點無法感知到彼此的存在,當然也就無法保持多副本數據的同一視圖,那麼這個時候系統又該怎麼辦?

1.2 微服務應用的分布式一致性問題

微服務架構下,原有的單體應用按功能被拆分成一個個微服務應用,每個微服務應用被部署在不同的機器節點上,只完成原有單體應用的某一部分功能,操作屬於該業務功能的資料庫或表。彼此之前通過網絡通信的方式協調彼此之間的工作,作為整體共同對外提供服務,因而一個業務功能的實現,可能會涉及到多個微服務的調用,操作物理上不同的多個資料庫或表。比如對於下單並支付這個業務功能而言,需要調用下單微服務和支付微服務來共同完成。

對於下單並支付這一業務功能,應用先調用訂單微服務,在訂單資料庫中添加一條訂單記錄,成功後再調用支付微服務添加相應的支付記錄,只有這兩個微服務都調用成功,該業務功能才算執行成功。這個過程可能存在以下的問題:

訂單微服務調用成功,訂單記錄已落地,但是支付微服務由於各種原因遲遲得不到響應,此時用戶通過訂單號查詢只能查到訂單記錄而查不到支付記錄,這對於已經成功付款的用戶而言肯定是無法接受的,這種情況該怎麼辦?

訂單微服務調用成功,訂單記錄已落地,但是支付微服務調用失敗,此時訂單記錄和支付記錄所對應的業務狀態不一致,這時候系統該怎麼辦?

1.3 對於一致性的正確理解

分布式存儲系統的一致性問題,主要在於如何維持多副本的一致性視圖上,即如何使多份數據對外表現的和一份數據一樣。而微服務架構下的分布式應用系統,其一致性問題主要在於如何使不同微服務的數據對同一業務狀態的描述保持一致,比如對於下單並支付這一業務操作而言,下單和支付要麼同時成功,要麼應該同時失敗,而不應該一個成功一個失敗,並且在這個過程中,某部分已經成功或失敗的數據是否應該對客戶端可見。在聯繫一下本地事務ACID中的一致性,我們可能會產生一定的混亂:它們講的一致性是一個東西嗎?先說下我的個人理解:不管是ACID的一致性還是不同分布式系統中的一致性,它們本質上講的是一件事:數據的一致性,在於正確的反應現實世界,對發生於現實世界的事情的正確描述。這就要求,一致性的數據至少要滿足以下兩個條件:

1.符合系統本身具有的約束條件,比如資料庫中的數據要遵循主碼,外碼,check約束。

2.與特定業務有關的所有數據,它們對業務執行狀態的描述應該保持一致。比如從A帳戶轉帳100元到B帳戶這一業務操作,不管A帳戶和B帳戶是否在一個資料庫,也不管這一業務操作是否執行成功,兩個帳戶的總金額應該保持不變;如果有關帳戶金額的數據存儲在分布式系統的多個不同的副本,則這些副本的數據應該一樣。

從這個意義上,不管是單機資料庫還是分布式存儲系統還是微服務架構下的分布式應用,對一致性的追求本質上是一樣的:在滿足系統本身約束的前提下,對於發生的業務操作及其執行狀態的一致性描述。只不過由於分布式系統數據的分布式存儲以及網絡通信狀況的複雜,使得分布式系統要保持數據一致性相比單機應用要考慮更多複雜的因素,實現也要困難的多。很多文章把它們做了嚴格的區分,個人覺得很沒有必要,也不利於對於一致性的正確理解,從哲學的角度看,是割裂了事物共性和個性之間的聯繫。

2.分布式一致性模型

就好像單機資料庫中為事務的隔離性設置了不同的級別,分布式系統中對數據的一致性級別也有分類。總的來說可以分為強一致性和弱一致性兩大類,弱一致性中又可以繼續細分為最終一致性,因果一致性,會話一致性,單調讀一致性和單調寫一致性等多種,不過弱一致性中只有最終一致性比較重要,其他的可以暫時忽略。

強一致性
以帶多副本的分布式存儲系統為例,所有連接到分布式系統的客戶端看到的某一數據的值都是一樣的。當某個客戶端修改了這個值,後續的所有客戶端都能讀取到這個更新的值,並且所有的更新操作都在這個新的值的基礎上進行,直到這個值被再次修改,如下圖所示,在A修改X前所有客戶端都能讀取到X的值為1,在A將X修改為2之後,所有客戶端都能讀取到這個更新後的值。

最終一致性
所有不能滿足強一致性要求的都稱為弱一致性,而最終一致性是其中比較強的一種。在最終一致性模型下,當數據項X被修改後,客戶端並不一定能馬上看到這個更新後的值(有些可能讀取到了新值,有些讀取到的可能還是舊值),但是在一段時間後,所有客戶端都能讀取到這個更新後的值並進行相關操作。最終一致性模型下,分布式數據最終能達到一致,但是需要經過一段時間,這段時間稱為不一致窗口。
如下圖所示,在A將X修改為2後,在不一致窗口內只有B能讀取到X=2,其他客戶端讀取到的依舊是X=1。但是在不一致窗口後,所有客戶端都能讀取到X=2。

3. 追求強一致性的約束——CAP定理

嚴格意義上來講,真正的一致性模型只有一種——強一致性,這也是一種理想化的模型。它為分布式數據維護了完全一致的視圖,使得一旦修改了數據後,所有客戶端能夠馬上看到這個更新後的值並基於這個新值進行後續的操作,使得我們操作分布式數據和操作本地數據一樣。在分布式系統中要實現一致性需要考慮其他因素,比如可用性和分區容忍性,而這些因素相互有制約,這種制約關係在CAP定理中被很好的進行了描述。

CAP是"Consistency","Availabilty","Partition Tolerance"的簡稱,分別代表了:強一致性,可用性和分區容忍性,它們的含義分別如下:

強一致性:在分布式系統同一份數據有多副本的情況下,對於數據的操作效果和只有單份數據一樣。

可用性:客戶端在任何時刻對數據的讀/寫操作都應該保證在時限內完成。

分區容忍性:當分布式系統出現網絡分區,不同分區間的機器無法進行網絡通信時,系統仍然能夠繼續工作。

CAP定理的內容:對於一個分布式系統,無法同時實現強一致性,可用性和分區容忍性,即CAP三要素不可兼得。

3.1 如何理解CAP三要素不可兼得

由於網絡的不可靠性,網絡分區的情況不可避免的會發生,當出現網絡分區時,不同分區的機器無法進行通信。分布式系統必須能夠在出現網絡分區的情況下繼續工作,因而對於分布式系統而言,P即分區容忍性是必須要具備的要素,那麼問題就轉化為了,在系統滿足分區容忍性的前提下,為什麼強一致性和可用性不可兼得。
假設數據項A的三個副本分別存儲在不同的物理節點,在某一時刻,系統狀態如下圖所示

當客戶端將節點1上的A修改為2後,系統出現了網絡分區,其中節點1和節點2在一個網絡分區中,而節點3在另一個分區中

當有客戶端嘗試讀取節點3上的A值時,系統將面臨兩難困境

系統等待節點3從節點1同步A的值,待數據一致後再返回客戶端響應,但是因為節點3和節點1不在一個分區中,雙方無法進行通信,導致系統無法在限定時間內給客戶端返回讀取結果,這明顯不符合可用性的要求。

系統立即返回一個A=1的舊值給客戶端,由於A的值在不同節點上不一樣,導致一致性的條件被破壞。

因而,對於滿足分區容錯性的系統而言,強一致性和可用性的要求難以同時被滿足。其實這是很容易理解的,即使沒有網絡分區,因為不同節點上的數據需要經過網絡通信來保持一致性,這個過程本身就比較花時間,當需要在給定很短的時限內基於客戶端響應時,對於一致性的保證自然就比較弱。

3.2 如何正確理解CAP定理

對於分布式系統而言CAP三要素不可兼得,但並不意味著在任何時刻都必須從中做出取捨,或者在構建分布式系統之初就選擇其中兩個而放棄另一個,這種看法具有片面性。

由於網絡分區出現的可能性非常小,系統在正常運行的情況下還是應該兼顧AC兩者,在進入網絡分區模式後才需要對P進行保證,從A和C中選擇犧牲一個。

A和C並不是一個硬幣的兩面,只能選擇其中一個;A和C應該看成天平,系統可以選擇向哪邊傾斜,但另一邊也應該一定程度的保留。

對於A和C之間的選擇,不應該粗粒度的整個系統級別進行選取,而應該針對系統中的不同子系統,針對性的採取不同的取捨策略。

4. 一致性的妥協——最終一致性和Base原則

由CAP定理可知,在分布式系統中過於追求數據的強一致性將導致可用性一定程度被犧牲,這意味著系統將不能很好的響應用戶的請求,這會一定程度影響用戶體驗。因而對於大部分布式系統而言,應當在保證系統高可用的前提下去追求數據的一致性,BASE原則正是對這一思想的描述。

BA(Basically Available)
基本可用:系統在絕大部分時間應處於可用狀態,允許出現故障損失部分可用性,但保證核心可用。

S(Soft State)
軟狀態:數據狀態不要求在任何時刻都保持一致,允許存在中間狀態,而該狀態不影響系統可用性。對於多副本的存儲系統而言,就是允許副本之間的同步存在延時,並且在這個過程中系統依舊可以響應客戶端請求。

E(Eventual Consistency)
最終一致性:儘管軟狀態不要求分布式數據在任何時刻都保持一致,但經過一定時間後,這些數據最終能達到一致性狀態。

BASE理論的核心思想是:把分布式系統的可用性放在首位,放棄CAP中對數據強一致性的追求,只要系統能保證數據最終一致。

4.1 CAP,BASE以及ACID的關係

CAP描述了對於一個分布式系統而言重要的三要素:數據一致性,可用性,分區容錯性之間的制約關係,當你選擇了其中的兩個時,就不得不對剩下的一個做一定程度的犧牲。BASE和ACID都可以看做是對CAP三要素進行取捨後的某種特殊情況

BASE強調可用性和分區容錯性,放棄強一致性,這是大部分分布式系統的選擇,比如NoSQL系統,微服務架構下的分布式系統

ACID是單機數據的事務特性,因為不是分布式系統無需考慮分區容錯,故而是選擇了可用性和強一致性後的結果。
它們之間的關係如下所示

5. 分布式系統的冪等性

冪等的概念來自於抽象代數,比如對於一元函數來說,滿足以下條件

即可稱為滿足冪等性。在計算機科學中,一個操作如果多次執行產生的影響與一次執行的影響相同,這樣的操作即符合冪等性。在分布式系統中,服務消費方調用服務提供方的接口,多次調用的結果應該與一次調用的結果一樣,這正是分布式環境下冪等性的語義。為什麼冪等性對分布式系統而言如此重要?因為在分布式環境下,服務的調用一般採用http協議或者rpc的方式,即雙方需要通過網絡進行通信,而因為網絡故障或者消息超時的存在,可能服務消費方已經成功調用了服務提供方的服務接口,但是消費方並沒有收到來自對方的成功響應,導致消費方以為服務調用失敗從而再次進行調用,也就是說網絡的不可靠性導致了服務接口被多次調用的可能。分布式系統必須保證在這種情況下,即使接口被多次調用,它對系統產生的影響應該與該接口只被調用一次的結果一樣。

6.微服務架構的分布式一致性和冪等性問題6.1 微服務架構下的分布式一致性問題

微服務架構下,處理一個業務請求可能需要調用多個微服務進行處理,以前面的下單並支付場景為例,完成該業務請求需要先後調用訂單微服務的下單接口和支付微服務的支付接口,只有這兩個接口都調用成功,該業務操作才算執行成功。那麼微服務架構中是如何保證同屬於一個業務單元的多個操作的原子性以及保證分布式數據一致性的?——答案是分布式事務。

分布式事務是指事務的參與者、支持事務的伺服器、資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點之上

並且根據遵循的一致性原則不同,可以分為剛性分布式事務和柔性分布式事務兩大類。

遵循ACID原則的剛性事務
剛性事務追求數據的強一致性,比如基於兩階段提交和三階段提交的分布式事務就屬於剛性事務,通過分布式事務,客戶端可以看到描述業務執行狀態的多個數據的一致性視圖,比如下單並支付這個業務操作,客戶端要麼能夠同時查詢到下單和支付成功的信息,要麼能夠同時查詢到下單和支付失敗的信息,其他不一致的情況對於客戶端而言都是不可見的。比如下單成功,支付還在處理;下單成功,支付失敗,下單記錄正在回滾。也就是說,當訂單數據和支付數據不一致時,對於客戶端的訪問請求應該予以拒絕。

這當然導致了系統可用性的降低,加上剛性事務實現時會導致同步阻塞的問題,鎖定資源等問題,會極大的影響系統的吞吐量和設計彈性,所以實際上微服務架構不太會採用剛性事務。

在這個不一致窗口內,系統允許客戶端對不一致的數據進行訪問,因而系統的可用性相比而言會更好,加上其擴展性良好以及吞吐量的優勢,一般微服務架構下都會採用柔性事務。柔性事務有多種不同的實現方式,比如基於可靠事件的模式,基於補償的模式,基於Sagas長事務的模式等,具體的實現原理以及優缺點對比就放到下一篇在詳解解釋。

6.2 微服務架構下的冪等性問題6.2.1 冪等性場景

在微服務架構下,不同微服務間會有大量的基於http,rpc或者mq消息的網絡通信,接口的重複調用以及消息的重複消費可能會經常發生,比如以下這些情況

調用訂單創建接口,第一次調用超時,調用方又嘗試了一次,但其實第一次調用已經成功,只是調用方沒有及時收到響應。

訂單支付完成後,需要向MQ發送一條消息,但該消息重複發送了兩條。

網絡波動導致服務提供方的接口被調用了兩次。

用戶在使用產品時,無意地觸發多筆交易。

某些未關閉的重試機制。

微服務架構應該具有冪等性,當接口被重複調用時,消息被重複消費時,對系統的產生的影響應該和接口被調用一次,消息被消費一次時一樣。

6.2.2 CRUD操作的冪等性分析

新增請求:不具備冪等性

查詢請求:重複查詢不會影響系統狀態,查詢天然具備冪等性

基於主鍵的更新請求
要更新的值依賴於前值,不具備冪等性。比如update goods set number=number-1 where id=1
要更新的值不依賴於前值,具備冪等新。比如update goods set number=newNumber where id=1

刪除請求
基於主鍵的物理刪除(delete)刪除具備冪等性
基於主鍵的邏輯刪除(update)也具有冪等性

總結:通常只需要對新增請求和更新請求作冪等性保證。

6.2.3 如何解決冪等性問題

全局唯一ID
根據業務生成一個全局唯一ID,在調用接口時會傳入該ID,接口提供方會從相應的存儲系統比如Redis中去檢索這個全局ID是否存在,如果存在則說明該操作已經執行過了,將拒絕本次服務請求;否則將相應該服務請求並將全局ID存入存儲系統中,之後包含相同業務ID參數的請求將被拒絕。

去重表
這種方法適用於在業務中有唯一標識的插入場景。比如在支付場景中,一個訂單只會支付一次,可以建立一張去重表,將訂單ID作為唯一索引。把支付並且寫入支付單據到去重表放入一個事務中,這樣當出現重複支付時,資料庫就會拋出唯一約束異常,操作就會回滾。這樣保證了訂單只會被支付一次。

多版本並發控制
適合對更新請求作冪等性控制,比如要更新商品的名字,這是就可以在更新的接口中增加一個版本號來做冪等性控制

boolean updateGoodsName(int id,String newName,int version);

資料庫更新的SQL語句如下

update goods set name=#{newName},version=#{version} where id=#{id} and version<${version}

狀態機控制
適合在有狀態機流轉的情況下,比如訂單的創建和付款,訂單的創建肯定是在付款之前。這是可以添加一個int類型的欄位來表示訂單狀態,創建為0,付款成功為100,付款失敗為99,則對訂單狀態的更新就可以這樣表示

update order set status=#{status} where id=#{id} and status<#{status}

插入或更新
在MySQL資料庫中,如果在insert語句後面帶上ON DUPLICATE KEY UPDATE 子句,而要插入的行與表中現有記錄的惟一索引或主鍵中產生重複值,則對舊行進行更新;否則執行新紀錄的插入。
我們可以利用該特性防止記錄的重複插入,比如good_id和category_id構成唯一索引,則重複執行多次該SQL,資料庫中也只會有一條記錄。

insert into goods_category (goods_id,category_id,create_time,update_time)       values(#{goodsId},#{categoryId},now(),now())       on DUPLICATE KEY UPDATE       update_time=now()

7. 參考資料

《大數據日知錄》
《微服務設計原理與架構》
如何保證微服務接口的冪等性

原文地址:https://www.cnblogs.com/takumicx/p/10021538.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

相關焦點

  • 「分布式架構」最終一致性:暗示的切換隊列
    這是許多分布式系統使用的一致性模型,包括XDB Enterprise Edition。為了理解最終的一致性,我們需要知道兩個概念:暗示切換隊列和反熵,這兩個概念都需要特別注意。第一部分什麼是暗示的切換隊列?儘管有一個很酷的名字,暗示切換(HH)隊列並沒有得到很多關注。HH隊列有一項非常重要的工作,但是除非您是系統管理員,否則很少直接與它交互。
  • 深入解析ZNBase分布式SQL引擎架構的五大服務組件
    Spanner 是 shared nothing 的架構,內部維護了自動分片、分布式事務、彈性擴展能力,數據存儲還是需要 sharding,plan 計算也需要涉及多臺機器,也就涉及了分布式計算和分布式事務。 Auraro 主要思想是計算和存儲分離架構,使用共享存儲技術,這樣就提高了容災和總容量的擴展。
  • Spring Boot + Redis 實現接口冪等性 | 分布式開發必知!
    一、概念冪等性, 通俗的說就是一個接口, 多次發起同一個請求, 必須保證操作只能執行一次比如:訂單接口, 不能多次創建訂單支付接口, 重複支付同一筆訂單只能扣一次錢-- redis(jedis、redisson)或zookeeper實現狀態機 -- 狀態變更, 更新數據時判斷狀態三、本文實現本文採用第2種方式實現, 即通過redis + token機制實現接口冪等性校驗四、實現思路為需要保證冪等性的每一次請求創建一個唯一標識 token, 先獲取 token, 並將此 token存入redis, 請求接口時, 將此
  • 通用型系統架構設計(多圖)
    系統架構圖:系統採用四層架構設計一、展現層Web前端基於HTML/HTML5
  • 面試官:你給我畫一下秒殺系統的架構圖!
    image.png 你的秒殺系統,架構是怎麼樣的?演進原則:這個比較好理解,沒有什麼系統架構是一出生就定下來的,是隨著時間,業務需求,不斷演變出來的。總結:我們架構的優勢: 成本低,系統複雜度低,維護成本低,快速定位問題劣勢:穩定性差,並發量低,擴展性弱等在梳理架構時,每個方案都有他的優勢和缺點,所以需要了解你目前方案的優缺點。
  • 條分縷析分布式:因果一致性和相對論時空
    回到現實,《Designing Data-Intensive Applications》[1]一書的作者在他的書中提到,基於因果一致性構建分布式資料庫系統,是未來一個非常有前景的研究方向。而且,估計很少有人注意到,我們經常使用的ZooKeeper,其實就在session維度上提供了因果一致性的保證[2]。理解「因果一致性」的概念,有助於我們對於分布式系統的認識更進一層。
  • 【SDCC 2016成都站實錄】網際網路應用架構&運維技術與實戰峰會(附PPT下載)
    》的主題演講,主要從百度為什麼用HHVM、HHVM in baidu、HHVM vs PHP7這三個方面進行分享,分別闡述前期百度的調研選型、HHVM相關問題分析、PHP7的優化、HHVM和PHP7的差異點和優缺點,和HHVM原理和對於目前HHVM和PHP7選型困惑建議。
  • 分布式系統的概念都搞懂了嗎?(上)
    和並發的區別:並發和並行是即相似又有區別的兩個概念,並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔內發生。 -     集群     -集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。
  • 應用系統軟體架構設計
    一、背景軟體系統架構是關於軟體系統的結構、行為、屬性、組成要素及其之間交互關係的高級抽象。任何軟體開發項目,都會經歷需求獲取、系統分析、系統設計、編碼研發、系統運維等常規階段,軟體系統架構設計就位於系統分析和系統設計之間。做好軟體系統架構,可以為軟體系統提供穩定可靠的體系結構支持平臺,還可以支持最大粒度的軟體復用,降低開發運維成本。
  • 17次直播回看,50節架構師訓練營幹貨重放 | 架構師之路
    第一件,把多年業務架構經驗,以在線直播的形式,和大家進行分享,不知不覺,全年竟然播了17期;第二件,把多年系統架構經驗,以在線訓練營的形式,和大家進行分享,大概50講。很多朋友問,直播和訓練營,能不能回看。
  • GoldenGate 微服務架構 VS 傳統架構
    Oracle GoldenGate從12c(12.3)版本開始,提供了新的基於微服務體系的軟體系統架構。新的微服務架構提供了很多新的特點和優勢。我們開始討論GoldenGate新的微服務架構前,我們先來看看GoldenGate傳統的軟體架構是什麼樣的,下圖是GoldenGate傳統的軟體系統架構圖。
  • 一文總結:分布式一致性技術是如何演進的?
    近年來隨著分布式系統的規模越來越大,對可用性和一致性的要求越來越高,分布式一致性的應用也越來越廣泛。縱觀分布式一致性在工業界的應用,從最開始的鼻祖Paxos的一統天下,到橫空出世的Raft的流行,再到如今Leaderless的EPaxos開始備受關注,背後的技術是如何演進的?本文將從技術角度探討分布式一致性在工業界的應用,並從可理解性、可用性、效率和適用場景等幾個角度進行對比分析。
  • 深度解密系統架構背後的技術,雲+社區沙龍online「架構演進」乾貨整理
    既要應對龐大的用戶量、日均數十億 PV 的高並發、PB 級別的數據存儲等問題的挑戰,同時又要求保證系統的高可用和彈性伸縮,並且能夠根據需要進行快速迭代擴展,令人頭疼的系統架構到底應該怎麼做? 多年發展下,網際網路架構經歷了從簡到繁的演進過程,從單體架構到集群架構、分布式架構再到微服務架構,每一種架構都是為了解決問題而生。
  • 四種JavaEE架構簡介
    2、集群架構(屬於水平拓展)由於傳統的三層架構中存在許多問題,比如業務層中的不同模塊佔用系統資源相差太大,導致佔用系統資源,可以使用集群解決問題。搜索公眾號頂級架構師回復關鍵字「offer」,獲取一份算法面試題和答案驚喜禮包。弊端:如果該項目很大,且並發量高,包含多個可拆分的模塊(子系統)那就不適用集群架構了。3、分布式架構(垂直拆分)分布式架構特點:多個模塊完成一個功能,每個模塊又可以搭建集群,從而實現高可用。
  • Spring Cloud Stream:全新事件驅動型微服務框架
    該版本包括幫助開發人員和運營人員開發並實施數據微服務的各種新功能和新改版。在開始討論新功能之前,先讓我們通過回顧企業架構數據的當前狀態及發展方向來展開討論。歷經多年開發的軟體組件需要始終如一的精細檢查。由於數十年的陳舊遺留影響了整體架構,大型企業面臨適應現代開發方法和實踐的挑戰。細微化、遞增和連續變化是數位化改造和不斷創新的關鍵。
  • 領域基本概念字典
    領域事件在DDD中,領域事件便可以用於處理上述問題,此時最終一致性取代了事務一致性,通過領域事件的方式達到各個組件之間的數據一致性。領域事件的命名遵循英語中的「名詞+動詞過去分詞」格式,即表示的是先前發生過的一件事情。比如,購買者提交商品訂單之後發布 OrderCreated 事件,用戶支付 TradePaid 事件。需要注意的是,既然是領域事件,他們便應該從領域模型中發布。
  • Kafka設計解析之Kafka背景及架構介紹
    具有以下特性:快速持久化,可以在O(1)的系統開銷下進行消息持久化;高吞吐,在一臺普通的伺服器上既可以達到10W/s的吞吐速率;完全的分布式系統,Broker、Producer、Consumer都原生自動支持分布式,自動實現負載均衡;支持Hadoop數據並行加載,對於像Hadoop的一樣的日誌數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。
  • 5分鐘學分布式系統理論,從放棄到入門
    設備之間通過VCS組成冷備,但即使有雙機軟體保護,宕機、網絡丟包等問題發生時業務仍會受影響。這樣的系統架構下為保證SLA,有時候需要深入Linux系統內核或硬體層面分析機器重啟的原因。接下來負責維護承載在分布式集群上的業務,相比前面的工作,這個階段主要關注點不是單節點的異常,更多是系統整體的穩定和健壯。
  • 系統架構
    圖2-1 FusionInsight HD系統邏輯架構圖Kafka一個分布式的、分區的、多副本的實時消息發布和訂閱系統。提供可擴展、高吞吐、低延遲、高可靠的消息分發服務。YARN資源管理系統,它是一個通用的資源模塊,可以為各類應用程式進行資源管理和調度。