1.什麼樣的服務是好的微服務?
它應該具備這兩個特點:松耦合、高內聚
松耦合:
如果做到了服務之間的松耦合,那麼修改乙個服務就不需要修改另外乙個服務了。使用微服務最重要的一點是,能夠獨立修改和部署單個服務而不需要修改系統的其他部分,這一點非常重要。
那麼相對的什麼是緊耦合呢?使用緊耦合來做服務之間的整合,會使的乙個服務的修改致使其消費者的修改。
乙個松耦合的服務應該盡可能少的知道與之協作的那些服務的資訊。
高內聚:
我們希望把相關的行為聚集在一起,把不相關的行為放在別處。
因為如果你要改變某個行為的話,最好能夠只在乙個地方進行修改,然後就可以快速發布。如果你同時需要很多地方做修改,那麼就可能同時發布多個微服務才能完成這個功能。這樣的話,修改會變慢,部署服務的工作量和風險也會增大。
這就需要找到問題域的邊界,從而確保相關的行為能放在同乙個地方,並且它們會和其他邊界以盡量松耦合的形式進行通訊。
2.限界上下文
eric evans 的 《領域驅動設計》中,曾提到這個概念。
他認為,任何乙個給定的領域都包含多個限界上下文,每個限界上下文中的模型分成兩部分,一部分不需要與外部通訊,另一部分則需要。
每個上下文都有明確的介面,該介面決定了它會暴露哪些模型給其他上下文。
2.1 共享的隱私模型
例如,對於musiccorp來說,財務部門和倉庫就可以是兩個獨立的限界上下文。它們都有明確的對外介面(存貨報告,工資單等),也都有著只需要自己知道的一些細節(鏟車,計算器等)。
因為,財務部的雇員需要庫存資訊,所以庫存項就變成了兩個上下文之間的共享模型。但是我們不會把庫存項在倉庫模型中的所有內容都暴露出去。
很多情況下,這種情況就會導致是否要採用rest的討論了。(因為這種情況也可以是rest方式。)
2.2 模組和服務
在單塊系統中,一旦你發現了領域內部的限界上下文,一定要使用模組對其進行建模,同時使用共享和隱藏模型。
這些模組邊界就可以成為絕佳的微服務候選。一般來講,微服務應該清晰的和限界上下文保持一致。熟練之後,就可以省掉在單塊系統中先使用模組的這個步驟,而直接使用單獨的服務。
總結:微服務邊界要和限界上下文保持一致。
在開始使用微服務的時候,過早的將乙個系統劃分成為微服務的代價非常高,尤其是面對新領域時。很多時候,將乙個已有的**庫劃分成微服務,要比從頭開始構建微服務要簡單的多。
3.業務功能
當你在思考組織內的限界上下文時,不應該從共享資料的角度來考慮,而應該從這些上下文能夠提供的功能來考慮。
4.逐步劃分上下文
一開始你會識別出一些粗粒度的限界上下文,而這些限界上下文可能又包含一些巢狀的限界上下文。
另外,組織結構和軟體架構會相互影響。
另乙個傾向於巢狀式方法的原因是,它可以使的架構更成塊,從而更好的測試。
5.關於業務概念的溝通
微服務之間如何就同乙個業務概念進行通訊,也是一件很重要的事情。
以跟組織內通訊相同的方式,來思考微服務之間的通訊形式是非常有用的。
事實上,通訊形式在整個組織範圍內都非常重要。
6.技術邊界
舉個例子,乙個系統被劃分為兩部分,一部分面向前端,該部分不儲存任何狀態;後端部分就是乙個簡單的資料儲存,通過rpc(remote procedure call,遠端過程呼叫)來提供服務。
基本上,你可以理解為,把乙個**庫中的倉儲層變成乙個獨立的服務。
我們把這種架構稱為洋蔥架構,因為它有很多層。
在這個例子中,並不是按照業務進行的垂直劃分,而是把原來程序內部的api水平劃分了出去。
按照技術接縫(指不同技術)劃分的服務邊界進行建模也並不總是錯誤的。
但是,一般來講,這不應該成為你考慮的首要方式。
7.小結
在這篇文章中,你學到了什麼是好的微服務,以及如何在問題空間中尋找能達到高內聚低耦合的接縫。
限界上下文是尋找這些接縫的乙個非常重要的工具,通過將微服務和這些邊界相匹配,可以保證最終的系統能夠得到微服務提供的所有好處。
微服務 微服務簡介
什麼是微服務 顧名思義,就是粒度較小的服務,不再侷限於系統與系統之間的藉口呼叫,也不侷限於某種具體的服務形式。系統中凡是可被復用的功能模組都可以被 服務化 轉變為 服務 這些服務可以對外暴露,也可能僅限於再系統內部使用。由於服務數量更多,粒度更小,因此管控難度會更大,對效能的要求也更高。微服務的好處...
微服務學習2 如何劃分微服務?
1 起點和終點 起點 既有架構的形態 終點 好的架構不是設計出來的,而是進化而來的 一直在演進ing 2 適合上微服務麼 業務形態不適合的 1 系統中包含很多很多強事務場景的 2 業務相對穩定,迭代周期長 3 訪問壓力不大,可用性要求不高 3,康威定律 任何組織在設計一套系統 廣義概念上的系統 時,...
微服務1之微服務設計要點
在開始轉為微服務之前,需要注意如下要點,考慮清楚再決定要不要做微服務。1 服務粒度 如何劃分各個服務之間的職責邊界。劃分過粗,則服務中包含的業務過多,時間長了之後,又會變為乙個複雜的單體應用。劃分過細,則服務增多,又會增加整體複雜性。2 通訊協議 各服務之間的通訊模式。是採用json,還是xml,還...