微服務的發展
微服務倡導將復雜的單體應用拆分為若干個功能簡單、松耦合的服務,這樣可以降低開發難度、增強擴展性、便于敏捷開發。當前被越來越多的開發者推崇,很多互聯網行業巨頭、開源社區等都開始了微服務的討論和實踐。
微服務落地存在的問題
雖然微服務現在如火如荼,但對其實踐其實仍處于探索階段。很多中小型互聯網公司,鑒于經驗、技術實力等問題,微服務落地比較困難。
如著名架構師Chris Richardson所言,目前存在的主要困難有如下幾方面:
- 單體應用拆分為分布式系統后,進程間的通訊機制和故障處理措施變的更加復雜。
- 系統微服務化后,一個看似簡單的功能,內部可能需要調用多個服務并操作多個數據庫實現,服務調用的分布式事務問題變的非常突出。
- 微服務數量眾多,其測試、部署、監控等都變的更加困難。
隨著RPC框架的成熟,第一個問題已經逐漸得到解決。例如springcloud可以非常好的支持restful調用,dubbo可以支持多種通訊協議。關注公眾號碼猿技術專欄獲取更多面試資源。
對于第三個問題,隨著docker、devops技術的發展以及各公有云paas平臺自動化運維工具的推出,微服務的測試、部署與運維會變得越來越容易。
而對于第二個問題,現在還沒有通用方案很好的解決微服務產生的事務問題。分布式事務已經成為微服務落地最大的阻礙,也是最具挑戰性的一個技術難題。
ACID
- 原子性(Atomicity):?一個事務的所有系列操作步驟被看成是一個動作,所有的步驟要么全部完成要么一個也不會完成,如果事務過程中任何一點失敗,將要被改變的數據庫記錄就不會被真正被改變。
- 一致性(Consistency):?數據庫的約束 級聯和觸發機制Trigger都必須滿足事務的一致性。也就是說,通過各種途徑包括外鍵約束等任何寫入數據庫的數據都是有效的,不能發生表與表之間存在外鍵約束,但是有數據卻違背這種約束性。所有改變數據庫數據的動作事務必須完成,沒有事務會創建一個無效數據狀態,這是不同于CAP理論的一致性"consistency".
- 隔離性(Isolation):?主要用于實現并發控制, 隔離能夠確保并發執行的事務能夠順序一個接一個執行,通過隔離,一個未完成事務不會影響另外一個未完成事務。
- 持久性(Durability):?一旦一個事務被提交,它應該持久保存,不會因為和其他操作沖突而取消這個事務。很多人認為這意味著事務是持久在磁盤上,但是規范沒有特別定義這點。
一致性理論
分布式事務的目的是保障分庫數據一致性,而跨庫事務會遇到各種不可控制的問題,如個別節點永久性宕機,像單機事務一樣的 ACID 是無法奢望的。
另外,業界著名的 CAP 理論也告訴我們,對分布式系統,需要將數據一致性和系統可用性、分區容忍性放在天平上一起考慮。
兩階段提交協議(簡稱2PC)是實現分布式事務較為經典的方案,但 2PC 的可擴展性很差,在分布式架構下應用代價較大,eBay 架構師 Dan Pritchett 提出了 BASE 理論,用于解決大規模分布式系統下的數據一致性問題。關注公眾號碼猿技術專欄獲取更多面試資源。
BASE 理論告訴我們:可以通過放棄系統在每個時刻的強一致性來換取系統的可擴展性。
CAP 理論
在分布式系統中,一致性(Consistency)、可用性(Availability)和分區容忍性(Partition Tolerance)3 個要素最多只能同時滿足兩個,不可兼得。其中,分區容忍性又是不可或缺的。
- 一致性:分布式環境下,多個節點的數據是否強一致。
- 可用性:分布式服務能一直保證可用狀態。當用戶發出一個請求后,服務能在有限時間內返回結果。
- 分區容忍性:特指對網絡分區的容忍性。
舉例:Cassandra、Dynamo 等,默認優先選擇 AP,弱化 C;HBase、MongoDB 等,默認優先選擇 CP,弱化 A。
BASE 理論
核心思想:
- 基本可用(?Basically?Available):指分布式系統在出現故障時,允許損失部分的可用性來保證核心可用;
- 軟狀態(?Soft state):指允許分布式系統存在中間狀態,該中間狀態不會影響到系統的整體可用性;
- 最終一致性(?Eventual consistency):指分布式系統中的所有副本數據經過一定時間后,最終能夠達到一致的狀態;
- 原子性(A)與持久性(D)必須根本保障;
- 為了可用性、性能與降級服務的需要,只有降低一致性( C ) 與 隔離性( I ) 的要求;
- 酸堿平衡(ACID-BASE Balance);
BASE 是對 CAP 中 AP 的一個擴展
一致性模型
數據的一致性模型可以分成以下三類:
- 強一致性:數據更新成功后,任意時刻所有副本中的數據都是一致的,一般采用同步的方式實現。
- 弱一致性:數據更新成功后,系統不承諾立即可以讀到最新寫入的值,也不承諾具體多久之后可以讀到。
- 最終一致性:弱一致性的一種形式,數據更新成功后,系統不承諾立即可以返回最新寫入的值,但是保證最終會返回上一次更新操作的值。
分布式系統數據的強一致性、弱一致性和最終一致性可以通過 Quorum NRW 算法分析。
本地事務
- 在單個數據庫的本地并且限制在單個進程內的事務
- 本地事務不涉及多個數據來源
分布式事務典型方案
- 兩階段提交(2PC, Two Phase Commit)方案;
- 本地消息表 (eBay 事件隊列方案);
- TCC 補償模式;
分類:
- 兩階段型
- 補償型
- 異步確保型
- 最大努力通知型
服務模式:
- 可查詢操作
- 冪等操作
- TCC操作
- 可補償操作
線程、數據庫、算法、JVM、分布式、微服務、框架、Spring相關知識
一線互聯網P7面試集錦+各種大廠面試集錦
資料領取方式:戳這里
學習筆記以及面試真題解析
mg-ogOPi3yV-1624514804777)]
資料領取方式:戳這里