UAVStack之微服務計算平臺

一、前言

微服務計算平臺,即MicroService Computing Platform,簡稱MSCP,應用微智能思想提供了一套基於微服務架構的計算平臺。

UAV系列軟件中監控代理程序(Monitor Agent)和監控管理服務(Health Manager)都是基於MSCP構建的。

MSCP能夠:

  • 提供一系列特性來簡化計算任務的開發工作,包括提供通信、工作流、定時任務(多線程、異步等)、IO處理、資源限制器等組件;
  • 提供以抽象組件爲基礎的微服務計算編程框架和運行時;
  • 提供包含服務註冊與發現、負載均衡、自動切換/重試等的服務化支持;
  • 提供以組件編程構建業務功能的能力和單binary多配置實現差異化運行的部署方式以及組件圖譜。

MSCP可依據在其中流轉的共識數據實現多個運行實例的協作和跨實例多個能力的協作。

二、術語定義

在開始介紹MSCP之前,先簡要介紹一下MSCP相關術語。

  • Component(組件):MSCP中的最小可編程和運行時單位,可完成某一單一處理邏輯,根類是AbstractComponent。
  • Feature(能力):MSCP運行時的最小生命週期控制單位,由若干MSCP組件和第三方組件構成,並完成某種特定業務功能,具有全局範圍內唯一的名稱,可熱啓停。
  • Resource(資源):MSCP運行時的全局資源共享單位,由若干MSCP組件和第三方組件構成,爲Feature提供公共資源實例,具有全局範圍內唯一名稱,生命週期與JVM相同。
  • Node(計算節點):MSCP運行時的資源控制單位,由若干Feature構成,資源佔用就是一個進程,具有全局範圍內唯一Node ID。

三、架構

爲了理解方便,我們從小到大去講解MSCP的相關架構及生命週期。

3.1 Component

上面我們已經介紹Component是可完成某一單一處理邏輯的單元,這就意味着從特性上來看Component必然隸屬於某一個Feature,而需要完成某些處理邏輯,又必須能夠有足夠的支持和協調響應的能力,所以Component可以獲得來自MSCP的全局能力。

MSCP內自帶的組件根據基本功能被劃分爲了多種組件類別:

  • 直接繼承AbstractComponent的組件稱爲普通組件;
  • 而功能類派生自AbstractComponent的被稱爲功能組件,大致有啓動組件類(SystemStarter)、管理組件類(SystemTimerWorkMgr等)、Feature生命週期控制類(AgentFeatureComponent等)、業務處理類(AbstractHandleWorkComponent等)、通信類(AbstractHttpServiceComponent等)、流程類(ActionEngine等)、任務處理類(AbstractTimerWork等)、特種功能類(ResourceLimitationAuditor等)。

2)Feature

Feature具有全局範圍內唯一的名稱,至少包含一個生命週期控制類的組件,即AgentFeatureComponent。Feature通過SystemStarter啓動器開始,通過installFeature方法加載安裝,在start方法中初始化各種Component並註冊到ConfigurationManager上。

ConfigurationManager管理了配置和各實例的各種屬性,因此既可以控制Feature和Component響應一組事件,比如配置變更onConfigUpdate,也可以獲得來自MSCP的全局能力,同時由於各Feature的組件是由該Feature的單獨的ClassLoader進行構造加載,從而也實現了隔離,並有了熱啓停的基礎。

3)Resource

Resource是MSCP運行時的全局共享單位,所以Resource的類可被Feature直接引用,但Resource中的組件需要通過ConfigurationManager來獲取。在生命週期控制上不同於Feature的地方在於,Resource只有一個生命週期控制類的組件,即AgentFeatureComponent。

4)Node

若干Feature組成一個Node,Resource是Node的可選項。Node具有全局範圍內唯一ID,只要NodeID不變,無論進程幾次重啓,就是同一個Node。Node內Feature之間Component的組件引用以Feature名和組件名的形式通過getComponent方法調用,而各Components間的數據流轉則是通過Feature的AgentFeatureComponent組件的exchange方法進行數據交換。Resource也類似,如果需要獲取類似消息隊列生產者這樣的Resource中的組件,則通過AgentResourceComponent的getComponent獲取對應組件,並用getResource方法得到對應Resource。

由於MSCP是Node、Feature、Component三級的形式,並可以進行單binary多配置的差異化部署方式,這就意味着有了多個實例或跨實例多個Feature進行協作的可能性。

5)心跳機制

MSCP具有自己的心跳機制,該心跳主要有兩個作用:

  • 實現MSCP自己的服務註冊與發現。具有Feature hbclientagent能力的Node收集Feature以及通信組件提供的服務信息,並由http請求的方式遞交給具有Feature hbserveragent能力的Node。而http invoker通過心跳查詢服務獲取可用服務信息,並可通過指定的服務名進行調用。
  • 收集全局Node元數據信息和狀態信息。其他Feature可以通過心跳查詢服務獲取任意Node節點的元數據信息和狀態信息。

對於MSCP來說,Node是計算的基本單位,也是信息調度的基本單位,而Feature則是Node內部的計算能力,在整個MSCP計算網絡中,心跳服務攜帶的數據一般被稱爲共識數據,包括Node所在Host主機的IP,具備哪些Feature的能力,對外能夠提供哪些服務,以及服務的元數據信息。基於這些信息MSCP能夠實現基本的動態編排能力:

  • 通過任務調度服務可以提交一組任務,包括需要什麼數據源,需要哪些能力、任務內部流轉的數據結構、執行流程、處理策略、終止策略等等
  • 具有感知全網Node能力的節點根據提交上來的任務以及收集到的全網Node狀態信息、服務信息去決定最終的執行流程和使用哪些Node的哪些能力去完成。
  • 任務的每一步執行結果都會通過共識信息反饋出來,通過執行結果可以調整下一步執行策略。

另一方面,在這個基礎之上,MSCP也可以進行服務編排:

  • 調用方可以通過服務發現和共識數據得到服務狀態、Node所在Host的資源消耗、服務質量(最近的響應時間、QPS等),獲得最佳的服務節點。
  • 當某些服務節點資源消耗有限時,閒餘資源可被其他服務節點複用。當某些服務節點資源緊張時,可降低調用頻率或者申請新資源以供使用(與虛擬化技術配合)。

本文的主要目的是讓讀者瞭解UAV MSCP代碼結構、機制原理和相關實現。UAV其它重要功能及其實現原理將會在後續文章中依次剖析,敬請期待!

作者:周新宇

來源:宜信技術學院

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