云计算 频道

SACC2017:万亿级数据洪峰消息引擎实践

  【IT168 SACC现场报道】在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧+”的概念正在深入到各行各业,提升企业效率,释放商业潜能,创造全新机遇。作为国内优异技术盛会之一,2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。

  大会首日,来自阿里的中间件资深架构师金吉祥以《万亿级数据洪峰消息引擎》为主题,围绕阿里消息引擎家族史、消息引擎面临的挑战,未来展望三个方面进行了分享。在分享中,他从可用性&可靠性挑战、熔断机制、开源HA机制改进三个方面入手着重介绍了“双十一”在高可用方面面临的挑战以及阿里消息引擎在高可用方面的优化改进。

SACC2017:万亿级数据洪峰消息引擎实践

  据介绍,阿里中间件消息引擎发展到今日,前前后后经历了三代演进。

  2007年,淘宝从集中式向分布式系统演进过程。

  2010年开始,阿里巴巴的B2B部门开始大规模使用以Activemq为内核的消息中间件

  2011年,业务发展迅速,消息规模达到了很大的一个量级,以传统的Mysql作为存储去存消息 ,显然已经不符合需求;参照Kafka的架构;本地文件存储,支持海量消息堆积。

  2012年开始,全新改版,开发RocketMQ 3.0版本,在之前的版本中可能更多的是聚焦于日志收集,改版后RocketMQ开始大规模运用于淘宝线上核心系统。同时,RocketMQ内核进行了开源。

  2015年,基于RocketMQ内核开发了…同时支持 公有云、金融云、聚石塔、专有云的输出。

  2016年,RocketMQ进入Apache进行孵化,同时成为16年度最受欢迎的中国开源软件之一。

  2017年9月份,RocketMQ正式成为Apache优异项目。

SACC2017:万亿级数据洪峰消息引擎实践

  具体来讲,第一代,推模式,数据存储采用关系型数据库。在这种模式下,消息具有很低的延迟特性,尤其在阿里淘宝这种高频交易场景中,具有非常广泛地应用。

  第二代,拉模式,自研的专有消息存储。能够媲美Kafka的吞吐性能,但考虑到淘宝的应用场景,尤其是其交易链路等高可靠场景,消息引擎并没有一位的追求吞吐,而是将稳定可靠放在首位。因为采用了长连接拉模式,在消息的实时方面丝毫不逊推模式。

  第三代,RocketMQ,2011年推出以拉模式为主,兼有推模式的高性能、低延迟重量级分布式消息引擎,2012进行开源。如今,RocketMQ服务于阿里集团大大小小上千个应用,在双11当天,更有不可思议的万亿级消息流转,为集团大中台的稳定发挥了举足轻重的作用。

  据了解,RocketMQ作为一款纯Java语言开发的消息引擎,RocketMQ自主研发的存储组件,依赖Page Cache进行加速和堆积,意味着它的性能会受到JVM、GC、内核、Linux内存管理机制、文件IO等因素的影响。

  其中,最大的作用是异步解耦和削峰填谷。一方面,分布式应用会利用RocketMQ来进行异步解耦,应用程序可以自如地扩容和缩容。另一方面,当洪峰数据来临时,大量的消息需要堆积到RocketMQ中,后端程序可以根据自己的消费速度来进行数据的读取。所以保证RocketMQ写消息链路的低延迟至关重要。

SACC2017:万亿级数据洪峰消息引擎实践

  在去年双11期间,天猫发布了红包火山的新玩法。该游戏对延迟非常敏感,只能容忍50ms内的延迟,在压测初期RocketMQ写消息出现了大量50~500ms的延迟,导致了在红包喷发的高峰出现大量的失败,严重影响前端业务。下图为压测红包集群在压测时写消息延迟热力图统计。

  RocketMQ高可用架构中有限状态机的转换:

SACC2017:万亿级数据洪峰消息引擎实践

  第一个节点启动后,Controller控制状态机切换为单主状态,通知启动节点以Master角色提供服务。

  第二个节点启动后,Controller控制状态机切换成异步复制状态。Master通过异步方式向Slave复制数据。

  当Slave的数据即将赶上Master,Controller控制状态机切换成半同步状态,此时命中Master的写请求会被Hold住,直到Master以异步方式向Slave复制了所有差异的数据。

  当半同步状态下Slave的数据完全赶上Master时,Controller控制状态机切换成同步复制模式,Mater开始以同步方式向Slave复制数据。该状态下任一节点出现故障,其它节点能够在秒级内切换到单主状态继续提供服务。

  Controller组件控制RocketMQ按照单主状态,异步复制状态,半同步状态,同步复制状态的顺序进行状态机切换。中间状态的停留时间与主备之间的数据差异以及网络带宽有关,但最终都会稳定在同步复制状态下。

  如今,阿里中间件消息引擎仍然存在着优化空间,如团队正尝试通过优化存储算法、跨语言调用等策略进一步降低消息低延迟存储。基于RocketMQ 5.X这个内核打造一个生态,以不同的plugin去适配不同类型的需求,包括对Kafka、RabbitMQ以及是阿里云 SMQ 的适配。

  此外,日前,阿里中间件联合Linux Foundation 发布了OpenMessaging 规范,吸引了业界的广泛关注和参与,包括雅虎和twitter这样的一些公司。未来,伴随着开源时代的大势所趋,相信RocektMQ朝着更健康的生态发展。

1
相关文章