近期看了楊波老師講的《微服務》課程,深有感觸,準備做下記錄和學習筆記,希望能尋找到更多的一些方法論和思想進行微服務架構上的指引。 談到微服務,有必要談到兩個人,這兩個人對微服務架構的定義產生非常深遠的影響,一個是馬丁福勒,一個是netflix架構總監Adrian Cockcroft,netflix公 ...
近期看了楊波老師講的《微服務》課程,深有感觸,準備做下記錄和學習筆記,希望能尋找到更多的一些方法論和思想進行微服務架構上的指引。
談到微服務,有必要談到兩個人,這兩個人對微服務架構的定義產生非常深遠的影響,一個是馬丁福勒,一個是netflix架構總監Adrian Cockcroft,netflix公司對整個微服務架構推進起到決定性的推進作用。其中馬丁福勒在一篇博文中說了幾個微服務定義的核心點,這裡把它羅列出來。
第一個人馬丁福勒認為微服務架構是一種架構風格,此架構風格包含了上圖的六個特點
一組小的服務
原來的單塊服務都是業務能力大而全的打包在一個單塊中,微服務主張把這些單塊服務進行拆分,形成一個個小的獨立的服務。這裡有個最大的特點是“小”,那麼糾結要小到什麼程度才為之小,很多同學都會糾結這個小的點,因為這個小並沒有特別和明確的規定,所以這也就引申出了現在很多DDD領域驅動設計來指引微服務的拆分,但基本上一個微服務能讓一個開發人員能夠獨立的理解,基本上就稱為一個微服務,具體有多少行代碼並不是很關鍵。
獨立的進程
微服務是運行在獨立的進程當中,例如java程式部署在tomcat,也可以部署在容器docker中,容易本身也是一種進程,所以微服務可以以進程的方式去擴展。
輕量級的通訊
微服務主張使用輕量級去構建通訊機制,例如http,固定消息格式和減少消息格式,服務之間不耦合,讓通訊儘量輕量。
基於業務能力
微服務是基於業務能力進行構建,例如有用戶服務,登陸服務,商品服務,基於這些業務能力去構建這些微服務。
獨立部署
微服務被拆分開後,每個團隊獨立維護自己的微服務,開發,迭代自己的微服務,是可以獨立的去部署,團隊之間是不需要特別的去協調,這些對業務開發維護可以做到更加的敏捷,輕量,快速。
無集中式管理
原來單體服務是需要整個技術團隊是需要獨立的架構團隊去管理,統一架構,統一技術棧,統一存儲,微服務就不太一樣,微服務主張每個團隊根據自己的技術需要,選擇自己最熟悉,最高效解決問題的技術棧,甚至選擇不同存儲方式。
說到第二個人netflix架構總監 Adrian Cockcroft,他給微服務下了一個定義 : "Loosely Coupled service oriented architecture with bounded context"
- 首先第一點:服務之間應該是鬆散耦合,不能對周邊有強依賴,如果一個團隊的開發對周邊有強依賴性,則不能認為鬆散耦合
- 其實第二點:服務面向的架構,微服務還是在本質上無法脫離SOA的理念,本身來說還是一種SOA,只是更加細化落地。
- 第三點:有界上下文,每個團隊可以維護自己的數據源,不是集中式的數據源,每個團隊可以自己獨立去演化自己的數據源,對業務的支持會更加敏捷
思考點:
微服務可以獨立部署,獨立部署給業務帶來什麼的好處? 微服務是基於有界上下文,每個團隊是可以擁有自己獨立的數據源,但在分散式系統中每個團隊擁有了獨立的數據源會帶什麼挑戰?