8 Star 32 Fork 4

开放金融技术 / AMI

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Readme.md 17.67 KB
一键复制 编辑 原始数据 按行查看 历史
rushmore 提交于 2020-12-13 10:22 . update Readme.md.

分布式系统基础平台AMI 申请试用

1. AMI概述

AMI(Archforce Message Interconnection)是华锐金融技术自主研发的,国内最早、面向金融领域提供低延迟、高吞吐、高可靠、高可用、松耦合、可扩展全栈解决方案的分布式系统基础平台。作为商业产品,AMI有标准的研发、测试、产品管理、培训、支持体系。证券行业多家大型券商已经基于AMI在算法、交易、行情、资管等领域构建了自己的分布式应用系统,并成功上线。

AMI平台为分布式服务提供基于主题语义、支持可靠组播、无需中间节点的高性能数据传输能力。同时,AMI提供了一套与业务无关的高可用解决方案,只要基于AMI构建分布式应用并遵从确定性原则,分布式应用即可获得高可用能力。另外,AMI提供了对于业务开发友好的API和开发框架,使得基于AMI开发分布式系统的架构更清晰、设计更容易、开发快捷。

在逻辑关系上可将AMI看作一条消息总线,不的业务消息在总线上传输并按照主题进行路由,不同的分布式应通过标准的API接入总线进行消息收发,并可以在总线上动态插拔。基于AMI平台构建的不同业务功能的分布式应用,只需将这些分布式应用挂接到同一AMI总线上,即可构建出一套高性能、高可用、可扩展的分布式业务系统或业务平台。

AMI的结构由动态库(SDK)和分布式服务(Daemon)组成。动态库与应用逻辑运行在同一进程空间,应用程序调用AMI提供的API来使用AMI的功能(譬如消息传输)。分布式服务则负责AMI的配置管理、运行监控、脑裂仲裁、分析跟踪、数据桥接、数据采集、运维管理等功能。

AMI的软件结构图

2. 高性能数据传输

AMI为部署于其上的分布式应用提供基于主题语义的高性能可靠消息传输。

2.1 发布/订阅模式

挂接在AMI上的应用组件,可通过配置静态或动态创建的形式创建发布或接收的主题。应用组件作为消息总线的使用者,在发送消息时,无需了解消息的接收者是谁,也无需了解消息传输的具体路径,只需指定消息的发送主题。同样,接收消息时也不必了解消息的源头和路径,只需订阅主题即可。

AMI支持可靠组播,一次发送可送达相同主题的多个订阅者

AMI的主题支持静态负载分区功能和动态负载均衡功能,以实现负载分割,方便应用系统进行水平扩展。订阅者可指定订阅某个主题的某个/某些分区,发送者可指定每个消息的目的分区,也可以以默认规则将消息均衡发送到多个分区。

2.2 可靠传输

AMI在UDP组播或单播技术基础之上实现可靠传输,可保证在主题上的消息在传输过程中不丢、不重、不乱(即接收顺序与发送顺序一致)。

AMI使用接收端ACK/NAK机制对发送端进行反馈,可设置不同的反馈策略,可设置应答者数量(或动态维护应答者数量),可配置关键应答者(保证送达),从而实现对消息反馈机制和传输可靠性等级的灵活配置。

AMI支持两个级别的消息重传:基于内存缓存,及基于持久化历史消息数据。基于内存缓存可实现高效重传,基于持久化历史消息数据的重传则可保证极端情况下消息一定送达。

在拥塞控制方面,AMI支持基于配置信息的静态(基于丢包的动态)流量控制,以及基于反馈机制的动态发送窗口控制。

通过对消息的分片/组装、打包/解包技术,AMI可以兼顾不同大小消息的高性能传输,支持的任意大小的消息发送。

2.3 数据交互模式

AMI默认以事件驱动的模式向应用递交消息,收到消息时通过回调应用提供的消息处理方法,将消息递交给应用。这种模式可支持高吞吐、低时延数据传输。

对于性能不敏感的分布式服务,AMI也支持使用RPC模式的数据交互。

2.4 高性能支撑技术

AMI采用了以下的高性能支撑技术,以实现消息传输的高吞吐和低时延:

  • 异步多线程网络框架

    AMI在发送端和接收端都采用了多线程模型,多线程并发处理消息的打包、发送、接收、解包、同步、缓存、查找、重传等环节。

  • 智能打包算法

    为数据中心和组播技术量身定制的打包和拥塞控制策略。

  • 高效的内存管理

    设计高效的内存数据结构,提高内存对象分配速度和使用效率。

  • 无锁技术

    通过各种无锁技术,降低并发冲突,提高处理性能。

  • 消息持久化

    实现本地持久化,在几乎不增加时延的前提下最大程度地保证数据可用。

  • 针对体系架构优化的数据结构和算法

    针对CPU、操作系统、编译器等特性针对性地做出程序优化。

  • 内核旁路(Kernel Bypass)

    使用用户态协议栈或者硬件加速协议栈,降低消息发送及接收时延。

3. 高可用解决方案

AMI支持状态机复制和主从复制两种高可用架构。在状态机复制架构下,AMI可提供与业务无关的整体高可用解决方案。该方案容错能力强(高达99.9999%),部署及管理方便,同步高效,节省网络带宽,支持秒级自动切换。

3.1 应对场景

AMI的容错机制可应对以下故障场景:

  • 单实例故障

  • 多实例故障

  • 整个集群故障

  • 局部网络故障

  • 数据中心间网络中断

  • 数据中心灾难

3.2 消息持久化

AMI可对主题上的输入和输出消息做持久化,持久化的消息可用于消息重传、故障恢复、故障隔离、数据稽核等功能。持久化功能保证应用异常时依然可以将消息安全、完整的落地到存储。持久化功能可按输入、输出、主题进行灵活开关配置,并支持通过API从多个维度对历史消息进行查询和读取。持久化引入的延迟开销极小,不会对系统整体延迟产生明显影响。

3.3 故障切换

基于AMI的高可用应用集群依赖连接状态及心跳超时等机制进行检测故障。对于单点故障及随机多点故障,AMI可实现故障自动切换,无需人工干预,切换速度快(RTO在秒级),无数据丢失(RPO=0)。

应用组件集群可灵活配置实例数量,且可以跨同城的多个数据中心部署。集群的容错能力可灵活配置,通过配置集群中的副本数量和工作模式可实现在超低时延和超高容错能力之间的权衡。

3.4 消息堆积

AMI基于消息持久化功能可实现在消费发送端和消息接收端的消息堆积能力。当某个分布式应用(分布式应用集群)发生故障,或处理消息缓慢时,可使得其上游应用不受影响,其上游应用可以继续向AMI上推送消息,当故障应用恢复后可以从AMI上获取到这些缓存的消息并继续处理。这使得当消息传输的旁路分支上的接收者发生故障或处理能力不足时,不会影响主路径上的接收者,以保证系统的可用性和高性能。

消息堆积能力可分别发生在发送端和接收端两侧。当接收端发生故障时,发送端发出的消息将在本地存储上排队缓存,待接收端恢复后可重新推送。当接收端处理消息缓慢时,接收端接收到的消息将在本地存储上排队缓存,接收端应用可按照自己的节奏异步消费消息。

3.5 故障恢复

故障恢复是指发生故障的单个副本或整个高可用集群发生故障后,可以重新恢复。改功能用于恢复分布式应用的业务运行(整个集群故障后恢复),或恢复分布式集群的高可用能力(单副本故障后恢复)。故障恢复分为两种情况:重新加入和集群恢复。

集群内的部分实例发生故障,但集群内仍有活动实例时,可对故障实例进行重新加入。重新加入的实例通过消息重演和状态同步等机制加入集群,最终以备实例的角色运行。

集群整体发生故障时,可选择最后发生故障的实例进行集群恢复。该实例恢复后成为主实例,其它故障实例可通过重新加入功能恢复为备实例。

4. 丰富的接口形式

针对不同的开发和接入需求,AMI提供了多种开发接口及开发框架。

4.1 API与连接器

对于linux操作系统,AMI提供c++/c/java/python/go语言的API。

对于Windows/AIX操作系统,AMI提供连接器(代理)接入。连接器提供TCP协议接口和API接口,其中API接口支持 c++/python(Windows) 语言。

最终使用不同编程语言开发,在不同的操作系统上运行的应用程序可以挂接在同一条总线上,实现互联互通。

4.2 应用框架

AMI提供用于通用应用开发的编程框架AAF,支持命令行解析、信号处理、日志处理、数据加载、配置解析、守护进程、单例进程、通用初始化和销毁流程、指标监控等功能。

此外,AMI还提供对业务实现开发支持更完善的通用技术框架ABF,ABF支持接口定义和序列化、支持对象的传输、提供模块化插件化的业务开发体验、支持模块间的时序管理和依赖管理、支持业务数据流编排、提供了高性能对象池、线程模型、事件管理、垃圾回收、异常消息过滤和保护等功能。通过Web终端可以对框架和模块的属性进行配置,Web终端提供了应用模块结构的可视化展示。

5. 运维管理

AMI提供了可视化的配置管理功能、灵活的监控能力、丰富的支撑工具,从各方面提升系统的易用性和友好性。

5.1 集中管理

AMI使用集中化的配置管理服务器,用于系统的配置管理、指标监控、集群仲裁等功能。AMI提供系统配置管理界面。配置管理服务器亦可配置为高可用集群以容忍多点故障。

5.2 运维监控

AMI会记录详细的运行日志和事件,基于内嵌的Http框架和Web Socket框架,可实现灵活、实时的监控指标和事件上报功能。配置管理服务器集成了指标仪表盘功能,可对分布式系统中个节点的指标和事件进行查看和监控。

AMI提供了用于性能分析和消息轨迹跟踪的标准框架。通过应用程序注解(Check Point)的方式,可采集各分布式应用的业务处理时间和事件,并对采集到的数据按照用户指定的规则实时计算性能指标,并以折线图等可视化的形式展示给终端用户。此外,该框架还可以实时识别异常的消息传输轨迹和业务阻塞等情况,并进行告警。

5.3 支撑工具

AMI将提供数据查询、数据稽核、问题分析、异常处理等系列支撑工具,可协助基于AMI的业务系统的开发、运维。

5.4运维管理

面向中小规模的分布式系统,AMI提供了一套精简的运维管理系统。通过配置分布式应用的部署位置,启停恢复方式,流水线关系等信息,可实现分布式系统的日常运维和应用状态监控。以上功能都提供可视化页面。

特性及指标汇总

图-1 AMI的综合能力雷达象限

AMI的综合能力雷达象限

表-1 AMI的一级功能清单

特性分类

特性(特点)

架构

无中心架构(无代理架构)

传输功能

支持可靠单播

支持可靠组播

支持主题语义

支持请求应答模式

支持消息推送模式

支持在存储和内存中堆积消息

支持流速控制

UDP/SHM/RoCE/Infiniband四种通讯协议

多协议栈并存

消息大小不限

消息标签

可靠性

消息保证送达

可控制反馈模式

消息持久化

获取持久化数据

高可用

实时同步集群(零数据丢失)

自动故障切换(秒级切换)

脑裂预防

消息重演

副本再加入

灾备集群

读写分离

消息半重演

原子广播

CommitSync

选主服务

状态机复制

主从复制

性能

1000万消息每秒吞吐能力

微秒级延迟(详细数据见表-2)

扩展性

支持主题分区

支持负载均衡

点对多点数据复制能力

跨组播网络数据桥接

动态主题发布和订阅

线程模型可根据CPU数量扩展

集成接入

IO引擎(TCP引擎已发布、UDP引擎研发中)

数据采集(DPI)

Kafka连接器

Database连接器

易用性

兼容性

C/C++/Java/Python/Go

多系统(Linux/Windows/AIX)

面向对象接口

配置可视化

应用开发框架

可监控

可管理

集中配置

集中监控

应用监控框架

开放管理接口(二次开发)

应用时延监控

消息轨迹跟踪

表-2 AMI性能数据(使用硬件加速)

消息速度(万/秒) 单节点RTT时延(us) 主备强一致RTT时延(us)
1 5.25 13.32
10 5.33 11.66
30 5.94 12.81

申请试用二维码

C++
1
https://gitee.com/openforce/ami.git
git@gitee.com:openforce/ami.git
openforce
ami
AMI
master

搜索帮助