微服務篇:什麼是同步式微服務

微服務可以通過事件(本書所建議的方法)實現成異步的形式,或者實現成同步的形式(同步服務通常出現在面向服務的架構中)。同步的微服務通常採用 “請求–響應” 的方法來實現,服務間通信直接通過 API 來滿足業務需求。

同步式微服務的缺點

同步式微服務有很多問題,這使得它們難以大規模地使用。這並不是說一個公司不能用同步式微服務來獲得成功,Netflix、Lyft、Uber 和 Facebook 等公司的成功就證明了這一點。但是也有許多公司使用過時的、混亂的意大利麪式代碼和單體應用發了大財,所以不要把公司的最終成功與底層架構的質量混爲一談。市面上有許多介紹如何實現同步式微服務的圖書,可以讀讀它們以更好地理解同步方法。

例如由 Sam Newman 所著的《微服務設計》以及由 Kasun Indrasiri 和 Prabath Siriwardena 合著的 Microservices for the Enterprise。

此外,請注意,無論是點到點的 “請求–響應” 型微服務還是異步的事件驅動型微服務,嚴格來說都沒有絕對的優劣之分。在一個組織裏它們都有自己的一席之地,因爲有些任務更適合採用其中的一種模式。然而,我以及我的許多同行和同事的經驗表明,事件驅動型微服務架構提供了無與倫比的靈活性,這是同步的 “請求–響應” 型微服務所不具備的。當你繼續閱讀本書時可能會同意我的觀點,至少你會了解它們的優缺點。

以下是同步的 “請求–響應” 型微服務的幾大缺點。

點到點的耦合

同步的微服務依賴其他服務來幫助它們執行業務任務。那些服務同樣有自己的依賴服務,而這些依賴服務又有自己的依賴服務,以此類推。這會導致過度的扇出,且難以跟蹤哪些服務要爲實現業務邏輯的特定部分負責。服務之間的連接數量多得驚人,這會進一步增強現有的溝通結構並使得未來的變更更加困難。

有依賴的可伸縮性

你自身服務的擴容能力依賴於所有依賴服務的擴容能力,並且直接與通信的扇出程度有關。實現技術可能是可伸縮性的瓶頸。高度變化的負載和激增的請求模式會使情況更加複雜,所有這些都需要在整個體系架構內同步處理。

服務故障的處理

如果一個依賴服務關閉,則必須做出如何處理這個異常的決策。生態系統中的微服務越多,決定如何處理停機、何時重試、何時失敗以及何時恢復以確保數據一致性就越困難。

API 版本和依賴管理

多個 API 定義和服務版本通常需要同時存在。強制讓客戶端升級到最新的 API 並不總是可行或可取的。這會增加跨多個服務協調 API 更改請求的複雜性,特別是當它們伴隨着對底層數據結構的更改時。

數據訪問耦合於實現

同步的微服務在訪問外部數據時會遇到所有跟傳統的服務相同的問題。雖然有減少訪問外部數據需求的服務設計策略,但微服務通常還是需要訪問來自其他服務的通用數據。這就把數據訪問和可伸縮性的責任重新放在了實現溝通結構上。

分佈式的單體應用

服務可以被組合成一個分佈式的單體應用,在它們之間進行許多相互交織的調用。這種情況通常出現在團隊分解一個單體應用,並決定使用同步的點到點調用來模擬這個單體應用內部的邊界時。點對點的服務可以很容易地模糊界限上下文的邊界,因爲對遠程系統的函數調用可以一行一行地插入現有單體式代碼。

測試

集成測試可能很困難,因爲每個服務都需要完全可操作的依賴項,而這些依賴項又需要自己的依賴項。在單元測試中將它們截取出來可能是可行的,但並不足以滿足更廣泛的測試需求。

同步式微服務的優點

同步式微服務有許多不可否認的優點。一些數據訪問模式很適合直接的 “請求–響應” 耦合,比如驗證用戶身份和 AB 測試中的上報。與外部第三方解決方案的集成大多數時候使用同步機制,並且通常使用 HTTP 以提供一種靈活的、與語言無關的通信機制。

跟蹤跨多個系統的操作在同步環境下會比異步環境下更簡單。詳細的日誌可以顯示在哪些系統上調用了哪些函數,從而實現業務操作的高度可調試性和可見性。

承載 Web 和移動體驗的服務通常由 “請求–響應” 設計提供支持,無論它們是同步還是異步性質。客戶會收到完全滿足了其需求的及時響應。經驗因素也是非常重要的,尤其是當今市場上的許多開發者往往對同步、單體類型的編碼更有經驗。總的來說,這使得獲取熟悉同步系統的人才比獲取熟悉異步事件驅動開發的人才更容易。

一個公司的架構很少完全基於事件驅動型微服務。混合式架構肯定會成爲常態,同步和異步的解決方案會根據問題空間的需要進行並行部署。

小結

溝通結構指導着在組織的整個生命週期中如何創建和管理軟件。數據溝通結構通常是開發不完全且臨時的,但是,如事件驅動系統所體現的那樣,引入一組持久的、易於訪問的領域事件可以使得更小的、專門構建的實現得以應用。

來源:

https://www.toutiao.com/a7057055976922333735/?log_from=5265a47f57bc4_1644389884057

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Fi8ezsHnDha49ha7KiXNDA