分散式單體的六大病症
當公式的組織架構及其程式碼被拆分以後,但仍然存在緊密耦合時,就會出現分散式單體。這已經成為一個問題,因為系統的規模增加,單體的所有部分都需要一起管理,這會放慢開發速度並增加任何變化的風險。
能夠識別何時處理分散式單體很重要:
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分散式
- CentOS7 hadoop3.3.1安裝(單機分散式、偽分散式、分散式)CentOSHadoop分散式
- 你以為在做的是微服務?不!你只是做了個比單體還糟糕的分散式單體!微服務分散式
- 分散式系列七: zookeeper簡單用法分散式
- 分散式系統閱讀清單分散式
- gin websocket 簡單分散式實現Web分散式
- 如何實現簡單的分散式鏈路功能?分散式
- 部署超簡單的 Golong 分散式 WebSocket 微服務Go分散式Web微服務
- OceanBase楊志豐 OceanBase 4.0:單機分散式一體化的技術演進分散式
- 分散式 - 分散式系統的特點分散式
- 分散式訊息中介軟體分散式
- (二) MdbCluster分散式記憶體資料庫——分散式架構1分散式記憶體資料庫架構
- [分散式][分散式鎖]淺談分散式鎖分散式
- 從0.5到4.0,OceanBase單機分散式一體化的技術演進|DTCC 2022分散式
- Feacar分散式事務框架簡單使用分散式框架
- 單機限流和分散式應用限流分散式
- PHP 實現簡單阻塞分散式鎖PHP分散式
- C# Redis分散式鎖 - 單節點C#Redis分散式
- Hadoop--HDFS完全分散式(簡單版)Hadoop分散式
- 單機、分散式、叢集的區別與聯絡分散式
- 單元化架構,分散式系統的新王!架構分散式
- 【Redis 分散式鎖】(1)一把簡單的“鎖”Redis分散式
- 中介軟體---分散式跟蹤---Pinpoint分散式
- 分散式爬蟲的部署之Gerapy分散式管理分散式爬蟲
- 分散式爬蟲的部署之Scrapyd分散式部署分散式爬蟲
- 分散式事務(一)—分散式事務的概念分散式
- 【從單體架構到分散式架構】(三)請求增多,單點變叢集(2):Nginx架構分散式Nginx
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 最簡單的分散式檔案系統 go-fastdfs分散式GoAST
- Golang 基於單節點 Redis 實現的分散式鎖GolangRedis分散式
- hadoop偽分散式叢集的安裝(不是單機版)Hadoop分散式
- springboot+redis分散式鎖-模擬搶單Spring BootRedis分散式
- hadoop叢集搭建——單節點(偽分散式)Hadoop分散式