C++分布式实时应用框架 2.0

技术交流合作QQ群:436466587 欢迎讨论交流

上一篇:(六):大型项目容器化改造

版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!

  在C++分布式实时应用框架(CDRAF)1.0版本发布后,我们对整个框架做了大量的改进。在架构层面支持微服务架构、微服务编排。进一步厘清了CDRAF与业务代码的耦合,所有的分布式功能均不再需要业务侧关心,而统一由CDRFA内部实现。极致简化了业务侧的配置文件,也许下一步是做一个代码自动生成功能,根据配置生成相应的业务代码框架。重新实现如节点时延统计(CDRFA自动实现每个包的时延统计,业务无需关心),单号码日志跟踪(改成消息包染色的方案,CDRFA遇到染色包自动打印日志),应用命令功能(通过系统管理模块的RESTful接口给节点内的应用程序下达指令)等等。提供接口全面展示集群的节点实时拓扑图,并支持对集群节点微服务进行实时编排。增加了新的日志框架功能,提供高性能、多场景的日志输出能力。应对这些改进同步增加了相应的单元测试。由此C++分布式实时应用框架2.0版本也应运而生!

  一、集群实时拓扑图

  实时拓扑图展示了集群的每个节点(容器实例),连线代表通讯方向,孤立的节点表示未并网的节点。界面实时展示TPS(流量),RTT(时延)两个数据,点开节点可以进入容器节点的管理界面,做更多容器节点的管理工作。

  

  

  二、微服务编排

  按第五篇《微服务架构的演进》的方案,我们增加了图形界面支持微服务架构的编排。每个大圈表示一个类型的节点,小圈代表一个微服务端口。编排的时候从一个节点连线到另一个节点,并且选择两个节点要对接的微服务,即可完成编排。可以实时在集群运行过程中进行编排,完成编排后,集群状态也会实时显示在上面的拓扑图当中。当然可以根据业务自身需要,增加新类型的节点,或者为节点增加新的微服务端口。可以看到每个节点都独立非耦合,节点间的交互完全是通过微服务端口来进行,并且这些端口生效与否是通过微服务编排来进行控制的。

  三、时延统计功能

  时延统计功能是分布式框架的核心数据之一,用于实时检测节点的性能,并依此采取相应的解决策略。原来这个功能是在业务侧实现的,CDRAF2.0中,我们将这个功能提到框架中,可以计算所有节点的时延数据,并且业务无需关心(业务无需做任何事情即可获得这个功能)。

  CDRAF2.0中我们统一了节点的通讯模型,所有的节点均由Dis(数据分发)和业务处理进程组成。在一个业务包到达Dis后,框架会在这个包的包头打进当刻时间,在业务进程处理完消息回到Dis后,Dis会计算两个时间差得到时延数据。并将每个包的数据进行平均计算,上报状态中心,并且可以在实时拓扑图中展现出来。所有这些工作都由框架来完成。

  

  四、单号码日志跟踪(包染色方案)

  原来的日志跟踪方案在收到号码跟踪命令后,会通知所有节点的所有进程都来关注这个号码,遇到这个号码的包后就把日志跟踪打开。这个方案有几大缺点:

  a) 所有的业务进程都需要实现一份号码检测、开日志跟踪的功能,代码会无比冗余。

  b) 当打开这个功能的时候,集群所有的节点,节点中所有的进程,都会处理监测是否有这个号码的状态中。整个集群处于一个十分不稳定状态中。

  c) 业务上可能不支持同时跟踪多个号码。

  为此我们调整了单号码日志跟踪的方案,采用包染色的方案。在消息入口的位置检测号码,一旦符合条件就将这个消息包进行包头染色,后面的处理环节框架收到包后会先于业务检测包头,如果发现包头被染色,就会将日志跟踪打开,这个包处理完毕后再关闭。每个环节往下传的时候,框架都会自动为下传的包再次进行染色,以保证处理流程上的每个环节接收到的都是经过染色的包。新方案的优点如下:

  a) 业务上不再需要为这个功能实现相应的代码,只要在入口位置进行一次号码监测,如果符合就调用框架进行染色,后续所有操作都由框架来完成。

  b) 打开这个功能的时候集群不再处理不稳定状态,业务层面甚至感觉不到这个功能的存在,框架处理了所有的问题。

  c) 当有新的业务节点加进来的时候,会自动获得这个功能,而无需做任何改造。

  d) 除了单号码日志跟踪功能,这个方案还可以应用于其它的业务场景。

  

  五、通用指令传递方案

  在CDRAF中,如果外界要给集群中某个节点的某个进程下达一个指令,会通过系统管理模块的RESTful接口,然后通过状态中心,通讯平台最终传递到相应的进程。但在我们之前的方案中,每增加一个这样的命令都需要给每个模块(系统管理、状态中心、通讯平台)增加相应的代码来进行支持。

  新的方案中,我们设计了通用的消息通路,用来传递指令。

  通讯框架自动给SmartAgent 进程增加MonitorMsgInterface 端点,无需配置;SmartAgent 将业务控制消息从自身的MonitorMsgInterface 端点发出, SmartMonitor 从自身的MonitorMsgInterface 端点接收并处理;

  统一的命令格式

message MONITOR_MSG
{
string dest = ;
bytes msg = ;
}

  其中, dest 为控制消息想要发送的目的地,填具体目的地进程的进程名,如"OLCProxy","OCPro", "OCDis"等;如果需要将命令发送至所有进程,则dest 填成字符串all 。msg字段为具体的控制命令文本。

  框架自身提供了若干公共的控制命令,枚举如下:
调整日志级别
格式: log 日志级别
其中, 日志级别包含off , critical , err , warn , info , debug , trace
例子: log debug
停线程
格式: stop
重载通讯链路信息
格式: reload
  除了以上框架提供的公共控制命令外, SmartMonitor 也可以接收任意消息并传递给指定进程,其不关心消息内容,消息内容完全由业务进程负责解析处理。 原则上SmartAgent 在填写该字段值的时候,应该直接从ZK读取;ZK上应该有该控制命令的文本。

  从上面这些调整可以看到,CDRAF2.0致力于将分布式相关功能和业务彻底解耦。在我们的设计与实现中,业务和框架之间有一条明显的分界线。所有可以在框架侧做到的功能,业务侧一行代码也不用写,便可自动获得。我想这便是CDRAF2.0向通用型框架迈出的一大步!

(七):C++分布式实时应用框架 2.0的更多相关文章

  1. (五):C++分布式实时应用框架——微服务架构的演进

    C++分布式实时应用框架--微服务架构的演进 上一篇:(四):C++分布式实时应用框架--状态中心模块 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律 ...

  2. C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework)----(一):整体介绍

    C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 在现今软件系统纷纷"云化"的浪潮下,各种支持" ...

  3. (三):C++分布式实时应用框架——系统管理模块

    C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...

  4. (四):C++分布式实时应用框架——状态中心模块

    C++分布式实时应用框架--状态中心模块 上篇:(三):C++分布式实时应用框架--系统管理模块 技术交流合作QQ群:436466587 欢迎讨论交流 版权声明:本文版权及所用技术归属smartguy ...

  5. (五):C++分布式实时应用框架——支撑复杂的业务通讯关系

    C++分布式实时应用框架--支撑复杂的业务通讯关系 技术交流合作QQ群:436466587 欢迎讨论交流 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法 ...

  6. (一):C++分布式实时应用框架----整体介绍

    C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经 ...

  7. [开源]CSharpFlink(NET 5.0开发)分布式实时计算框架,PC机10万数据点秒级计算测试说明

    github地址:https://github.com/wxzz/CSharpFlinkgitee地址:https://gitee.com/wxzz/CSharpFlink  1         计算 ...

  8. C++分布式实时应用框架——系统管理模块

    一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个”封闭“的系统.你不可能再一台台去操作上百台机器,传统的人工运维方式早已不能满足当下需要,所有对集群或者集群中某个节点的操作都必需通过 ...

  9. Storm分布式实时流计算框架相关技术总结

    Storm分布式实时流计算框架相关技术总结 Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍.以此为基础,后续再深入了解S ...

随机推荐

  1. Material Design Library 23.1.0的新变化与代码实战

    Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...

  2. Flexbox布局指南

    Flexbox布局概念 Flexbox布局( Flexible Box 或CSS3 弹性布局),是CSS3中的一种新的布局模式,是可以自动调整子元素的高和宽,来很好的填充任何不同屏幕大小的显示设备中的 ...

  3. MinerBean.java 数据库表 miner bean

    MinerBean.java 数据库表 miner bean package com.iteye.injavawetrust.miner; import java.util.Date; /** * 数 ...

  4. 线性表链式存储设计与实现 - API实现

    基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以 ...

  5. Cocos2D中的纹理大小计算

    纹理占用的内存大小是纹理尺寸乘以颜色深度. 图片文件的大小一般很小.一个初学者常见的错误是假设纹理内存使用量和图片大小一致. 哎,纹理内存(对于非压缩格式)的大小可以用以下伪代码来计算: pixelW ...

  6. [转]smail语法 详解

    大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版 ...

  7. 【62】Spring总结之bean(3)

    Spring核心机制:依赖注入 Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入 ...

  8. Working with DVT Components

      Introduction to ADF Data Visualization Components - Graphs, Gauge, Maps, Pivot Table and Gantt Pur ...

  9. OAF更改动态头行

    选择头信息,动态刷新行信息.本文将详细介绍该种需求的做法. 本例沿用<OAF-头行结构>的am与vo,所以在进行本例之前,请先完成<OAF-头行结构> 一.创建页面 在test ...

  10. ReentrantReadWriteLock读写锁的使用1

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 一个简单的例子 两个线程,一个不断打印a,一个不断打印b public class LockTest { publ ...