前言
微服务计算平台,即 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
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 进行协作的可能性。
心跳机制
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 其它重要功能及其实现原理将会在后续文章中依次剖析,敬请期待!
本文转载自宜信技术学院网站。
原文链接:http://college.creditease.cn/detail/193
评论