UAVStack之微服务计算平台

2020 年 2 月 12 日

UAVStack之微服务计算平台

前言


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


1544006884439047334.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 进行协作的可能性。


  • 心跳机制


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


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/193


2020 年 2 月 12 日 15:2860

评论

发布
暂无评论
发现更多内容

国产数据库的经济民族

郭华

数据库 商业

PySpark RDD 基础运算和操作总结

是老郭啊

spark pyspark RDD

区块链之物流产业上链解决痛点

CECBC区块链专委会

区块链 供应链

芯片行业的主要生意模式

老壳有点爽

芯片 集成电路 IC

物理实现(Physical Implementation)

老壳有点爽

芯片 集成电路 IC 物理设计 PI

芯片行业基本生态:设计生产封装的行业分工

老壳有点爽

芯片 集成电路 IC

Golang领域模型-六边形架构

奔奔奔跑

golang 领域驱动设计 微服务拆分 架构设计

强势入局,区块链专利将成为银行下一个战场?

CECBC区块链专委会

区块链 金融 银行

集成电路设计概括

老壳有点爽

芯片 集成电路 IC

中国大陆芯片行业发展概况

老壳有点爽

芯片 集成电路 IC

最初芯片国产化是怎么来的?

老壳有点爽

芯片 集成电路 国产化 替代

Python 核心技术与实践 input&output

Bonaparte

成都信息工程大学的区块链工程成全国首个区块链工程本科专业

CECBC区块链专委会

区块链技术 区块链工程

Vim小技巧(2)

老壳有点爽

vim Linux 脚本语言

sed 语言学习技巧(2)

老壳有点爽

vim sed 脚本语言

看门狗 | 分布式锁架构设计方案-02

高翔龙

redis 分布式锁 Jedis RedLock

集成电路工艺基础介绍

老壳有点爽

芯片 集成电路 IC 工艺 制程

数字电路后端设计流程

老壳有点爽

设计 flow 集成电路 IC

半导体行业个人理解

老壳有点爽

芯片 半导体 集成电路 IC

sed语言学习技巧(1)

老壳有点爽

vim 编程语言 sed 脚本语言

Linux指令简述&vim引入(1)

老壳有点爽

vim Linux 脚本

看门狗 | 分布式锁架构设计方案-01

高翔龙

redis 分布式锁 RedLock WatchDog

2020深圳站-GIAC全球互联网架构大会PPT分享

高翔龙

架构 分布式系统 服务治理 大型网站演变 全链路压测

数字后端工程师发展六阶段

老壳有点爽

芯片 集成电路 IC 数字电路工程师

模拟电路设计工程师发展九段

老壳有点爽

集成电路 IC 芯片设计 模拟电路

IC设计流程及工具

老壳有点爽

芯片 集成电路 IC IC设计流程及工具

世界集成电路发展概况

老壳有点爽

芯片 集成电路 IC 芯片营销

魅力非凡的半导体电路行业

老壳有点爽

芯片 集成电路 IC 芯片营销

MySQL备份与恢复场景示例

Simon

MySQL

MySQL DDL详情揭露

Simon

MySQL

Verilog 的debug技巧(1)

老壳有点爽

芯片 集成电路 IC Verilog 电路

UAVStack之微服务计算平台-InfoQ