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