面向服務架構(SOA)已經存在很多年了,這是一種勇于設計軟件的偉大原則。在 SOA 中,所有組件都是獨立自主的,并能為其他組件提供服務。要替換掉系統中的某些部分而不對整個系統造成較大的影響,本是個難題,然而只要維護好系統各模塊之間的低耦合,該難題便能迎刃而解。大體上,SOA 與微服務架構是非常相像的。微服務是細粒度的 SOA 組件。換句話說,某單個 SOA 組件可以被拆分成多個微服務,而這些微服務通過分工協作,可以提供與原 SOA 組件相同級別的功能,如下圖所示
微服務是細粒度的 SOA 組件,它們是關注點更窄的輕量級服務。微服務與 SOA 之間的另一個不同之處是服務互聯和編寫服務時所使用的技術。J2EE 是一個遵循企業級標準的用于編寫 SOA 架構的技術棧。java 命名與目錄接口(JNDI)、企業級 Javabean(EJB)以及企業服務總線(ESB)都是 SOA 應用賴以構建和維護的生態土壤。即便 ESB 是標準,在 2005 年之后畢業的工程師卻鮮有聽說過 ESB 的,至于用過 ESB 的那就更少了。而當代的,例如 Rubyon Rails 這樣的框架甚至不會去考慮如此復雜的軟件部件。
而另一方面,微服務推崇執行的標準(例如 HTTP)卻是人們廣泛了解并共同使用的。我們可以通過選擇合適的語言或工具來構建某個組件微服務。SOA 與微服務還有一個更大的區別:領域模型。在基于微服務的軟件中,每個微服務應該在本地存儲自身管理的數據,并在領域模型分別隔離到單個服務中。而在面向 SOA 的軟件中,數據往往存儲在單個大型的數據庫中,服務之間會共享領域模型。
二、面向服務的架構 SOA。
面向服務的架構是一種軟件體系結構,應用程序的不同組件通過網絡上的通信協議向其他組件提供服務。通信可以是簡單的數據傳遞,也可以是兩個或者多個服務彼此協調連接。這些獨特的服務只是一些小功能,例如驗證付款、創建用戶賬戶或者提供社交登錄等。
面向服務的架構不太關心如何應用程序進行模塊化構建,更多的是關于如何通過分布式、單獨維護和部署的軟件組件的集成來組成應用程序。這些通過技術和標準來實現,通過技術和標準使得組件能夠更容易地通過網絡進行通信和協作。
SOA 架構中有兩個主要角色:服務提供者(Provider)和服務使用者(Consumer)。而軟件代理則可以扮演這兩個角色。該 consumer 層是用戶與 SOA 交互的點,和 provider 層則由 SOA 架構內的所有服務所組成。
SOA 首先在 90 年代中期得名,當時一家名為 Gartner Group 的公司認識到了這個軟件架構的新趨勢,并在全球推廣。通過這樣做,他們設法大大加快了這種架構模式的采用和進一步發展。然而,使用分布式服務作為軟件體系結構的最早記錄可追溯到二十世紀 80 年代初。
三、微服務架構。
微服務架構在某種程度上是面向服務的架構 SOA 繼續發展的產物。基本上,這種架構類型開發軟件,網絡和移動應用程序作為獨立服務套件(又稱微服務)的一種特殊方式。這些服務的創建僅限于一個特定的業務功能,如用戶管理、用戶角色、電子商務、搜索引擎、社交媒體登錄等。此外,它們是完全獨立的,也就是說它們可以寫入不同的編程語言并使用不同的數據庫。集中式服務管理幾乎不存在,微服務使用輕量級 HTTP、REST 或Thrift API 進行通信。乍一看,微服務架構似乎談論的是與 SOA 相同的事情。不過,如果引用微軟服務領域的先驅 Martin Flower 的話,他曾經說過,“我們應該把 SOA 看作微服務的超集”。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.