《從零開始學架構》筆記——第三部分:可擴展架構模式
- 2019 年 10 月 6 日
- 筆記
第十章 分層架構(面向流程拆分)
- 保證各層的差異足夠清晰,邊界足夠明顯
- 隔離關注點
- 層層傳遞
例如:MVC:分離數據處理,視圖顯示,業務邏輯
第十一章 SOA架構(面向服務拆分)
背景:
企業內部的IT系統重複建設且效率低下。
- 企業各部門都有獨立的IT系統,人力資源部門,財務部門,銷售部門....當一個員工離職後,需要很多部門同時註銷資訊。(冗餘)
- 業務發展,各部門合作的複雜度升高。
SOA思想
- 服務 所有業務功能都是一項服務,對外提供開放介面。例如上述各部門的人員管理就可以單獨劃分出一個服務,實現復用。【服務粒度的劃分是關鍵】
- ESB企業服務匯流排 屏蔽系統對外提供介面的方式,實現服務連接。
- 松耦合 減少服務的依賴和影響。
ESB問題和被背景
ESB功能強大,支援HTTP,RPC,JMS等多種協議和轉換格式,但同時帶來了大量資源消耗。
ESB的背景是在各種異構系統存在多年的情況下產生的,實屬無奈之舉。
第十四章 微服務
微服務和SOA的關係
1996 年,第一個SOA報告被發布
2014年, Martin Flower一篇關於微服務的學術性文章將微服務推向了高潮
從歷史的角度看,微服務和SOA是有一定先後次序的,兩者雖不相同,但也許有些淵源。
- 服務粒度 微服務比SOA更細
- 服務通訊 SOA採用ESB匯流排,而微服務採用HTTP輕量級通訊
- 服務交付 SOA慢,而微服務倡導持續交付,速度快
- 應用場景 SOA的ESB是針對已有大量異構系統的企業級設計的;而微服務更適合互聯網公司。
SOA和微服務並不存在優劣之分,兩者應用的場景應對的問題完全不一樣,就像你不能用一顆糖的好壞衡量一塊磚的價值。
微服務的坑
- 服務劃分過細,服務間關係複雜【單個系統複雜度下降,整個系統的複雜度上升】
- 服務數量太多,團隊效率下降
- 調用鏈過長導致的性能下降和排查問題困難
- 自動化部署複雜
微服務最佳實踐
- 服務粒度拆分(推薦三人開發一個微服務)
- 基於業務邏輯拆分
- 基於可擴展拆分(拆分出穩定,變動不大的微服務)
- 基於可靠性拆分(將可靠性要求高的核心業務拆分出來)
- 基於性能拆分(將性能要求高的拆分出來)
- 基礎設施
- 自動化測試,部署
- 配置中心
- API網關
- 服務註冊
- 服務發現
- 服務路由
- 服務容錯
- 服務監控
- 服務跟蹤
- 服務安全