基於Predix平臺開發微服務應用需要服務發現框架麼?

基於Predix平臺開發微服務應用需要服務發現框架麼?

微服務架構能將單一、龐大的應用拆分爲一套小且互相關聯的服務,從而解決大型應用程序複雜性的問題,因此備受開發人員的青睞。越來越多的開發團隊在Predix平臺開發基於微服務架構的分佈式應用。同時,對於基於雲端的、現代化的微服務應用而言,微服務應用間通過輕量級的HTTP API進行溝通卻是一大難題。因爲在微服務場景下,所有服務實例的網絡位置,包括IP和端口都是動態分配的。由於擴容、失敗和升級,服務實例會經常動態改變,微服務的調用方必須使用更加複雜的服務發現機制。

因此,不少開發人員認爲基於Predix平臺開發的微服務應用也需要使用服務發現框架。

爲了解答這個問題,我們先來了解目前典型的服務發現模型:

  1. 客戶端服務發現模型
  2. 服務器端服務發現模型

客戶端服務發現模型

客戶端服務發現模型是指,當發起一個請求時,客戶端直接從服務註冊表中獲取相應微服務實例的網絡位置。如果有多個微服務實例提供相同的服務能力,客戶端則根據自身的負載均衡算法決定將請求發送到哪個具體的微服務實例。例如,爲保證高可用性,系統提供多個用戶認證微服務實例,用戶登錄客戶端自行決定將登錄請求發送到某一個具體的微服務實例。

服務器端服務發現模型

服務器端服務發現模型是指,當發起一個請求時,客戶端通過負載均衡器向相應的微服務實例提出請求。負載均衡器根據預定義的負載均衡算法從服務註冊表中獲取相應微服務實例的網絡位置,再將請求轉發過去。和客戶端服務發現模型不同的是,客戶端已經不用關心服務註冊表的地址、負載均衡的算法和具體的微服務實例的網絡位置,只需要將請求發送給負載均衡器,其他事情都由負載均衡器去完成。

服務註冊表

從上面兩種服務發現模型我們可以瞭解到,服務註冊表是服務發現的核心組件。它存儲了所有微服務實例的網絡位置,而且需要根據微服務實例的狀態實時更新。

服務發現的三大核心功能

因此,爲了能夠成功定位一個具體的微服務實例,一個服務發現框架需要完成如下三個的核心功能:

  1. 服務註冊:將微服務實例的網絡地址保存到服務註冊表
  2. 服務發現:允許從服務註冊表中讀取相應微服務實例所註冊的網絡地址
  3. 服務狀態更新:實時更新微服務實例的狀態到服務註冊表

現在我們瞭解了服務發現框架的三大核心功能,再來審視Predix平臺有沒有相應的組件提供相應的能力,答案就是Router

Router簡介

Cloud Foundry核心架構如下圖所示,


從架構圖中,我們可以瞭解到,

  1. Router是Predix平臺所有流量的入口,包括了發送給Cloud Controller的控制流和發送給託管在Predix平臺應用程序的數據流。
  2. Router定期會從應用程序的運行平臺查詢每個應用程序實例運行在哪個主機的哪個容器環境中。Router通過這些信息來構建自己的路由表,記錄每個應用程序實例的網絡地址,完成服務註冊的功能。
  3. 當Router收到訪問應用程序的請求時,它會根據自身路由表的記錄,採用輪轉算法或者最少連接算法,將請求轉發到具體的應用程序實例,完成服務器端服務發現功能。
  4. Router同時還監聽消息管道推送來的消息,實時更新應用程序實例的網絡地址,完成服務狀態更新的功能。

使用基於Router的服務發現

Router已經完美的實現了服務發現的核心功能,因此使用基於Router的服務發現服務是非常方便,甚至我們都對服務發現沒有特別的感知。例如,我們開發一個微服務架構的分佈式應用由多個微服務應用程序構成,並且它們之間有如下的調用依賴關係。


我們只需要在微服務應用程序F(以下簡稱,微服務F)的配置文件中指定微服務B微服務E的接入點信息即可。

// microServiceF.conf
microServiceB = https://microServiceB/api/
microServiceE = wss://microServiceE/msg/

微服務F請求微服務B或者微服務E時,Router就會通過自身的路由表信息,將請求轉發到微服務B或E的具體實例,完成服務發現的功能。而當微服務B或E進行橫向擴容或者縮容時,Router也會更新自身的路由信息,使得微服務F始終能通過Router將請求轉發到合適的微服務實例,而不必關係具體微服務實例的網絡地址。

Health Manager檢測應用程序狀態

Predix平臺中的Health Manager組件能定期檢測平臺中應用程序實例的狀態,如果發現失敗的應用程序實例,則會發送消息到router.unregister主題。Router就會根據推送來的消息,實時更新應用程序實例的網絡地址,完成服務狀態更新。

因此,通過Predix平臺內置組件的相互配合,Router完全能夠滿足Predix平臺上的服務發現功能,使得開發人員能更加專注在業務相關的微服務應用的開發,而不需要關係與業務無關的服務發現功能,更高效的完成自身業務程序的開發

小結

通過本文我們瞭解到,

  1. 服務發現框架的三大核心能力爲,服務註冊,服務發現和服務狀態更新。
  2. Router是Predix平臺所有流量的入口。
  3. 通過Predix平臺內置組件的相互配合,Router完全能夠滿足Predix平臺上的服務發現功能,使得開發人員更高效的完成自身業務程序的開發。

作者:謝品,上海創新坊首席架構師,GE數字集團

專注於工業互聯網,雲計算,大數據,高性能分佈式存儲領域,對Cloud Foundry和傳統應用向雲端,特別是向Predix遷移有豐富的經驗,曾供職於VMware,EMC,Autodesk等知名軟件公司雲計算部門。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章