關於SOA和微服務的關係和區別,大概分爲下面幾個典型的觀點
一、微服務是SOA的實現方式
- 觀點認爲SOA是一種架構理念,而微服務是SOA理念的一種具體實現方法
- 例如,「微服務就是使用HTTP RESTful協議來實現ESB的SOA」 「使用SOA來構建單個系統就是微服務」和「微服務就是更細粒度的SOA」
二、微服務是去掉ESB後的SOA
- 觀點認爲傳統SOA架構最廣爲人詬病的就是龐大、複雜、低效的ESB,所以將ESB去掉,改成輕量級的HTTP實現,就是微服務
三、微服務是一種和SOA類似但本質上不一樣的架構理念
- 類似點在於二者都關注「服務」,都是經過服務的拆分來解決可擴展性問題
- 本質上不一樣的地方在於幾個核心理念的差別:是否有ESB、服務的粒度、架構設計的目標
SOA和微服務的對比
一、服務粒度
- SOA的服務粒度要粗一些,而微服務要細一些
- 例如,對一個大型企業來講,「員工管理系統」就是一個SOA架構中的服務;而若是採用微服務架構,則「員工管理系統」會被拆分爲更多的服務,好比「員工信息管理」「員工考勤管理」「員工假期管理」和「員工福利管理」等更多服務
二、服務通訊
- SOA採用了ESB做爲服務間通訊的關鍵組件,負責服務定義、服務路由、消息轉換、消息傳遞,整體上是重量級的實現;微服務推薦使用統一的協議和格式,例如,RESTful協議、RPC協議,無須ESB這樣的重量級實現
三、服務交付
- SOA對服務的交付並無特殊要求,由於SOA更多考慮的是兼容已有的系統;微服務的架構理念要求「快速交付」,相應地要求採起自動化測試、持續集成、自 動化部署等敏捷開發相關的最佳實踐
四、應用場景
- SOA更加適合於龐大、負責、異構的企業級系統,這類系統都發展多年,採用不一樣的企業級技術,有的是內部開發的,有的是外部購買的,沒法徹底推倒重來 或者進行大規模的優化和重構,因爲成本和影響太大,只能採用兼容的方式進行處理,而承擔兼容任務的就是ESB
- 微服務更加適合於快速、輕量級、基於Web的互聯網系統,這類系統業務變化快,須要快速嘗試、快速交付;雖然開發技術可能差別很大(Java、C++、.NET等),但對外接口基本都是提供HTTP RESTful風格的接口,無須考慮在接口層進行相似SOA的ESB處理
SOA和微服務對好比下:
微服務的陷阱
一、服務劃分過細,服務間關係複雜
二、服務數量太多,團隊效率急劇降低
三、調用鏈太長,性能降低
四、調用鏈太長,問題定位困難
五、沒有自動化支撐,沒法快速交付
六、沒有服務治理,微服務數量多了後管理混亂
注:有興趣瞭解極客時間專欄的同窗,能夠查看極客時間專欄—可提供返現服務架構