解密春晚微信红包十亿级并发压力

编者按:

腾讯云消息服务(Cloud Message Queue)是分布式消息队列服务,能够为分布式事务部署的不同应用之间或者一个应用的不同组件之间,提供基于消息的可靠的异步通信机制,消息被存储在高可靠、高可用的CMQ队列中,多进程可以同时读写,互不干扰。

那么,究竟什么是分布式事务呢?举一个简单的例子——春晚微信红包。

如果A向B发了一个红包,过程大致如下:

① 读取A账户余额;
② A账户余额减去红包金额,并将新的账户余额写入A账户中;
③ 读取B账户余额;
④ 拆开红包,读取红包金额;

⑤ B账户余额加上红包金额,并将新的账户余额写入B账户中。

对于春晚微信红包这个达到十亿级别的请求来说,如果使用传统的分布式事务处理方式,微信红包这个复杂的过程会放大并发压力,并且足以导致系统异常。例如上述过程第5步,由于并发压力过大常会出现A被扣款,B拆开红包后无法入账的情况。

腾讯云消息服务(CMQ)的其中一项功能就是将入账失败的请求,转入到CMQ队列中,钱包账户系统不断从CMQ队列拉取数据、尝试更新操作,直到成功入账。简而言之,CMQ保证了入账消息永不丢失。

在此过程中,CMQ消息队列保证了红包消息的可靠存储、传递,实时写三份保证数据不丢。资金入账失败时可多次重试,避免失败回滚和频繁轮询数据库等传统方式的弊端。

除了增强分布式事务处理的可靠性之外,CMQ还有以下几点功能:

① 异步通信协议

消息的发送者将消息发送到消息队列后可以立即返回,不用等待接收者的响应。消息会被保存在队列中,直到被接收者取出。消息的发送与处理是完全异步的。

② 进程解耦

消息队列帮助减少两个进程间的耦合度。只要消息格式不变,即使接收者的接口、位置或者配置改变,也不会给发送者带来任何改变。并且,消息发送者无需知道消息接收者是谁,使得系统设计更清晰;相反的,进程间使用远程过程调用(RPC)或者socket连接,当一方接口、ip或端口改变了,另一方则必须修改改写请求配置。

③ 消息路由

发送者无需与接收者建立直接连接,双方通过消息队列保证消息能够从发送者路由到接收者,甚至对于本来网络不易互通的两个服务,也可以提供消息路由。

④ 多终端

用户系统的多个部分可以同时发送或接收消息,腾讯云 CMQ 通过消息状态来进行消息可用性的控制。

⑤ 多样性

每个队列均可独立配置,并非所有队列都要完全相同。在不同业务场景下的队列可以进行个性化的配置,例如一个队列中消息处理时间较长,可以针对队列属性进行优化。

来源:https://blog.csdn.net/qq_35446207/article/details/52412084

猜你喜欢

转载自blog.csdn.net/gb4215287/article/details/90715488