UAVStack之微服務計算平臺

前言git

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

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的相關架構及生命週期。

  • Component

上面咱們已經介紹Component是可完成某一單一處理邏輯的單元,這就意味着從特性上來看Component必然隸屬於某一個Feature,而須要完成某些處理邏輯,又必須可以有足夠的支持和協調響應的能力,因此Component能夠得到來自MSCP的全局能力。MSCP內自帶的組件根據基本功能被劃分爲了多種組件類別:直接繼承AbstractComponent的組件稱爲普通組件;而功能類派生自AbstractComponent的被稱爲功能組件,大體有啓動組件類(SystemStarter)、管理組件類(SystemTimerWorkMgr等)、Feature生命週期控制類(AgentFeatureComponent等)、業務處理類(AbstractHandleWorkComponent等)、通訊類(AbstractHttpServiceComponent等)、流程類(ActionEngine等)、任務處理類(AbstractTimerWork等)、特種功能類(ResourceLimitationAuditor等)。

  • Feature

1
Feature具備全局範圍內惟一的名稱,至少包含一個生命週期控制類的組件,即AgentFeatureComponent。Feature經過SystemStarter啓動器開始,經過installFeature方法加載安裝,在start方法中初始化各類Component並註冊到ConfigurationManager上。ConfigurationManager管理了配置和各實例的各類屬性,所以既能夠控制Feature和Component響應一組事件,好比配置變動onConfigUpdate,也能夠得到來自MSCP的全局能力,同時因爲各Feature的組件是由該Feature的單獨的ClassLoader進行構造加載,從而也實現了隔離,並有了熱啓停的基礎。

  • Resource

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

  • Node
    2

若干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進行協做的可能性。

  • 心跳機制

2
MSCP具備本身的心跳機制,該心跳主要有兩個做用:

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

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

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

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

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

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

官方網站

開源地址

UAVStack已在Github上開放源碼,並提供了安裝部署、架構說明和用戶指南等雙語文檔,歡迎訪問-給星-拉取~~~

掃一掃下方二維碼,關注一個不會讓你失望的公衆號

5
相關文章
相關標籤/搜索