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
相关文章
相关标签/搜索