干货 | 金融级消息队列的演进 — 蚂蚁金服的实践之路

摘要: 小蚂蚁说: 消息队列作为一个数据的集散中心,承载了越来越多的场景和数据,从最开始的 OLTP 到 OLAP,甚至再到物联网、人工智能、机器学习等场景,都有很大的想像空间。 在能力上,消息队列现在拥有了数据,拥有了算力,从承载数据走到理解数据。


小蚂蚁说:

消息队列作为一个数据的集散中心,承载了越来越多的场景和数据,从最开始的 OLTP 到 OLAP,甚至再到物联网、人工智能、机器学习等场景,都有很大的想像空间。 在能力上,消息队列现在拥有了数据,拥有了算力,从承载数据走到理解数据。

蚂蚁金服也在思考给消息队列加入算法的能力,让算法走进消息队列,走向下一个阶段 :洞察数据。把这些能力综合起来,打造一个智慧的传输计算服务平台。

还有一个好消息,消息队列作为 SOFA (Scalable Open Financial Architecture )技术体系比较核心的组成部分,后续也会积极拥抱开源和社区。

本文根据蒋涛在 GIAC 2018 的主题分享《金融级消息队列的演进之路》整理编辑,将给大家分享蚂蚁金服消息队列发展过程中的故事,以及这个过程中的架构思考。

金融场景下的消息系统的关键需求

在蚂蚁金服,消息队列已经有十多年的历史了。在07、08年时,我们采用了 ESB 这样的方式来实现消息的机制。

那个时候遇到的最头疼的问题就是丢消息,排查和修复起来非常的痛苦。到了09年,和淘宝共建并上线了新的消息队列系统,丢消息的问题得到了有效的改善。

蚂蚁的业务具有金融级的属性,从这个角度,有哪些比较关键的需求呢? 集中表现为以下四点:


  1. 极高的可靠性
  2. 举个例子,通过消息去生成账单,如果这个消息不可靠,消息丢了,这个时候会发生什么样的情况呢?客户付了一笔钱,但是在账单或者消费记录里却看不到这笔记录,这个时候就非常困惑了。 因此极高的可靠性指的是:消息不能丢。
  3. 极强的一致性
  4. 极强的一致性在金融业务当中是非常关键和重要的。 假如做一笔转账操作,因为种种原因,比如网络抖动,转账失败了,如果一致性没有做好,可能还会收到一条做了一笔转账的通知,这个时候系统的数据就不一致了。
  5. 持续的可用性
  6. 持续的可用性,是指在希望用系统提供的服务能力的时候,这个服务一定是要可用的。 比如说双十一的时候,线上生成一笔订单需要支付,一定希望它能非常顺利的支付完成。再一个,现在线下的场景非常火,到超市去买东西,结账的时候也希望扫码支付要非常顺畅,这都是对可用性的要求。
  7. 极高的性能
  8. 在蚂蚁金服,每天有千亿级的消息在流转,峰值的 TPS 也达到了千万级。在这么大的体量下,对性能的要求是非常高的。另外,从成本角度和用户的体验的角度,性能也是非常需要关注的地方。

对比经典的消息系统,需要建立哪些机制来满足以上的关键需求?

刚刚提到了金融场景下的四个核心的性能要求,那么具体如何来满足呢?

1. 如何做到极高的可靠性?

  • ACK 的机制。ACK 机制借鉴了 TCP 里面的思路,通过发送阶段、持久化阶段、投递阶段的 ACK 机制,保证了消息在流转路径的各个环节上的可靠性。
  • 重试的机制,保证了消息在投递出去后,当消费端消费不成功的时候,还可以再次去消费。
  • 通过存储层的持久化机制和可靠性机制来保证消息数据本身的可靠性。

2. 采用两阶段事务消息机制来保证极强的一致性


在第一阶段里面,把发消息和业务自己的业务操作放到本地事务中,发出来的是带有未提交状态的消息。 在第二阶段,会根据本地事务执行的情况来决定一阶段发出来的消息是提交还是回滚,如果是回滚,把消息删掉就好了,如果是提交,会去更新这个消息的状态,从未提交改成已提交,接着去做投递的动作。

如果第二阶段中的事务状态通知丢失了,消息服务端会去主动向消息发送端做事务状态回查,直到拿到明确的事务提交或者回滚的回查结果。

3. 持续的可用性的实现

在单机房的时代就在做提升可用性的事情。比如,在应用层面做了线程池的隔离,做了限流、熔断等等。在架构层面去做各种水平伸缩能力,在故障隔离层面做单点的隔离,做集群部署的隔离等等。这些手段提高了系统的可用性。


但是,由于受限于单机房部署的架构,当出现机房级别问题的时候,前面的手段就心有余而力不足了。

当然,同城双活架构可以通过业务流量在两个机房之间做切换,也可以通过数据层面的切换等手段来有效的解决机房单点的问题。


但是,随着业务增长,同城双机房模式在容量和容灾能力上也逐渐无法满足业务发展需求了。

面对同城双活也无法解决的情况,蚂蚁金服沉淀出异地多活 LDC 架构:


在 LDC 架构下,对消息队列有怎样的需求?

以转账为例,在异地多活的架构下,收款方跟转账人可能在一个逻辑 Zone 里面,也可能不在一个逻辑 Zone 里面,甚至他们可能都不在一个城市。这样带来一个最重要、最核心的需求就是消息队列需要具有非常灵活、非常强大的路由能力,可以做Zone内的路由,可以做同城跨Zone的路由,也可以做跨城跨 Zone 的路由。

在实现上,如果发现这个消息是要做同城跨 Zone 的路由,在消息服务端做了一个打通,通过服务端做转发,当发现是跨城场景的时候,通过一个叫 MQ-router 的系统,对跨城的链路做了一个收敛,也对城市级部署的逻辑做了一个收口,所有需要经过跨城的逻辑全部收口到这样一个系统当中,统一并灵活的支撑了异地多活的架构。

在 LDC 架构下面,消息有趣的应用场景

有一类会员信息数据,比较有特点:

  1. 访问量非常大,把它放到缓存里面,降低对后端数据库的压力。
  2. 在一次业务请求当中,对这个数据可能有非常多次的访问,所以对数据访问的延迟非常敏感。如果这类数据需要跨城才能访问到的话,跨城带来的延时对业务而言是非常难以接受的。因此就要求这类数据从本城市就能够访问到,每个城市都需要有全量的这类数据。
  3. 这类数据对变更的时效性非常敏感。数据变更了,需要非常快的感知到。如果依靠数据库层面的复制机制来做这件事情,会有大概秒级的延迟。

于是,我们设计了一个基于消息的方案,来实现一个城市级的缓存更新的机制。重点给 MQ-router 增加了广播的能力。当这类数据发生变更的时候,以消息的方式发出来,通过 MQ-router 以广播的形式发送到所有城市去,这样就达到了多个城市的缓存实时更新的效果。


4. 性能方面是持续在打磨的一件事情

消息队列基于 SEDA 模式来实现,引入了自研的高性能网络通信层 SOFABolt来提高消息通信的性能。除此传统的优化手段之外,也在调研和思考更先进的一些方式,比如硬件结合的方式,像DPDK、RDMA这样的技术,去追求更极致的性能。

拥抱大数据时代,我们做了拉模式的消息队列

有很长一段时间,消息队列的研发工作都是围绕着交易、支付、账务等OLTP的业务展开。所以一直在打磨消息队列在OLTP场景下的功能。比如,通过数据库存储保证消息可靠性,通过推的模式提高消息的实时性等。 随着业务场景的扩展,特别是大数据时代的到来,越来越多的OLAP场景出现了。这个时候前面的这些做法,特别是推的这种模式就遇到很多的困难。


到了这个阶段,我们去做了基于Log语义的拉模式的消息队列。 拉模式消息部署在物理机上,通过顺序写本地磁盘的方式去实现拉的语义。在一定时间内比较有效的支持了OLAP这种场景的需求。

走向计算存储分离的架构,从挂盘模式到 API 模式

随着拉模式的推广,很多 OLTP 的场景也逐渐的采用了拉模式,提出了很多新的需求。比如 OLTP 对数据可靠性要求比较高,对本地文件存储可靠性的问题就非常关注。

由于是基于物理机部署,也遇到很多运维上的难点,比如成本、机型等等的一些问题。特别是物理机机型变化非常多,每次采购可能都不一样,非常难以做标准化。在做容量规划、缩容扩容这些事情时会遇到非常多的困难。

消息是比较重 IO 轻计算的模型,在物理机上就会表现出非常明显的资源配比不均衡的问题。往往是磁盘已经不够用了,但 CPU 还很空闲。基于物理机的运维也很复杂,资源利用率不高、容量规划不好做、扩容缩容困难等问题凸显。

在做这件事情的时候,我们一开始采取了一种比较轻量的方式,称之为挂盘的模式。 通过挂载的方式,将分布式文件系统挂在消息队列应用上面。这个做法的好处是应用系统本身基本上不需要做什么改造。消息数据透明的写到了分布式文件系统上,依靠分布式文件系统提供的三副本高可靠的能力来保障消息数据的可靠性。

在这个阶段还做了一件事情,就是把消息应用的规格做了标准化。可以去制定类似8C、16G、1T 这样的规格,有了标准规格,就可以比较准确的测算某个规格可以顶多少TPS的消息量,这样做容量规划就很容易了。 这个模式上去之后,承载了一些业务,也接受了双十一大促的考验。

于是,我们开始了计算存储分离的第二阶段:API 模式,在性能上有了一个比较明显的提升。 这个模式下,消息服务端要做比较大的改动,趁着这个机会,也做了很多功能方面的增强。比如,加入了对全局固定分区的支持,还有发送幂等与强顺序的能力等。 同时,把数据落地也做了一个改变,原先数据全部集中在一个commit log中,转移到了队列里面去。这样带来的好处是可以在队列级别做更细粒度的配置和管控。

这个架构整体而言是一个相对比较完善的计算存储分离的架构了。在应用层面也做了很多可扩展的设计。

整体上,计算存储分离的模式给消息队列打下比较好的基础,可以跟蚂蚁金服全站的运维模式做很好的适配。

让计算走进消息队列,赋予消息队列计算能力

消息队列承载了越来越多的消息数据,大量的数据流进来再流出去。都说在大数据时代,数据就是金钱,但是可以发现这么多的数据流过消息队列,却没有淘到金。

通过思考这个问题,发现非常关键的一点是因为一直在用一种比较传统的方式去看待消息队列,认为它是消息的一个通道,消息流进来再流出去,使命就结束了。在这样的思路下,着力打造的是它的传输能力,它的存储能力,它的可靠性等。但是却忽略了在大数据时代非常重要的一个能力,就是计算的能力。

带着这个问题去看业界的一些发展,得到了很多新的思路。特别是从Kafka身上得到了很多的启发。

于是我们决定让计算走进消息队列,以 streaming 方式为消息队列增加了一种计算能力,实现了一个轻量级的非中心式的计算框架,既可以嵌入客户端,也可以嵌入消息的服务端,做一些轻量级的计算,支持一些比较通用和轻量的算子和多种计算窗口语义。

至此,消息队列有了传输、存储和计算的能力


基于这些能力,把消息队列往更大的层面上去推进,构建一个数据传输计算平台。不断丰富消息队列能力,不断拓展越来越丰富的数据源,获取越来越多样的数据,并且把消息投递到更多的目的地去。在传输过程中对消息进行计算,以获得更多计算带来的价值。

总结

通过前面的回顾,我们可以看到,消息队列作为一个数据的集散中心,承载了越来越多的场景和数据。

在能力上,消息队列现在拥有了数据,拥有了算力,正在走过一条从承载数据到理解数据的道路。接下来,我们也在思考给消息队列加入算法的能力,让算法走进消息队列。 这样就可以向下一个阶段 -- 洞察数据再迈出一步,就可以把这些能力综合起来,去打造一个智慧的传输计算服务平台。这样消息数据不仅是流转过消息队列,还可以经过更多的计算和加工,更轻快更实时的发挥更大的价值。

原文链接

本文为云栖社区原创内容,未经允许不得转载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海底光缆,到底是怎么安装和维护的?

戳蓝字“CSDN云计算”关注我们哦!作者 | 鲜枣课堂责编 | 阿秃大家应该都知道海底光缆是什么吧?没错!简单来说,就是埋在海底的光纤线缆。如今这个时代,我们每天都在上网。通过上网,我们可以随时和世界各地保…

android padding作用,android:padding和android:layout_margin的区别

简单点来说:android:padding是内边距,控件本身的内容与控件边缘的距离。android:layout_margin是外边距,控件与其他控件之间的距离。下面以具体的例子来进行解释:1、不设置边距android:layout_width"match_parent"andro…

8张图理解Java

摘要: 一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。8张图理解Java一图胜千言,下面图解均来自Program Creek 网站的Java…

云栖大会|十年阿里云存储进化史:今天最好的表现就是明天最低的要求

戳蓝字“CSDN云计算”关注我们哦!科技创新的能力仍然是俘获市场用户的必要条件,而善于发现新需求的敏锐嗅觉以及直面挑战的魄力,更是巨头企业的绝杀武器。随着大数据、人工智能等新兴技术的发展,图像语音识别、智能机器人、自动驾…

他在阿里的逆袭,只因为想做个“锤子”

摘要: 我叫孟白,这是我在阿里的第五年。这五年,我从一个外包工程师,到同事眼中的“铁打的”技术专家。填过无数次坑,也无数次想过放弃。留在阿里,是因为同事一句无意间的玩笑:“你只能做钉子&am…

vb6 判断打印机是否有效_讲述3D打印机怎么用 初学者必看

许多朋友买来了3D打印机,但却不知道如何下手,其实,3D打印机远远没那么复杂。那么,今天就来简单说一下3D打印机怎么用?第一步:创建模型想要玩转3D打印,最重要也是必不可少的环节就是建模!现在可以绘制三维图…

Intellij Idea 离线安装插件

一、idea插件下载地址 http://plugins.jetbrains.com/ 二、下载插件 安装插件 1、下载插件&#xff1a; 2、安装插件&#xff1a; settings -> plugins -> install plugin from disk&#xff0c;然后重启IDEA即可。 <!-- https://mvnrepository.com/artifact/org…

android dialog自定义圆角,Android自定义Dialog实现通用圆角对话框

前言&#xff1a;圆角对话框在项目中用的越来越多&#xff0c;之前一篇文章有介绍过使用系统的AlertDialogCardView(Android中使用CardView实现圆角对话框)实现了圆角对话框的样式&#xff0c;今天介绍自定义Dialog实现通用的圆角对话框。效果图&#xff1a;1.继承自AlertDialo…

漫画:什么是囚徒困境?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小灰责编 | 刘丹故事发生在小灰小时候......囚徒困境讲的是一件怎样的事情呢&#xff1f;话说某一天&#xff0c;警察抓到了嫌疑犯小A和小B&#xff0c;虽然明知道他们肯定是罪犯&#xff0c;却没有决定性的证据。于是警察想…

Dubbo Cloud Native 之路的实践与思考

摘要&#xff1a; Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注&#xff0c;尤其是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;项目蓬勃发展之际。Dubbo 作为服务治理的标志性项目&#xff0c;自然紧跟业界的潮流&#xff0c;拥抱技术的…

android mtk 按键,Android 4.0 虚拟按键、手机模式、平板模式(转)

nullem;text-align:left">平台信息:内核&#xff1a;linux2.6/linux3.0系统&#xff1a;android/android4.0平台&#xff1a;S5PV310(samsungExynos4210/4412)作者&#xff1a;xubin341719(欢迎转载&#xff0c;请注明作者) 三星新拿回来来的BSP&#xff0c;编译后没…

y电容如何选型_干式试验变压器选型依据

湖北中试高测电气控股有限公司为您解答&#xff1a;干式试验变压器选型依据干式试验变压器是电力系统中常用的设备之一&#xff0c;适用于各种电气设备绝缘性能的现场检测。当前市面上的干式试验变压器品牌、种类众多&#xff0c;如何才能选购到最适合自己使用的产品呢&#xf…

eplan如何导入access_EPLAN如何助力汽车行业的智能制造转型?

本文从汽车行业智能制造建设需求出发&#xff0c;结合EPLAN服务全球汽车行业企业实现智能制造的最佳实践&#xff0c;介绍了EPLAN在汽车行业智能制造建设过程中所能提供的完整、成熟的电气设计解决方案。作者&#xff1a;Eplan 王阳 | 来源&#xff1a;e-works一、汽车行业快速…

全面讲解OpenStack技术知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 鲜枣课堂责编 | 刘丹对于大部分人来说&#xff0c;这是一个很陌生的词&#xff0c;不知道它到底是什么&#xff0c;从哪里来&#xff0c;有什么用&#xff0c;和自己的工作有什么关系。有人可能知道&#xff0c;它和现在非常…

Dubbo在互金行业的应用

摘要&#xff1a; 融之家技术团队从2015年截止到目前累计经历了4次演进&#xff08;单体应用、多实例部署、半微服务、微服务&#xff09;&#xff0c;让平台能更懂用户&#xff0c;更理解用户的需求&#xff0c;把合适的人匹配到合适的产品。前言本文章是根据潘志伟老师在上海…

os是android5.0,Funtouch OS 2.1曝光 完美改Android5.0

由于设计风格华丽&#xff0c;UI特色鲜明&#xff0c;vivo基于Android 5.0开发的Funtouch OS 2.1曝光后&#xff0c;一直备受用户关注。近日&#xff0c;vivo官方再次公布其设计细节&#xff0c;据Funtouch官方微博发布的系统截图显示&#xff0c;Funtouch OS 2.1全面升级了And…

哈工大理论力学第八版电子版_校史上的这些天(37)| 和你一起在“岁月”中读懂哈工大...

1954年5月26日中央高等教育部委托哈工大组织举办理论力学、机械原理、机械零件3门课程教学座谈会。1990年5月26至27日哈尔滨建筑工程学院召开第六次党员代表大会。大会选举王玉林、朱华、刘剑秋、沈世钊、吴满山、张云学、张树仁、荣大成、高廷臣为中共哈尔滨建筑工程学院第六届…

fatal: remote origin already exists.报错已成功解决

在上传本地代码到github仓库时&#xff0c;出现下面这个问题&#xff1a; 解决办法&#xff1a; 先移除 git remote rm origin再次添加 git remote add origin https://github.com/jennaqin/jennaqin.github.io.git

阿里云 APM 解决方案地图

摘要&#xff1a; PM是近5年来伴随着云技术、微服务架构发展起来的一个新兴监控领域。在国内外&#xff0c;无论是云厂商(如AWS, Azure&#xff0c;等)还是独立的公司(Dynatrace, Appdynamics&#xff0c;等)&#xff0c;都有着非常优秀的APM产品。APM 概述APM 全称是 Applicat…