21CTO導讀:了解微服務和SOA架構之間的真正差異,本文講解兩者區別以及開發中不同的用法。
最近,關於這兩種架構之間的差異,或者兩者是否在差異,已經有很多人在討論。
為了深入研究引發了數百個爭論的這個問題,我們首先簡要地定義SOA和微服務架構及其它的起源,之後我們將對它們進行比較,看看如何更好地區分它們。
面向服務的架構體系(SOA)
面向服務的架構是一種軟體體系架構,其中應用程式的不同組件通過網絡通信協議向其它組件提供服務。通信可以涉及簡單的數據傳遞,或者涉及彼此協調連接服務的兩個或更多個服務。這些不同的服務執行一些小功能,例如驗證付款,創建用戶帳戶或提供社交帳號登錄等。
面向服務的架構不是關於如何模塊化應用程式,而是關於如何通過集成分布式,單獨維護和部署的軟體組件來組合應用程式。它通過技術和標準實現,使組件更容易通過網絡進行通信與協作。
SOA中有兩個主要角色:服務提供者和服務使用者。軟體代理可以扮演兩種角色。消費者(Consumer)層是用戶(人,應用程式的其他組件或第三方)與SOA交互的點,提供者(Provider)層由SOA中的所有服務組成。
SOA在90年代中期得名,當時一家名為Gartner Group的公司認識到軟體架構中的這一新興趨勢,採用它並在全球範圍內推廣。通過這樣實施,人們成功地加快了這種架構模式的採用和進一步發展。使用分布式服務作為軟體架構的第一個記錄可以追溯到80年代早期。
微服務(MicroService)
從某種程度上講,微服務是面向服務架構發展的下一步。基本上,這種架構類型是開發軟體,Web或行動應用程式作為獨立服務套件的一種特殊方式 - a.k.a微服務。創建這些服務僅用於一個特定的業務功能,例如用戶管理,用戶角色,電子商務購物車,商品展示 ,搜尋引擎,社交帳號登錄等。此外,它們之間完全相互獨立,這意味著它們可以用不同的程式語言並使用不同的資料庫,集中式服務管理幾乎不存在,微服務使用輕量級HTTP,REST或Thrift API互相進行通信。
微服務這個詞本身源於2011年5月在威尼斯附近舉辦的軟體架構師研討會。他們首次使用「微服務」這一術語來描述參與者最近在探索的共同架構風格。
2012年5月,這個小組決定將「微服務」作為最合適的名稱。事實上,微軟,亞馬遜,Netflix和Facebook等主要科技公司已經使用微服務超過十年了。在提出普遍接受的名稱之前,其他人稱他們為「微網絡服務」或「細顆粒度SOA」。
是的,乍一看我們似乎在談論與SOA相同的事情。但是,我引用微軟服務領域的先驅Martin Flower的話,他說我們應該將SOA視為微服務的超集。
那麼,它們之間真正的差異在哪裡?
我們可以說兩種架構都有相似之處而不是差異,但是,最終它們是兩種不同類型的架構。首先,我將以表格的形式介紹將架構的特定的區分部分。接下來,我將詳細闡述其中的一些內容。
我們把在上表中顯示的一些內容來進一步詳細說明,為大家解釋其中之差異:
開發 - 在這兩種體系結構中,可以使用不同的程式語言和工具開發服務,從而為開發團隊帶來技術的多樣性。可以在多個團隊中組織開發,但是,在SOA架構中,每個團隊都需要了解常見的通信機制。另一方面,通過微服務,服務可以獨立於其它服務運行和部署。因此,可以更頻繁地部署新版本的微服務或獨立擴展服務。
「有界上下文」
SOA架構鼓勵共享組件,而微服務試圖通過「有界上下文」來最小化共享。有界上下文指的是將組件及其數據作為單個單元耦合,具有最小的依賴性。由於SOA依賴於多種服務來滿足業務請求,因此基於SOA構建的系統可能比微服務慢。
通信 - 在SOA中,ESB的單點故障可能成為影響整個系統的瓶頸。由於每個服務都通過ESB進行通信,如果其中一個服務速度變慢,可能會阻塞ESB請求該服務。而另一方面,微服務在容錯方面就要好得多。例如,如果一個微服務有內存故障,那麼只有那個微服務會受到影響,其他的微服務將繼續定期處理請求。
互操作性 - SOA通過其消息傳遞中間件組件促進多個異構協議的使用。而微服務試圖通過減少集成選擇的數量來簡化架構模式。因此,如果要在異構環境中使用不同協議併集成多個系統,則需要考慮SOA。如果可以通過相同的遠程訪問協議訪問所有服務,那麼微服務對開發團隊來說是更好的選擇。
大小 - 最後但並非不重要的是,SOA和微服務之間的主要區別在於大小和範圍。微服務中的前綴「微」指的是內部組件的顆粒度,這意味著它們必須比SOA要小得多。微服務中的服務組件通常只有一個目的,他們能做得很好。另一方面,在SOA中,服務通常包含更多業務功能,並且它們通常作為完整的子系統來實現。
小結
我們不能簡單地說一個架構比另一個架構好。它主要取決於你正在構建的應用程式之目的。SOA更適合需要與許多其它應用程式集成,用於大型複雜企業應用程式環境。較小的應用程式不適合SOA,因為它們不需要消息傳遞中間件組件。 另一方面,微服務更適合於較小且分區良好的基於Web的系統。 此外,如果你正在開發移動或Web應用程式,那麼微服務可以讓作為開發人員的你獲得更大的控制權。
最後,我們得出一個結論:兩個架構用於不同的目的 - 微服務和SOA是兩種不同類型的體系架構。
作者:Rade Despodovski
譯者:洛逸
來源:https://dzone.com/articles/microservices-vs-soa-is-there-any-difference-at-al