产品简介
# 产品概述
金蝶天燕分布式消息中间件(ADMQ)是一款云原生消息中间件,采用计算和存储分离的基础架构,增强了系统的伸缩性。ADMQ在数据一致性上做了重点研究,能严格验证各个副本的数据强一致性,从而能更好的服务于金融等对数据敏感的行业。
主要能力如下
| 主要能力 | 解释 |
|---|---|
| 消息发布订阅 | 一对多消费模式,发布者可以将消息发送到主题,被一个或多个 消费者同时消费。 |
| 多租户支持 | 在共享服务器资源的情况下,实现不同租户间的数据隔离,保障用户隐私。 |
| 多协议接入 | 支持原生Kafka、AMQP、MQTT和JMS协议的接入,无需修改代码即可完成到 ADMQ 的迁移。 |
| 多客户端支持 | 提供 Java、Go、Python、C++和 C# 等多语言客户端。 |
| 数据一致性保证 | 数据多副本存储,在数据写入成功后保证各个副本数据的一致性,提供可重复读级别的一致性保证。 |
| 跨地区数据同步 | 支持同步、异步两种方式的异地数据同步。 |
| 计算和存储分离 | 无状态的计算节点+分层存储,集群在理论上支持无限制的扩展。 |
# 产品功能
ADMQ是一个分布式消息中间件,核心功能点包含以下几个方面。
| 核心功能 | 解释 |
|---|---|
| 消息接收 | 同步接收、异步接收、消息确认、批量确认、累计确认、重复消费、死信主题、消息订阅、多主题订阅、多种订阅模式、消费历史消息 |
| 消息存储 | 消息持久化、数据备份、同步策略、多级存储、集群间消息复制、单点多磁盘存储、数据清理、自动切换、同城多活、异地多活 |
| 消息传输 | 支持消息解压缩、消息可靠传输、断点续传。 |
| 文件传输 | 支持文件可靠传输、断点续传。 |
| 事务控制 | 原子性写入和读取、读取事务消息、跨主题事务 |
| 认证授权 | 身份认证、身份鉴权、多级账号、加密传输、数据隔离 |
| 多协议适配 | Kafka On ADMQ、AMQP On ADMQ、JMS On ADMQ、MQTT On ADMQ |
| 集群管理 | 节点管理、负载均衡、动态扩展 |
| 消息查询 | 开启消息轨迹记录功能后可查询主题下消息的接收、存储和消费情况 |
| 优先级队列 | 在同一主题内可设置消息的优先级,高优先级消息有更高的接收权重 |
| 国密SSL | 在消息传输过程中支持国密SSL加密传输 |
| 跨地域复制 | 支持持久化的消息在多个集群间备份,实现数据同步功能 |
| 黑白名单 | 支持IP、网段的黑白名单过滤,严格控制客户端访问的IP或网段 |
| 可视化管控台 | 提供集群自动化部署、资源管理、可视化监控运维等功能 |
# 产品优势
# 优势1 计算与存储分离
采用计算与存储分离的云原生架构,将消息的存储和服务分开,可实现存储层和服务层的独立扩展。扩容过程无需任何数据再平衡,不会将旧数据从现有存储节点复制到新存储节点,从而降低了网络带宽和I/O的消耗。
# 优势2 高性能低延迟
能够高效支持百万级消息生产和消费,海量消息堆积且消息堆积容量不设上限。单集群 QPS 超过10万,同时在时耗方面有保护机制来保证低延迟,满足业务性能需求。
# 优势3 无限制的主题存储
主题被分割成分片,以分布式方式存储,因此主题的容量不受单一节点容量的限制。
# 优势4 无缝故障恢复
由于服务层是无状态节点,所以某一个节点宕机对整体的生产和消费没有任何影响,集群会根据负载将主题重新分配给可用的节点。
一条消息在被确认之前会被持久化到N个存储节点,数据在多个节点上都可以被访问,并且可以在N-1个节点故障中存活。通过添加新的存储节点来替换失败的节点,不影响整个集群的可用性。
# 优势5 队列和流模型的结合
队列模型主要是采用无序或者共享的方式来消费消息,而流模型要求消息的消费严格排序或独占消息消费。
ADMQ 提供了统一的消息模型和API,做到了队列模型和流模型的统一。在主题级别只需保存一份数据,可被多次消费,为用户提供了更多灵活性,方便用户程序以最匹配模式来使用消息系统。
# 优势6 内置轻量级计算引擎
内置轻量级计算引擎,让开发人员可以使用Java或Python实现函数(处理逻辑),为用户提供了一个部署简单、运维方便的 FaaS(Function as a service)平台。此功能使用户可以享受无服务器计算(serverless)的好处,类似于AWS的Lambda计算。
# 优势7 统一认证和授权
提供统一的可视化界面,管理租户、命名空间、主题的创建和销毁,并分配用户相应的使用权限,保证用户的数据安全。
# 优势8 运维监控
拥有管控一体的可视化平台,提供服务可视化部署,简化部署流程,集群资源实现多维度监控告警功能,方便运维管理。
# 优势9 多租户隔离
提供多租户间隔离机制,保证租户之间互不干扰,保障用户隐私,同时对每个租户的资源进行管理监控,实时查看生产消费情况。
# 优势10 消息查询
支持在命名空间层开启消息轨迹记录功能,开启后会自动记录消息的接收、存储、消费和消费确认状态,在管控台可查询消息轨迹。
# 优势11 国密SSL传输
在消息传输过程中支持国密SSL加密传输。
# 优势12 多协议接入
客户端支持 Java 、 C++、 Python、GO 多种语言;另外,还支持 Kafka、RocketMQ、RabbitMQ 客户端的接入,若用户只是利用消息队列的基础功能对消息进行生产和消费,可以不用修改代码就能完成到ADMQ的迁移工作;同时还支持MQTT、JMS 等协议接入。
# 应用场景
# 系统解耦

业务描述:
假如有一个灾害指挥中心,遇到告警时需要通知各个灾害处理子系统进行相应的灾害处理。
传统架构:
需要给每一个子系统发送一条通知,如果其中某个子系统连接不上,就会影响后续的处理流程。
消息队列架构:
在有消息独队列的架构下,管理系统只需要把通知发送到消息队列,由消息队列复制消息给每一个子系统。这种方式提高了系统的灵活性,当有新的子系统接入时或者子系统的消息接收接口改变时,其他子系统不需要做任何改动,只需要相应的子系统自己做适配就好。
# 异步处理

和系统解耦类似,有一点区别就是消息通知到各个子系统后需要得到子系统的反馈。
传统架构:
传统架构下就是在发送消息后阻塞后续流程等待子系统处理完毕后反馈结果。如果子系统处理失败了,还需要重新发送消息,也就是管理系统需要知道各个子系统的状态,这种方式增加了管理系统的复杂度。
消息队列架构:
在有消息队列的情况下,管理系统可以把消息发送到其中一个主题,子系统从该主题订阅消息,处理完成后反馈结果到另外一个主题上。管理系统通过另外一个主题获取子系统处理结果。这种异步处理的方式使得管理系统和各个子系统都不需要关注对方的状态,只要保证能从消息队列拿到消息并成功把消息或者处理结果发送到消息队列即可。
# 削峰填谷

消息队列本身就是系统之间的队列,天然有消息缓存能力。当消息发送方在某个时间点突然增大消息量时,消息队列可以把接收到的消息持久化到硬盘上,消息接收放仍然按照自己的处理能力从消息队列拉取消息进行处理,避免因系统要处理的流量突增导致系统崩溃。
# 基于优先级的消息推送

业务场景:
推送新闻到用户的APP上。
处理逻辑:
消息推送中涉及到优先级,有些紧急的消息需要优先于其他消息推送给用户。我们可以预先设置好几个优先级,每个优先级包含一类主题(比如用特定前缀或者给定范围),同时给每个优先级分配一定的读取配额。高优先级任务发布消息给高优先级的主题,低优先级任务发布消息给低优先级的主题,这样消费者可以按优先级顺序依次一定读取一定数量的消息。如果三个优先级按照4:2:1的比例分配读取配额,那就是高优先级先读取4条,中优先级读取2条,低优先级读取1条,从而实现基于优先级的消息推送功能。
# 跨地域数据复制

对于某些数据敏感的系统,通常需要在多个城市建立数据中心保存系统产生的数据,避免一个城市因自然灾害等原因出现整个数据中心都不能访问时,业务能切换到其他城市的数据中心,继续给用户提供服务。ADMQ内置了数据跨集群复制的功能,我们可以在北上广三地分别部署ADMQ集群,当一个地区的集群收到消息后,会通过异步的方式复制到其他地区的集群上,这样当广州集群出现问题后,业务系统仍能够通过北京和上海的集群读取数据。
# 分级存储

消息的分发一般对时效性要求比较高,所以不需要把所有的历史消息都存在本地磁盘。生产者发送的数据通过Broker发送到Bookie存储,Bookie把接收到的数据存储到文件里,我们可以把文件和ledger对应起来,就是每一个ledger对应一个文件,随着接收到的消息越来越多,文件大小也会主逐渐变大,当达到一定大小时就会生成一个新的文件存储数据,把之前的文件关掉。然后我们就可以把这些已经关闭的文件放到HDFS或者云存储环境里,只把当前使用的文件放到SSD盘上,这样就能更充分的利用SSD的读写优势。对于迁移到其他存储的数据,我们也可以通过其他方式读取里面的数据。
# 数据分析

数据在“流动”中产生价值,传统数据分析大多是基于批量计算模型,而无法做到实时的数据分析,利用 ADMQ 与流式计算引擎相结合,可以很方便地实现业务数据的实时分析。
# 顺序消息

消息的顺序性有很多的业务场景,比如证券交易过程时间优先原则,交易系统中的订单创建、支付、退款等流程,航班中的旅客登机消息处理等等。与 FIFO 原理类似,ADMQ 提供的顺序消息即保证消息的先进先出。
# 分布式事务

将核心链路业务与可异步化处理的分支链路进行拆分,将大事务拆分成小事务,减少系统间的交互,既高效又可靠;ADMQ 的可靠传输与多副本技术能确保消息不丢失,At-Least-Once 特性确保数据的最终一致性。
# 使用限制
软件环境:JDK 8+
# 相关概念
# 消息
系统的基本数据单元,生产者发送消息到ADMQ,ADMQ把消息转发给消费者。
# 主题
消息转发通道,标识一组消息,区分消息的不同类型,是个逻辑概念。生产者发送消息时必须指定主题,消费者接收消息时也必须指定主题。
# 计算节点
和生产者、消费者直接对接的程序,提供一个消息接收和发送服务。
# 存储节点
存储ADMQ接收到的消息内容到磁盘中。
# 发布订阅
一种消息转发模型,生产者发送消息到ADMQ后,多个消费者可以通过不同订阅组分别获取全量消息。