天天看點

java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!

前言

回顧這一年,我的付出終歸是沒有白費的!很快,今天是2021年了,激烈的金三銀四已經沒有多少日子就有上場了!是以今天,我挑選了“美團+位元組+騰訊”等三家的一二三面問題,在此篇文章裡做一個分享,希望看到的朋友可以做一個面試參考,并可自行測挑戰一下你能走到哪一面,期待你的表現~

微服務的發展

微服務倡導将複雜的單體應用拆分為若幹個功能簡單、松耦合的服務,這樣可以降低開發難度、增強擴充性、便于靈活開發。目前被越來越多的開發者推崇,很多網際網路行業巨頭、開源社群等都開始了微服務的讨論和實踐。

微服務落地存在的問題

雖然微服務現在如火如荼,但對其實踐其實仍處于探索階段。很多中小型網際網路公司,鑒于經驗、技術實力等問題,微服務落地比較困難。

如著名架構師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 個要素最多隻能同時滿足兩個,不可兼得。其中,分區容忍性又是不可或缺的。

java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!
  • 一緻性:分布式環境下,多個節點的資料是否強一緻。
  • 可用性:分布式服務能一直保證可用狀态。當使用者發出一個請求後,服務能在有限時間内傳回結果。
  • 分區容忍性:特指對網絡分區的容忍性。

舉例: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 算法分析。

本地事務

java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!
  • 在單個資料庫的本地并且限制在單個程序内的事務
  • 本地事務不涉及多個資料來源

分布式事務典型方案

  • 兩階段送出(2PC, Two Phase Commit)方案;
  • 本地消息表 (eBay 事件隊列方案);
  • TCC 補償模式;

分類:

  • 兩階段型
  • 補償型
  • 異步確定型
  • 最大努力通知型

服務模式:

  • 可查詢操作
  • 幂等操作
  • TCC操作
  • 可補償操作

難道這樣就夠了嗎?不,遠遠不夠!

提前多熟悉阿裡往年的面試題肯定是對面試有很大的幫助的,但是作為技術性職業,手裡有實打實的技術才是你面對面試官最有用的利器,這是從内在散發出來的自信。

備戰阿裡時我花的最多的時間就是在學習技術上,占了我所有學習計劃中的百分之70,這是一些我學習期間覺得還是很不錯的一些學習筆記,以及學習視訊都是可以點選這裡免費領取的!

我為什麼要寫這篇文章呢,其實我覺得學習是不能停下腳步的,在網絡上和大家一起分享,一起讨論,不單單可以遇到更多一樣的人,還可以擴大自己的眼界,學習到更多的技術,我還會在csdn、部落格、掘金等網站上分享技術,這也是一種學習的方法。

今天就分享到這裡了,謝謝大家的關注,以後會分享更多的幹貨給大家!

java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!
java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!
java注釋符,跳槽大廠必看!微服務的發展微服務落地存在的問題ACID一緻性理論CAP 理論BASE 理論一緻性模型本地事務分布式事務典型方案難道這樣就夠了嗎?不,遠遠不夠!

img-cwzXaowU-1622036396229)]

[外鍊圖檔轉存中…(img-EHl2a3qC-1622036396231)]

[外鍊圖檔轉存中…(img-M7g4oDEJ-1622036396232)]