分布式系統與一致性問題

2021-09-13 03:42:58 字數 2000 閱讀 5206

分布式這個概念這幾年越來越火熱,今天也來談談專案改造過程中對於分布式系統的理解,傳統的應用是將所有的模組放在單體tomcat上執行,所以方法間的呼叫範圍都是在同乙個jvm內。這在業務初期時很有效的,畢竟業務初期開發資源、業務量都比較稀少,才用單體應用開發簡單、部署快速,出現問題可以快速定位,而且因為執行在乙個jvm內部,所以也不存在分布式系統所存在的一些問題,比如資料的一致性,session的共享等。單體應用雖好,但是隨著業務的發展,單個tomcat所支撐的容量有效,這時候可能就需要多個tomcat來部署應用例項,這時候的應用架構可能需要乙個同乙個的入口來處理分發請求,軟體方面可以考慮nginx,硬體方面可以考慮f5硬體,這裡就不說用法了,有興趣的可以自己搜尋下。

隨著業務越來越大,系統隨之臃腫,可能乙個業務邏輯的呼叫鏈很長,業務變更時,修改了某乙個模組的**,就需要將整個應用重新測試、部署。這時候就需要考慮將不同的業務模組拆分成不同的應用,隨之而來也需要將原先的庫拆分開來,業務的拆分粒度決定了單體服務粒度。這方面不細說。

當把原先的單體應用拆分成多個微小的服務模組,每個服務模組單獨部署在乙個容器內,這就構成了分布式。各個服務模組只負責自己的功能,單一職責。那麼這時候就會遇到一系列問題,不同的服務模組之間怎麼通訊,通訊格式是怎樣的,乙個業務邏輯的完成可能需要借助多個服務模組來完成,這多個服務模組之間的資料怎樣保持一致性。涉及的問題很多,包含的技術也很多。

總結下1.什麼是分布式?

在乙個操作中,需要多個系統之間配合才能完成的整個業務邏輯,叫做分布式系統。(個人理解)

2.分布式拆分三步驟

1.將你的整個整個應用視為乙個系統(不管它有多複雜)。

2.將整個系統分割為一系列的服務模組, 每個服務模組完成一定的功能(單一職責)。

3.將這些服務模組 分散部署到不同的機器上。分散後,選擇若干種(沒錯一種可能不夠)通訊協議把他們連線起來,當執行某項操作的時候按照拆分的系統有序的執行。

拆分+連線是分布式系統的本質

所謂分布式,無非就是」將乙個系統拆分成多個子系統並散布到不同裝置「的過程而已。

本質上而言,實現乙個分布式系統,最核心的部分無非有兩點:

1.如何拆分——可以有很多方式,核心依據一是業務需求,二是成本限制。這是實踐中構建分布式系統時最主要的設計依據。

2.如何連線——光把系統拆開成 單個服務模組還不夠,關鍵是拆開後的 服務模組之間還要能通訊,因此涉及通訊協議設計的問題,需要考慮的因素很多,好訊息是這部分其實成熟,方案很多。

為什麼你要使用分布式?

分布式系統並非靈丹妙藥,解決問題的關鍵還是看你對問題本身的了解。通常我們需要使用分布式的常見理由是:

1.為了效能擴充套件——系統負載高,單台機器無法承載,希望通過使用多台機器來提高系統的負載能力。

例:對乙個b2c(京東、**)**進行拆分,首頁部分我們要考慮到高併發、高可用、搜尋、快取等等一系列的情況,需要把這個功能單獨拆分出來來擴充套件效能

2.為了增強可靠性——軟體不是完美的,網路不是完美的,甚至機器本身也不可能是完美的,隨時可能會出錯,為了避免故障,需要將業務分散開保留一定的冗餘度

在以提供 service 為主的服務端軟體開發過程中常常遇到這些問題。

一些分布式方案能解決你的問題,另一些卻不能,要學會的其實是選擇

籠統的討論分布式沒有太大的意義,就如我剛才所談的,實際上分布式很容易實現。真正難的地方在於如何選擇正確的分布方案。

例如,當你想要建立乙個分布式的資料管理系統的時候,你就必須得面對「一致性」問題。如果你對資料一致性要求很高,你就不得不容忍一些缺陷例如規模伸縮困難;而如果你放棄它,你可以輕鬆伸縮規模,但你必須解決好由此帶來的一系列資料不一致導致的問題。(cap 問題)

於是你會意識到,有許多種分布方案,為了正確解決你的問題,你需要對每乙個方案都進行了解,並評估,選擇不同的方案有時候區別不大,有時候卻會深刻的影響整個系統中其他部分的工作方式,甚至影響使用者介面中使用者操作時的流程。這是我們學習分布式系統的重點所在。

分布式一致性問題

典型情況 三個副本構成乙個group 1.強一致性 所有的副本更新成功才返回。同時,p向s1 s2同步的過程,可以進行優化,借鑑gfs的流水線複製方式 p s1 s1 s2 以便充分利用每個node的頻寬資源。2.最終一致性 在經過乙個不一致視窗後,副本最終處於一致的狀態。如上圖是一種簡單的最終一致...

分布式一致性問題。

在電腦科學領域,分布式一致性問題是乙個相當重要,且被廣泛探索與論證的問題,通常存在於諸如分布式檔案系統 快取系統和資料庫等大型分布式儲存系統中。什麼是分布式一致性?分布式一致性分為哪些型別?分布式系統達到一致性後將會是乙個什麼樣的狀態?如果失去了一致性約束,分布式系統是否還可以依賴?如果一味地追求一...

分布式一致性問題

分布式一致性包括 強一致性 保證副本都一致 可用性 在使用者容忍時間範圍內返回使用者預期結果 分割槽容錯性 出現網路分割槽時仍能對外提供可用服務。主要方法兩階段提交協議,三階段提交協議 分為協調者master參與者segment 第一階段 投票階段 協調者像參與者分發任務,參與者執行並記錄日誌,但不...