實現微服務的唯一方法是:在系統全域性和本地兩個級別平衡每個服務的複雜性
在設計基於微服務的系統時,衡量和優化正確的指標至關重要。為每個微程式碼庫和微團隊設計本地邊界絕對很容易。但是,要構建一個完整系統,我們必須將系統級別設計也考慮在內。微服務與系統級別的設計有關,而不是僅僅與單個服務有關。
在基於微服務的系統中,我們通過最小化服務的公共介面(使之成為微服務)來平衡本地和全球的複雜性。您公開的服務越小,其實現越簡單,因此其本地複雜性也就越低。從全域性複雜性的角度來看,較小的公共介面在服務之間產生較少的依賴關係和連線。
這種方法聽起來似乎很簡單。如果微服務只是具有微公共介面的服務,那麼我們可以將公共介面限制為僅有一種方法的介面。不能比這更小了,那應該這就是是完美的微服務嗎?
並非如此。為了形成系統,服務必須彼此互動並共享對每個服務狀態的更改。因為服務介面只有一個方法,這個方法只是本地功能操作,無法與其他服務互動,因此,我們必須使用用於在服務之間整合的公共方法來實現這種更改,那麼這種呼叫就變成蜘蛛網式的呼叫:
全域性複雜性開始增加,不僅最終的系統陷入了混亂,而且為了整合的目的,我們還不得不將公共介面擴充套件到我們最初的意圖之外。這將我們帶到了重要的一點:
對於整合功能比業務相關的功能更重要的的服務來說,這是一種不斷增長的分散式大泥球。
因此,可以將服務的公共介面最小化的閾值不僅取決於服務本身,而且還主要取決於該服務所屬的系統。對微服務的適當分解應該平衡系統的全域性複雜性和服務的區域性複雜性。
設計服務邊界
設計微服務的邊界很困難,而且可能不可能在第一時間就正確。這使得設計相當複雜的基於微服務的系統成為一個迭代過程。
因此,更安全的方法是從更寬的邊界開始,可能是適當的有界上下文的邊界,然後隨著對系統及其業務領域的更多瞭解,將它們分解為微服務。它與包含核心業務領域的服務特別相關。
這就是全部嗎?
儘管最小化服務的公共介面是設計微服務的良好指導原則,但這仍然只是一種啟發,並不能取代常識。實際上,微介面只是對更基本但更復雜的設計原理(耦合和內聚)的一種抽象。
例如,如果兩個服務具有微公共介面,但是必須在分散式事務中進行協調,則它們之間仍然彼此高度耦合。
也就是說,針對微介面仍然是一種強大的啟發式方法,可以解決不同型別的耦合問題,例如功能,開發和語義。但這是另一個部落格的主題。
相關文章
- 如何實現簡單的定時全域性唯一任務?
- 微服務之服務註冊和發現的可行性方案微服務
- 關於“服務網格”和分散式系統軟體複雜性 - Matt Klein分散式
- 變局之年:駕馭不斷升級的客戶服務複雜性
- 如何構建更好的複雜系統?容器、微服務和持續交付微服務
- 使用RSocket進行服務通訊的反應性服務 - 負載平衡和可恢復性 | Rafał Kowalski負載
- 分散式系統全域性唯一Id(SnowFlake)雪花演算法實現分散式演算法
- 在Linux中,如何讓某個服務(假如服務名為 nginx)只在3,5兩個運⾏級別開啟,其他級別關閉?LinuxNginx
- 2.8.2 全域性資料服務GDS
- 通過Dapr實現一個簡單的基於.net的微服務電商系統(十八)——服務保護之多級快取微服務快取
- 複雜性系統設計:福特CEO談特斯拉的三個特點
- 事務可見性的判斷和事務隔離級別,PostgreSQL和MySQL實現上有啥區別MySql
- Serverless:基於個性化服務畫像的彈性伸縮實踐Server
- SAP ABAP OData 服務的 $count 和 $inlinecount 兩個操作的區別inline
- 複雜性系統是一種心智介面 – Charles
- 微服務在彈性雲實現無損釋出實踐微服務
- SAP UI5 確保控制元件 id 全域性唯一的實現方法UI控制元件
- 您的微服務是否過於瑣碎?ironSource分享如何避免微服務帶來的細粒度複雜性 -新堆疊微服務
- 為構建大型複雜系統而生的微服務框架 Erda Infra微服務框架
- 分散式系統:常見陷阱和複雜性分散式
- 外觀模式-簡化子系統的複雜性模式
- 抖音本地生活傳統服務商和系統服務商有什麼區別?
- 老張,你的服務是不是掛了?論全域性 SLI 的重要性
- 害怕軟體的複雜嗎?其實複雜性是必須存在的 - ferd
- 直面不確定性與非線性的複雜現實:邁向複雜性經濟 - Cilliers
- 快速實現現存系統微服務改造 博雲微服務治理產品新升級微服務
- 基於SpringBoot+Netty實現一個自己的推送服務系統Spring BootNetty
- 在騰訊雲容器服務 TKE 中利用 HPA 實現業務的彈性伸縮
- vue定義全域性變數和全域性方法Vue變數
- Java 實現系統全域性快捷鍵繫結Java
- 鴻蒙系統(HarmonyOS)全域性彈窗實現鴻蒙
- 複雜性系統的戰略分析要點 -Dave
- 複雜性Complex與複雜Complicated區別 - Sonja
- 模式:每個服務一個資料庫模式資料庫
- [微服務技術文章之其一] 服務整合時需避免的兩個錯誤微服務
- 通過Dapr實現一個簡單的基於.net的微服務電商系統(十六)——dapr+sentinel中介軟體實現服務保護微服務
- 兩種方式配置vue全域性方法Vue
- 介面服務中的冪等性設計和防重保證,詳細分析冪等性的幾種實現方法