1. 程式人生 > >微信中兩大典型微服務案例

微信中兩大典型微服務案例

網際網路技術一直在快速演進當中,同時移動網際網路與雲時代來臨,微服務架構由此應映而生。

如下圖,是微服務在我國的百度搜索指數:

從圖中可以看出,自 2013 前後微服務開始逐漸被大家關注,隨時間推移搜尋的人也越來越多,直至 2016 年爆發。

微服務架構的快速發展並廣泛流行,和以下因素息息相關:

  • 網際網路技術架構飛速演進,特別是底層硬體及晶片技術快速發展,後端伺服器的能力越來越強大。多數情況下,單個業務已很難消耗完一整臺伺服器的資源或處理能力。

  • 移動網際網路深度融合與應用,瘦客戶端興起,使得雲端能力與承載變得更加重要。

  • 容器技術得到廣泛認可與應用,輕量級協議、程式碼管理、新整合方法與工具等技術也越來越成熟。

近兩年,微服務這個術語漸成熱門詞彙,但它不是一個全新架構,更不是一個包治百病的架構。那麼,微服務架構與單體式架構相比優勢體現在哪?這些優勢又給開發模式、運維帶來哪些痛點?

 

微服務架構的優勢及痛點


微服務和單點服務的區別是什麼呢?比喻來講,單點服務是把所有的東西放在一個大盒子裡,這個大盒子裡什麼都有。

微服務更像是車箱,每個箱子裡包含特定的功能模組和物品,所有模組可以很靈活地拆分出來。

換言之,在單點服務中,所有的部件都在一個巨大的軟體包中。在微服務架構下,有很多獨立存在的小服務,通過 API 介面連線成龐大的系統。

相比過往的單體式應用架構,微服務架構優勢明顯,如:

  • 單個微服務更易理解、方便開發與維護。

  • 應用解耦,對整體應用交付而言,開發迭代更敏捷。

  • 技術選擇更加自由,微服務不再需要限定統一的技術實現。

  • 微服務獨立部署,應用更穩定,同時擴充套件更加容易與快速。

  • ……

同時,微服務架構的特點與優勢在開發模式、運維等方面也帶來很多痛點,如:

  • 微服務眾多,容器編排與部署管理等會變得異常複雜。

  • 業務的容量管理變得更加困難,資源利用效率難以提升。

  • 監控的顆粒度增多,關聯關係更加複雜。

  • 微服務故障恢復、排程需要更精細化。

  • ……

 

微信中兩大典型微服務案例


熊普江老師表示,微信一直提倡敏捷開發與“大系統小做”,這其實就是微服務的理念與架構實現。

由於微信誕生於 2011 年,當時微服務架構的概念還沒有普及,也就是說,微信的微服務架構在業界實施並落地相對較早。

微信中微服務案例有很多,這裡主要分享服務佈局、過載保護兩大典型案例。

01 服務佈局

微信的服務佈局採用的是多地自治、園區互備架構。如下,是微信的服務佈局示意圖:

  • 城市之間的資料是相對獨立的。除了少數賬號全球同步,大部分業務都希望做成電子郵件式的服務,各自有自身的環境在跑,之間使用類似於電子郵件的通訊。

  • 城市間的後備則使用公網的 udp 通道。在城市內,使用三園區架構,每個園區是一套獨立的系統,從接入、邏輯、儲存每一層完全獨立,可互相為對方提供備份。

  • 多園區形成整體服務能力。在園區內,由多機組成 set,互為容錯,包含網路與電力也是獨立的。這樣的服務佈局,不僅是微服務架構,而且考慮了容災能力。

 

02 過載保護


過載保護的微服務架構,目的是確保核心服務可用。確保核心服務的可用性有如下三點:

  • 考慮問題應該是服務要有輕重分離,即一個服務裡不能既有重的操作,又有輕的操作。

  • 佇列控制,要了解一個請求在佇列中等待的平均時間,從而決定是否要啟動拒絕。

  • 組合命令式,由於微服務的呼叫鏈及層次可能會增多,後端服務也可能是多個。

假定後端有兩個服務(A 服務與 B 服務),而前端呼叫需要依賴於 A、B 服務的組合結果,那麼單個 A 或者單個 B 的輕微過載,就可能導致前端服務不可用,這是很嚴重的問題。這種情況下,就需要一個反饋機制。

如下,是過載保護的微服務架構示意圖:

如上圖所示,整個系統基於反饋,把整個拒絕的資訊全程傳遞。最右邊是幾個典型的服務,從一個 CGI 呼叫一個後臺服務,再呼叫另一個後臺服務,系統會在 CGI 層面就把它的重要程度往下傳。

回到剛才前端呼叫 A、B 服務的例子,使用這樣的一種重要程度傳遞,就可以直接拒絕那些相同使用者的 20% 的請求,有效地解決單個服務輕微過載的問題。