這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
什麼是微服務架構
微服務架構(Microservices Architecture)是將應用拆分成小業務單元進行開發和部署,使用輕量級協議通訊,通過協同工作實現應用邏輯的架構模式。
靈活、穩定、省資源是微服務架構的主要優點——
- 可獨立部署、升級、替換、伸縮
- 自由選擇開發語言
- 高效利用資源
- 故障隔離
服務多、管理難度大是微服務架構的不足之處——
- 服務多,帶來更多操作
- 管理複雜度提升
- 部署難度加大
但總體來說,微服務架構是非常迷人的,否則也不會得到像Twitter、Netflix、Amazon、eBay等知名大廠的青睞。
twitter微服務架構
微服務架構模式
微服務架構模式主要可分為:
彙總模式
微服務架構彙總模式
彙總模式即多個服務彙總到一個服務,稱之為彙總服務。彙總服務最常見的表現是Web服務,主要功能為頁面表現,後端服務為純業務功能服務。也就是說,彙總模式下擴充業務只需增加一個新的後端微服務即可。
彙總服務符合DRY原則,可以是一個更高層次的組合微服務,增加商務邏輯後進一步發布成一個新的微服務,同時每個服務都有自己的緩衝和資料庫。
彙總模式是微服務架構中最常用的模式。
代理模式
微服務架構代理模式
代理模式是一種特殊的彙總模式,即對外將服務統一封裝。代理模式可以僅僅委派請求,也可以進行資料轉換工作。
我們可以將代理模式比做通過收發室統一收發信件的小區,無論是外部請求還是內部資料服務,均由代理處理。
資源共用模式
微服務架構資源共用模式
微服務架構的資源共用模式可實現部分業務的邏輯分離、資料共用。
資源共用模式常用在“一體化架構”向“微服務架構”遷移的過渡階段,以及有資料一致性要求的兩個服務。
非同步訊息模式
微服務架構非同步訊息模式
微服務架構的非同步訊息模式適用於不需要同步的情境,如任務型服務,利用訊息佇列代替其他微服務架構模式所採用的REST請求及響應。
微服務架構帶來的挑戰
服務部署的挑戰
每個服務都需要獨立的代碼管理、版本管理、編譯構建、測試環境部署、生產環境部署、代碼復原等,人工管理大量微服務幾乎是一個不可能完成的任務。
服務紳縮的挑戰
無狀態服務需要配置負載平衡和增加節點,具狀態服務需要擴充單個服務的資源。為了減少資源浪費,開發人員需要監控每個服務,並在必要的時候減少節點和資源。
服務高可用的挑戰
每種服務的高可用策略都不一樣,這其中無狀態服務的管理相對簡單,而每個具狀態服務的管理則是一個難題。
服務容錯的挑戰
任何一個服務的可用性都不是100%的,在分布式系統中,當某個依賴服務不可用時,系統自身也將不能工作。尤其是依賴大量服務的複雜的分布式系統,以來服務的可用性加上網路不穩定的因素,系統自身的可用性很可能無法得到令人滿意的保障。
依賴關係的挑戰
如果將依賴設定檔寫在代碼中,需要重新部署才會生效,而設定檔還可能會汙染代碼。
服務監控的挑戰
監控CPU還是負載?大量微服務的出現也是對服務監控的嚴峻考驗。
好雨的微服務架構解決方案
好雨的微服務架構解決方案核心思路為——
- 簡化使用者操作
- 微服務內部封裝、整體對外
- 封裝技術、服務業務
好雨雲底層是通過Docker實現,並儘可能做到讓使用者感受不到Docker的使用體驗。在好雨雲,複雜特性被封裝在了內部,通過服務整體對外,使用者無需管理計算資源和網路資源。
服務部署
好雨雲端服務部署
好雨雲支援Java、Python、PHP、Ruby、Golang,Node.JS等主流開發語言,並支援Github、好雨託管倉庫等代碼倉庫。
服務伸縮
好雨雲端服務伸縮
好雨雲支援服務伸縮,其中水平伸縮用於無狀態的Server和Worker類服務,垂直伸縮用於有狀態的服務。
部分具狀態服務支援水平資料分割(Sharding),使用者只需要調整節點個數就可以了。
服務高可用
好雨雲端服務高可用
好雨雲通過高可用調度器,使無狀態服務、具狀態服務具備高可用特性。
依賴關係
好雨雲依賴關係
好雨雲的依賴關係解決方案類似於Spring的依賴注入,參數通過環境變數實現,調整服務的依賴關係只需要介面點擊即可完成。
服務容錯
好雨雲端服務容錯
好雨雲的服務容錯原理類似於保險絲,當某一服務變慢,達到斷路器的閥值,該服務將自動下線,不至於影響其他服務,而當延遲變小時,該服務逐步恢複。
使用非同步也可以達到服務容錯的效果,具體可參考CQRS模式。
服務監控
好雨雲端服務監控
好雨雲將平均回應時間、吞吐率、線上人數等業務指標用於服務監控。
用業務監控替代技術監控,實際情境中的服務監控得以變得簡單而易於理解。
即時效能分析
好雨雲單個REST服務的即時效能分析
最慢的SQL語句不一定是對資料庫影響最大的,好雨雲的即時效能分析通過CEP+log實現,從實際出發解決問題,開發人員可以很直觀的瞭解當前對系統影響最大的URL是哪個。