UAVStack之微服务计算平台

周新宇 2018-12-05 浏览量:887

前言

微服务计算平台,即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.jpg

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


若干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.jpg

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其它重要功能及其实现原理将会在后续文章中依次剖析,敬请期待!


◆ ◆ ◆  ◆ 

发现文章有错误、对内容有疑问,都可以通过关注宜信技术学院微信公众号(CE_TECH),在后台留言给我们。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!

WX20180910-152158@2x.png

发现文章有错误、对内容有疑问,都可以通过关注宜信技术学院微信公众号(CE_TECH),在后台留言给我们。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!
分享硬核IT 专注金融