8月25日消息,腾讯云消息队列(Cloud Message Queue,以下简称CMQ)日前宣布对外开放,这一技术最大规模的应用在2016年春晚微信红包,微信红包除夕当日收发量达80.8亿个,是羊年除夕的8倍,在最高峰用户每秒收发40.9万个红包。腾讯云消息队列CMQ可靠性高达99.999999%,是保证红包信息高效传递的秘密武器之一。
腾讯专家工程师李文征表示,腾讯云CMQ开放了腾讯多年内部业务沉淀的技术,可以满足计算场景中所有异步通信需求,单CMQ实例每秒处理包量(QPS)高达10万,可以高效支持亿级消息收发推送,并且容量不设上限。值得关注的是,CMQ的部署非常简单,用户仅需几分钟便可完成接入腾讯云消息队列的部署,同时腾讯云提供极具竞争力的价格,每百万请求的收费2元。
80.8亿微信红包背后:CMQ解决什么问题?
春晚微信红包活动涉及四个大型系统的联动,包括微信、微信支付、红包系统和财付通系统。以下是4个系统的基本职能:
红包系统:个人红包的发、抢、拆和列表查看;
财付通系统:包括支付订单、异步入账流水的高性能存储,用户余额和账单的实时展示;
微信接入:确保微信用户公网接入的质量;
微信支付:在线交易的入口。
2016年春晚微信红包系统架构图
在这次活动中,在微信用户A给用户B发了10元的红包时,这个信息在微信后台会依次经过以下步骤:
1) 从A帐号中把余额读出来;
2) 对A帐号做减法操作(减10元);
3) 把结果写回A帐号中(一次确认);
4) 从B帐号中把余额读出来;
5) 拆开A发送给B的红包,读出数值;
6) 对B帐号做加法操作(加10元);
7) 把结果写到B帐号中。
如果没有使用腾讯云CMQ服务,为了保证数据的一致性,上述步骤会出现两种结果:都成功完成或者都不成功执行回滚。在这个操作的过程中,对A、B帐号还需引入分布式锁机制来避免脏数据的问题。在微信红包这个庞大的分布式集群内,事情将变得异常复杂。李文征指出,“在春节红包海量并发处理的场景下,若使用传统的事务处理方式,红包拆取失败时回滚且频繁轮询数据库,很容易会给系统造成并发压力甚至系统崩溃”。
在实际业务中,微信红包系统引入了腾讯云 CMQ 后,一方面避免了分布式事务增加对系统的开销,另一方面也高效解决消息并发的压力问题。在A用户给B用户发10元红包的场景中,引入腾讯云CMQ 后的新策略是这样的:
在上述微信后台进行到第七步后,B 用户拆开了红包,红包里有 10 块钱。在做最后的入账操作时由于当天并发压力大,常出现入账失败的情况。
红包团队把入帐失败的请求,全部转入CMQ。当B用户更新账户余额失败时,手机客户端显示等待状态。随后账户系统将不断从 CMQ 重新拉取重试此更新操作。CMQ 保证了这 10 元的入账消息永远不丢,直至它被取出。
除夕当天,用户红包的发、拆、入账等动作,转化为十亿级别的海量请求,腾讯云CMQ保证了海量红包消息的可靠存储和传递。
CMQ还能做什么?
除了红包收发外,在所有需要进行异步通信的应用情景中,腾讯云CMQ都大有所为,可以应用于海量数据处理、在线图片处理、在线游戏实时更新信息等场景。
腾讯云CMQ的推出,解决了开源消息中间件软件的可靠性、性能、安全等瓶颈问题,开源消息中间件软件的队列数量和消息堆积数量有限,每个IDC机房必须重新部署购买设备、部署,非常繁琐;数据单机或简单主从结构,存在数据单点问题,一旦丢失不可回溯,安全防护功能有限。
而腾讯云CMQ在任何场景中,每条消息在返回给用户写成功之时,数据已被复制3份写到不同物理机上,并且后台数据复制机制能够保证任何一台物理机故障时,数据能够快速的做迁移,时刻保证用户数据3份备份可用,可靠性达99.999999%。腾讯云同时提供多纬度的安全防护和防DDoS攻击服务,每个消息服务提供单独命名空间,客户间数据严格隔离,并且支持HTTPS访问,以及跨地域的安全消息服务。
目前,滴滴出行、大众点评在腾讯云已有深度实践。例如:将微信、手机QQ上用户的热门分享的餐馆,实时反映到大众点评App的手机客户端上,推荐给消费者。同时,腾讯云CMQ已在腾讯内部的手机QQ、QQ彩票等多个亿级用户业务中得到真实场景验证。