UAVStack之微服務計算平臺

iEven發表於2018-12-04

前言

微服務計算平臺,即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的相關架構及生命週期。

  • 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

相關文章