微服務設計讀書筆記 (第三章 如何建模服務)

2022-03-17 18:51:27 字數 1843 閱讀 7915

​ 在本章中,我們會討論如何確定服務之間的邊界,以及最大化微服務的好處,避開它的劣勢。但是,首先我們需要有乙個產品作為討論的載體。

​ 松耦合和高內聚。如果這兩點做不到,那麼微服務也就沒什麼價值了。

​ 如果做到了服務之間的松耦合,那麼修改乙個服務就不需要修改另乙個服務。使用微服務最重要的一點是,能夠獨立修改及部署單個服務而不需要修改系統的其他部分,這真的非常重要。

​ 乙個松耦合的服務應該盡可能少地知道與之協作的那些服務的資訊。這也意味著,應該限制兩個服務之間不同呼叫形式的數量,因為除了潛在的效能問題之外,過度的通訊可能會導致緊耦合。

​ 我們希望把相關的行為聚集在一起,把不相關的行為放在別處。為什麼呢?因為如果你要改變某個行為的話,最好能夠只在乙個地方進行修改,然後就可以盡快地發布。

​ 找到問題域的邊界可以確保相關的行為能放在同乙個地方,並且它們會和其他邊界以盡量松耦合的形式進行通訊。

​ 乙個由顯式邊界限定的特定職責。

​ 任何乙個給定的領域都包含多個限界上下文,每個限界上下文中的東西分成兩部分,一部分不需要與外部通訊,另一部分則需要。每個上下文都有明確的介面,該介面決定了它會暴露哪些模型給其他的上下文。

​ 有時候,同乙個名字在不同的上下文中有著完全不同的含義。比如,退貨表示的是客戶退回的一些東西。在客戶的上下文中,退貨意味著列印運送標籤、寄送包裹,然後等待退款。在倉庫的上下文中,退貨表示的是乙個即將到來的包裹,而且這個包裹會重新入庫。退貨這個概念會與將要執行的任務相關,比如我們可能會發起乙個重新入庫的請求。這個退貨的共享模型會在多個不同的程序中使用,並且在每個限界上下文中都會存在相應的實體,不過,這些實體僅僅是在每個上下文的內部表示而已。

​ 明白應該共享特定的模型,而不應該共享內部表示這個道理之後,就可以避免潛在的緊耦合風險。我們還識別出了領域內的一些邊界,邊界內部是相關性比較高的業務功能,從而得到高內聚。這些限界上下文可以很好地形成組合邊界。

​ 一般來講,微服務應該清晰地和限界上下文保持一致。熟練之後,就可以省掉在單塊系統中先使用模組的這個步驟,而直接使用單獨的服務。然而對於乙個新系統而言,可以先使用一段時間的單塊系統,因為如果服務之間的邊界搞錯了,後面修復的代價會很大。所以最好能夠等到系統穩定下來之後,再確定把哪些東西作為乙個服務劃分出去。

​ 過早將乙個系統劃分成為微服務的代價非常高,尤其是在面對新領域時。很多時候,將乙個已有的**庫劃分成微服務,要比從頭開始構建微服務簡單得多。

​ 當你在思考組織內的限界上下文時,不應該從共享資料的角度來考慮,而應該從這些上下文能夠提供的功能來考慮。首先要問自己「這個上下文是做什麼用的」,然後再考慮「它需要什麼樣的資料」。

​ 一開始你會識別出一些粗粒度的限界上下文,而這些限界上下文可能又包含一些巢狀的限界上下文。舉個例子,你可以把倉庫分解成為不同的部分:訂單處理、庫存管理、貨物接受等。當考慮微服務的邊界時,首先考慮比較大的、粗粒度的那些上下文,然後當發現合適的縫隙後,再進一步劃分出那些巢狀的上下文。

​ 修改系統的目的是為了滿足業務需求。我們會修改面向客戶的功能。如果把系統分解成為限界上下文來表示領域的話,那麼對於某個功能所要做的修改,就更傾向於侷限在乙個單獨的微服務邊界之內。這樣就減小了修改的範圍,並能夠更快地進行部署。

​ 微服務之間如何就同乙個業務概念進行通訊,也是一件很重要的事情。基於業務領域的軟體建模不應該止於限界上下文的概念。在組織內部共享的那些相同的術語和想法,也應該被反映到服務的介面上。以跟組織內通訊相同的方式,來思考微服務之間的通訊形式是非常有用的。事實上,通訊形式在整個組織範圍內都非常重要。

​ 在本章中,你學到了什麼是好的服務,以及如何在問題空間中尋找能達到高內聚低耦合的接縫。限界上下文是尋找這些接縫的乙個非常重要的工具,通過將微服務與這些邊界相匹配,可以保證最終的系統能夠得到微服務提供的所有好處。我們也大概了解了一些進一步劃分微服務的方法,後面的章節會深入討論這個話題。

第三章讀書筆記

程序管理 3.1程序 程序就是處於執行期的程式 目標碼存放在某種儲存介質上 但程序並不僅僅侷限於一段可執行程式 執行執行緒,執行緒,是程序活動的物件。兩種虛擬機制 虛擬處理器和虛擬記憶體。最終,程式通過exit 系統呼叫退出執行。3.2程序描述及任務結構 核心把程序的列表存放在叫做任務佇列的雙向迴圈...

第三章讀書筆記

本章是講了git的使用入門,為學習本書的人展示了git的基本用法。儘管git並不是學習android移植和linux核心 驅動開發必須掌握的技術。但對於深入研究這些底層技術的人來說,git將成為學習過程中必不可少的工具。git是什麼,git就是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小...

UNP讀書筆記第三章

網路位元組序和主機位元組序大小端不一樣。linux提供了4個轉換函式 include uint16 t htons uint16 t value uint32 t htonl uint 32t value uint16 t ntohs uin16 t value uint32 t ntohl uin...