分散式單體的六大病症
當公式的組織架構及其程式碼被拆分以後,但仍然存在緊密耦合時,就會出現分散式單體。這已經成為一個問題,因為系統的規模增加,單體的所有部分都需要一起管理,這會放慢開發速度並增加任何變化的風險。
能夠識別何時處理分散式單體很重要:
1. 鎖定部署
當兩個服務需要一起部署時,它們是耦合的。如果它們在一個單體中,這很容易管理。但是,如果它們是實際上應該獨立管理的獨立服務,部署可能會變得緩慢和痛苦。我們可以透過識別耦合的原因並重構我們的解決方案來解決這個問題。
如果這兩個服務使用共享程式碼,則解決方案可以重組程式碼以共享一個單獨管理的庫。如果他們使用共享基礎設施,這可能意味著將服務拆分到不同的主機上。
2.版本耦合
如果服務 A 直接呼叫服務 B 的一個版本,則每次更新服務 B 時,我們都需要更新服務 A 的配置。這種更改耦合會使管理兩個應用程式的生命週期變得複雜,但這是可能的。
理想情況下,服務 A 應該呼叫服務 B 的端點,該端點不是特定版本,並且也由服務 B 管理。這通常可以透過使用 CNAMES 的 DNS 來完成,如下所示:
A1.domain.com > 呼叫 > B.domain.com > B1.domain.com
而不是:
A1.domain.com > 呼叫 > B1.domain.com
3. 雙向依賴
如果服務 A 呼叫服務 B 並且服務 B 呼叫服務 A,則很難測試對任一系統的更改。發生這種情況時,我們可以選擇同時更改整個環境,測試透過舊版和新版軟體傳送到的事件,或者在如何路由訊息方面顯著增加複雜性。
4.共享資料庫訪問
當兩個服務共享相同的資料庫訪問許可權時,無需直接呼叫服務即可輕鬆地從另一個域中提取資料。這可能導致在資料庫層連線的耦合服務。當服務修改它自己的資料庫結構時,它不應該影響任何其他服務。反之如果是這樣,那麼服務是耦合的。
共享資料庫以節省管理工作並沒有錯,但這應該透過安全性進行嚴格控制以防止耦合。使用 Postgres 執行此操作的常用方法是為每個服務使用單獨的使用者和模式。如果一個服務想要訪問另一個服務的資料,它應該直接呼叫下游服務。
5. 共享佇列
與共享資料庫訪問導致耦合的方式相同,共享佇列也是如此。如果兩個服務直接與一個共享佇列通訊,那麼任何一個服務都無法安全地修改、更改或重定向訊息,而不會有破壞這兩個服務的風險。
應儘可能避免共享佇列,並且任何佇列都應由單個服務擁有並且不暴露給其他服務。
6.企業服務匯流排
企業服務匯流排 (ESB) 是另一種常見的資料儲存模式,類似於共享資料庫和共享佇列,但規模更大。ESB 旨在允許透過中央匯流排傳送和接收任何訊息。這意味著一旦服務向匯流排傳送訊息,就不清楚誰在使用該訊息,正在使用它做什麼,以及它是否成功。這些問題不容易解決,這意味著我們的系統不僅會與其他系統耦合,而且會超出我們可能意識到的範圍。
概括
無論您的系統架構如何,您都應該能夠清楚地確定您的系統是單體、微服務還是分散式單體。透過共享部署、共享資料和雙向依賴識別與其他服務的耦合在此過程中至關重要。這樣做將使我們能夠構建我們的架構,這樣我們就可以避免最終成為分散式單體。
相關文章
- 分散式儲存的六大優點分散式
- 微服務架構帶來的分散式單體微服務架構分散式
- 4.0體驗站|OceanBase 4.0,從分散式到單機,從單機到分散式分散式
- 單體JOB向分散式JOB遷移案例分散式
- 主流的六大報表軟體榜單
- Redisson分散式鎖的簡單使用Redis分散式
- Hazelcast簡單的分散式快取AST分散式快取
- CentOS7 hadoop3.3.1安裝(單機分散式、偽分散式、分散式)CentOSHadoop分散式
- 你以為在做的是微服務?不!你只是做了個比單體還糟糕的分散式單體!微服務分散式
- 單例項,分散式系統體系結構簡介單例分散式
- 分散式系列七: zookeeper簡單用法分散式
- gin websocket 簡單分散式實現Web分散式
- 簡單瞭解分散式系統分散式
- 分散式系統閱讀清單分散式
- 分散式設計很簡單--guzz分散式切表功能正式釋出分散式
- 分散式訊息中介軟體分散式
- 部署超簡單的 Golong 分散式 WebSocket 微服務Go分散式Web微服務
- 如何實現簡單的分散式鏈路功能?分散式
- 基於 Redis 實現簡單的分散式鎖Redis分散式
- 如何最簡單的實現分散式快取分散式快取
- 分散式 - 分散式系統的特點分散式
- 基於Redis的分散式鎖的簡單實現Redis分散式
- (二) MdbCluster分散式記憶體資料庫——分散式架構1分散式記憶體資料庫架構
- [分散式][分散式鎖]淺談分散式鎖分散式
- 單機限流和分散式應用限流分散式
- PHP 實現簡單阻塞分散式鎖PHP分散式
- C# Redis分散式鎖 - 單節點C#Redis分散式
- OceanBase楊志豐 OceanBase 4.0:單機分散式一體化的技術演進分散式
- 【Redis 分散式鎖】(1)一把簡單的“鎖”Redis分散式
- 單機、分散式、叢集的區別與聯絡分散式
- 單元化架構,分散式系統的新王!架構分散式
- (OO + 分散式計算) = 軟體架構的方向分散式架構
- Dubbo分散式架構實戰--FastDFS分散式檔案系統的安裝與使用(單節點)分散式架構AST
- 分散式事務(一)—分散式事務的概念分散式
- 分散式爬蟲的部署之Scrapyd分散式部署分散式爬蟲
- 分散式爬蟲的部署之Gerapy分散式管理分散式爬蟲
- 楊志豐:一文詳解,什麼是單機分散式一體化?分散式
- 【從單體架構到分散式架構】(三)請求增多,單點變叢集(2):Nginx架構分散式Nginx