微服務
微服務,是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信。
每一個小型服務是圍繞着系統中的某一個或一些耦合度高的業務功能進行構建,並且每個服務都維護自身的數據存儲、業務開發、自動化測試以及獨立的部署機制。
微服務定義第一人
https://martinfowler.com/articles/microservices.html
九大特性
1、服務組件化
每個小服務都是組件,是一個可以獨立更換和升級的單元。
2、按業務組織團隊
每一個服務都是針對特定業務的“全棧”實現,既要負責數據的持久化存儲,又要負責用戶的接口定義等各種跨專業領域的職能。按業務劃分可以有效減少服務內部修改所產生的內耗,團隊邊界可以變得更爲清晰。
3、做“產品”的態度
每個服務的維護團隊都要以做產品的方式和態度,對服務的整個生命週期負責。既要有過程又要有結果。
4、粗粒度通信協議
儘可能的輕量級通信,選擇HTTP協議的API或者RCP形式,還有在輕量級消息總線上傳遞消息,降低交互依賴成本。
5、服務獨立技術選型
各個服務組件可以針對其不同業務特點選擇不同的技術平臺。
6、服務獨立管理數據庫
每一個服務獨自管理其自有的數據庫,儘可能存儲於不同的數據庫實例。服務間進行“無事物”調用,追求數據最終一致性,建立補償機制。
7、持續交付的自動化
構建持續交付平臺來支撐整個開發實施過程,自動化測試和自動化部署。
8、服務調用容錯設計
爲了快速檢測故障源和自動恢復服務,要實現服務的監控和日誌記錄,並建立閉環的反饋機制。
9、演進式構建過程
架構師要以演進的方式進行系統的微服務化構建,將一些經常變動或有一定時間效應的內容進行微服務處理,並逐漸將原來系統按模塊進行拆分,而穩定不太變化的模塊就形成了一個核心微服務。
微服務架構
優點:
易於開發和維護
單個微服務啓動較快
局部修改容易部署
技術棧不受限
按需伸縮擴展
缺點:
運維要求較高
分佈式帶來的複雜性
接口調整成本高
重複勞動存在
設計原則:
單一職責
服務自治
輕量級通信
粒度劃分
中臺戰略思考
微服務化的後期首選要考慮到服務網的複雜性,研發團隊如何面對錯綜複雜的服務場景,要進行服務層級劃分,數據基礎服務、中間間服務、應用層服務、安全監控輔助服務等等。持續交付和批量編排要考慮容器化方案,devops思想下的k8s運用等等。微服務化進程最終都會經過“中臺”階段,逐步走必然會到,急不得。