SOA
SOA(Service-Oriented Architecture,面向服務的架構)是一種高層級的架構設計理念,可通過在網絡上使用基於通用通信語言的服務接口,讓軟件組件可重復使用。
那么什么是服務呢?
所有業務功能都可以定義為一項服務,服務就意味着要對外提供開放的能力,當其他系統需要使用這項功能時,無須定制化開發。
服務可大可小,可簡單也可復雜。例如,商品管理可以是一項服務,包括商品基本信息管理、供應商管理、入庫管理等功能;而商品基本信息管理也可以作為一項獨立的服務,供應商管理也可以作為一項獨立的服務。到底是划分為粗粒度的服務,還是划分為細粒度的服務,需要根據企業的實際情況進行判斷。
SOA 集成了獨立部署和維護的服務,並允許它們相互通信和協同工作,以構建一個跨不同系統的軟件應用。
那么它們是如何通信和協同工作的呢?
ESB(Enterprise Service Bus,企業服務總線)把企業中各個不同的服務連接在一起。就像計算機總線一樣,把計算機的各個不同的設備連接在一起。
因為不同的服務是使用不同的技術實現的,各個獨立的服務是異構的,如果沒有統一的標准,則各個異構系統對外提供的接口是各式各樣的。SOA 使用 ESB 來屏蔽異構系統對外提供各種不同的接口方式,以此來達到服務間高效的互聯互通。ESB通過使用標准網絡協議(如 SOAP、XML、JSON、MQ )來開放服務以發送請求或訪問數據,實現與各種系統間的協議轉換、數據轉換、透明的動態路由等功能,消除了開發人員必須從頭開始進行集成的困擾。
采用 SOA 架構后,各個服務是相互獨立運行的,甚至都不清楚某個服務到底有多少對其他服務的依賴,減少各個服務間的依賴和互相影響,做到了松耦合。
如果做不到松耦合,某個服務一升級,依賴它的其他服務全部故障,這樣肯定是無法滿足業務需求的。
微服務
微服務(Microservices)是一種軟件架構風格,它是以專注於單一責任與功能的小型功能區塊 (Small Building Blocks) 為基礎,利用模塊化的方式組合出復雜的大型應用程序,各功能區塊使用與語言無關 (Language-Independent/Language agnostic)的API集相互通信。
微服務的起源是由 Peter Rodgers 博士於 2005 年度雲計算博覽會提出的微 Web 服務(Micro-Web-Service)開始,Juval Löwy 則是與他有類似的前導想法,將類別變成細粒服務(granular services),以作為微軟下一階段的軟件架構,其核心想法是讓服務是由類似 Unix 管道的訪問方式使用,而且復雜的服務背后是使用簡單 URI 來開放接口,任何服務,任何細粒都能被開放(exposed)。這個設計在 HP 的實驗室被實現,具有改變復雜軟件系統的強大力量。
2014年,Martin Fowler 與 James Lewis 共同提出了微服務的概念,定義了微服務是由以單一應用程序構成的小服務,自己擁有自己的進程與輕量化處理,服務依業務功能設計,以全自動的方式部署,與其他服務使用HTTP API通信。同時服務會使用最小的規模的集中管理 (例如 Docker) 能力,服務可以用不同的編程語言與數據庫等組件實現。
SOA與微服務的對比
服務粒度
SOA 的服務粒度要粗一些,而微服務的服務粒度要細一些。例如,對一個電商企業來說,商品管理系統是一個 SOA 架構中的服務;而如果采用微服務架構,則商品管理系統會被拆分為更多的服務,比如商品基本信息管理、供應商管理、入庫管理等更多服務。
服務通信
SOA 采用了 ESB 作為服務間通信的關鍵組件,負責服務定義、服務路由、消息轉換、消息傳遞,一般情況下都是重量級的實現。微服務則使用統一的協議和格式,例如:HTTP RESTful 協議、TCP RPC 協議,不需要 ESB 這樣的重量級實現。
服務交付
SOA 對服務的交付沒有特殊要求,因為 SOA 更多考慮的是兼容已有的系統;微服務的架構理念則要求快速交付,相應地要求采取自動化測試、持續集成、自動化部署、自動化運維等的最佳實踐。
應用場景
SOA 更加適合於龐大、復雜、異構的企業級系統。這類系統的典型特征就是很多系統已經發展多年,各個服務具有異構性,比如:采用不同的企業級技術、有的是內部開發的、有的是外部購買的,無法完全推倒重來或者進行大規模的優化和重構。因為成本和影響太大,只能采用兼容的方式進行處理,而承擔兼容任務的就是 ESB。
微服務更加適合於快速、輕量級、基於 Web 的互聯網系統,這類系統業務變化快,需要快速嘗試、快速交付;同時基本都是基於 Web,雖然開發技術可能差異很大(例如,Java、.NET、PHP 等),但對外接口基本都是提供 HTTP RESTful 風格的接口,無須考慮在接口層進行類似 SOA 的 ESB 那樣的處理。
還有一些不同,為了方便理解記憶,匯總成如下表格:
SOA | 微服務 | |
---|---|---|
服務粒度 | 粗粒度 | 細粒度 |
業務划分方式 | 水平多層 | 縱向業務划分 |
部署方式 | 整體部署 | 獨立部署 |
通信方式 | 使用重量級通信方式,ESB充當服務之間通信的角色 | 使用輕量級通信方式,如HTTP RESTful |
服務交付 | 交付慢 | 交付塊 |
應用場景 | 龐大、復雜、異構的企業級系統 | 快速、輕量級、基於 Web 的互聯網系統 |
竟然已經看到這里了,你我定是有緣人,留下你的點贊和關注,他日必成大器。
微信公眾號:萬貓學社
微信掃描二維碼
關注后回復「電子書」
獲取12本Java必讀技術書籍
