背景

微信作为一款国民应用,已经进入每个互联网用户手中,微信支付作为其杀手级功能,在每一次佳节期间都会产生巨大流量,以2017年除夕为例,峰值QPS在76w左右,整个系统核心功能和金融相关,需要做好高可用。

我们先了解下微信红包支付的流程:

一个发红包的流程经过抽象可以得到如下路径:包 -> 发 -> 抢 -> 拆

微信红包的核心知识如下:

  1. 包红包:系统给每个红包分配一个唯一ID,也就是发红包的订单号,然后将红包发送给用户,红包的个数,红包金额写入到存储。

  2. 发红包:用户使用微信支付完成付款,微信红包后台收到微信支付成功的通知。红包系统将红包发送订单状态更新,更新为用户已支付,并写入用户发红包记录表,这样用户可以在钱包中找到用户的发红包流水和收发红包的记录,之后微信红包系统调用微信通知,将微信红包信息发送到微信群。

  3. 抢红包:微信群中的用户收到红包消息之后,点开红包,开始抢红包,这个过程微信红包系统会检查红包是否已经被抢完,是否已经过期,是否已经抢过等验证逻辑。

  4. 拆红包:拆红包是整个发红包流程最复杂的一个操作,需要查询这个红包的红包订单,判断用户是否可以拆包,计算本次可拆到的红包金额。记录抢红包流水。

最后的拆红包过程类似于一个秒杀活动的过程,需要做好库存扣减和秒杀记录的操作。更新库存就是更新红包发送的订单,写入秒杀记录就是写入红包领取的信息流水。还需要以用户为中心记录用户整体的红包领取记录。最后调用支付系统将拆红包后的金额转入用户零钱中,成功之后更新抢红包的订单状态为转账成功。

架构

接下来我们在了解下微信红包的整体架构:

可用性

影响系统可用性的指标有哪些呢?

- 计划外逻辑:很多意想不到的因素都可能对我们的系统可用性带来挑战,系统需要可以应对所有可能的故障,有些故障无法避免,那么我们是否可以缩短故障周期进行快速修复或是止损呢?

  1. 系统级故障:主机,操作系统,中间件,数据库,网络,电源等

  2. 数据和中介故障:人员操作,硬盘故障

  3. 其他:自然灾害,人为破坏,供电问题

- 计划内逻辑:主要是业务升级或迭代导致,或是运维的主从操作导致,或是一些定时的备份逻辑等。这一些因素需要做到精细化的方案,可以避免或是降低影响。

  1. 日常任务:备份,容量规划,用户和安全管理

  2. 运维升级相关:数据库维护升级,应用维护升级,中间件运维升级,网络维护,操作系统维护升级

总结来说做好可用性,对外做好预案降低影响,对内做好容量规划和流程制定。

那么微信红包架构在可用性上做了哪些事情呢?

  1. 业务逻辑层:部署方案,异步化,降级与柔性可用

  2. 订单存储层:SET化,DB故障自愈能力建设

部署方案

上海深圳两地部署,同城三园区部署,每个园区容量冗余1/3。

在部署上的收益:就近接入,单机,单IDC故障不影响正常业务,避免宏观单点。

弊端:资源,需要做好数据同步。

异步化方案

基本思路:简化关键路径,快慢分类

方案:

用户记录,零钱入账等非关键路径可以使用MQ异步执行,增加对账机制兜底保障,实现最终一致性。

思考:

  • 需要正确识别业务的核心关键路径

  • 异步化MQ需要做好生产消费只有一次

  • 分布式事务的一致性

分库分表 + SET化

方案一:分库分表

方案特点

  • 分为10个物理DB,每个物理DB分10个库,每个库分10个表,总共100张。

  • 订单顺序生成,订单后三位分库分表,所有物理DB均匀分库分表,每个订单server与所有物理DB相连

存在的问题:db连接数过高,容量的水平扩容问题

方案二:SET化

方案特点:

垂直stick,分而治之,将同一个红包ID的所有请求stick到同一台server,使得订单DB和订单server垂直stick在一起。

同一个SET中DB接入机器对等,三园区部署

解决DB连接数问题

思考:

1.DB层如何做到自愈?

答:监控单位时间内每个逻辑表的错误数,超过阈值后,通知订单生成系统屏蔽该号段,业务逻辑层重新生成红包id重试,对于已发的红包,没有增量,需要等机器恢复后超时退款。

2.如何解决DB锁竞争?

答:将stick到同一台server上的所有请求接收到进程后,按照红包ID排队,然后串行的进入worker进程进行处理,从而达到排队的效果,为防止server中请求队列过载导致队列被降级,从而所有请求涌进DB,系统增加了server服务器同部署的memcached,用于控制拆同一个红包请求并发数,用于请求队列过载降级。

3.冷热数据如何分离?

答:随着红包数量越来越大,单表数据也逐渐增加,DB性能和单表数据量有一定相关性,当单表数据量达到一定程度后,DB性能大幅度下降,影响系统性能稳定性,采用冷热分离,将历史数据和热数据分开存储。

比如可以按照天纬度分库分表逻辑,按照31天分。

4.如何平衡扩容?

总结

做到系统的高可用,我们需要了解系统的核心流程,需要了解业务的周期性高峰,做好流量异常监控,告警。做好依赖治理,复杂度治理,需要区分核心服务和非核心服务,做拆分部署和容量规划。

微信红包后台系统设计相关推荐

  1. 微信红包后台系统可用性设计实践

    微信红包业务量级的高速发展,对后台系统架构的可用性要求越来越高.在保障微信红包业务体验的前提下,红包后台系统进行了一系列高可用方面的优化设计.本次演讲介绍了微信红包后台系统的高可用实践经验,主要包括后 ...

  2. 独立后台2.0全新版本微信红包封面抽奖流量主小程序 裂变快 收益高

    独立后台2.0全新版本微信红包封面抽奖流量主小程序 裂变快 收益高 [完美运营版]微信红包封面小程序原生源码可生成微信qq小程序H5和APP 修复已知无限抽bug 独立2.0全新版本微信红包封面抽奖流 ...

  3. 科研人专属微信红包封面免费送!速领

    你发红包还在用平平无奇的"恭喜发财,大吉大利"吗? 科研圈的大佬们,早已经开始使用更高阶的技能发红包了! 打开红包的一瞬间,科研人最梦寐以求的"投啥中啥"终极祝 ...

  4. 牛逼!微信红包封面可以更换了!!!

    新的一年,新气象,你的微信红包封面是不是该换换了.看别人都有与众不同的红包封面,你柠檬了吗? 今天给大家分享下换微信红包封面的小技巧,下面给你们看看都有哪些红包封面可以更换! 微信红包封面 第一款[金 ...

  5. 简单的python抢红包脚本-Python自动抢红包,超详细教程,再也不会错过微信红包了!...

    来源:python专栏 github:https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/Too ...

  6. 微信红包随机数字_微信红包的随机算法

    概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.采取实时计算金额的考虑:预算需要 ...

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

    编者按: 腾讯云消息服务(Cloud Message Queue)是分布式消息队列服务,能够为分布式事务部署的不同应用之间或者一个应用的不同组件之间,提供基于消息的可靠的异步通信机制,消息被存储在高可 ...

  8. 高并发资金交易系统设计方案—百亿双十一、微信红包背后的技术架构

    21CTO社区导读 : 今天带来的是一个长篇文章.主要讲解高可用的互联网交易系统架构,包括双十一.支付宝&微博红包技术架构,以及微信红包的技术架构,希望能给各位提供价值. 概述 话说每逢双十一 ...

  9. PHP实现微信随机红包算法和微信红包的架构设计简介

    微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...

  10. 微信红包系统架构的设计和优化分享

    微信红包系统架构的设计和优化分享 编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10.1亿次,系统整体运行平稳, 在这里我分 ...

最新文章

  1. LeetCode实战:搜索旋转排序数组
  2. 印象笔记html预览,7 个方法,把印象笔记打造成轻量级笔记工具
  3. 通用串行总线集线器(Universal SerialBus HUB)什么是USB集线器(USB HUB)?什么是USB根集线器(USB ROOT HUB)?如何判断一个USB口是独立的还是集线器上的?
  4. javaScript第七天(1)
  5. 11 WM配置-主数据-定义冻结原因(Blocking Reason)
  6. 热点科普 | 自监督视觉特征学习
  7. SAP License:利用MM的预留功能进行生产控制
  8. 写好Java代码的30条经验总结
  9. python装b代码_教你装逼了:怎么样发布你的 Python 代码给别人 “pip install”
  10. 王者服务器维护11月,王者荣耀11月22日版本更新维护 更新内容介绍
  11. 2013年IT TOP100
  12. java图片变成黑白代码_转:Java对图片的处理---缩放图像、图像切割、图像类型转换、彩色转为黑白...
  13. numpy 判断是否实数
  14. 新物联网!新电商平台!
  15. 监控页面所有 ajax请求
  16. 论文实证分析怎么写?
  17. 以前写过的ajax基础案例(王欢-huanhuan)
  18. 筒仓计算表格_小时,速度,筒仓团队和甘特兹
  19. Java RSA加密解密
  20. Unity读写飞控参数mavlink

热门文章

  1. 十大抽奖软件推荐 抽奖软件排行榜 在线抽奖软件有哪些
  2. 恢复有道词典单词记录本的几种方法(非完美)
  3. Java 开发工具 Eclipse
  4. 通识与专业结合的大学之路
  5. LaTeX 技巧 802:国内期刊 CCT 模板编译经验
  6. Python 文本转语音
  7. DMS文档内容管理系统
  8. 拼多多砍价小程序源码/流量主系列微信小程序源码
  9. 【Web渗透测试】—Web漏洞
  10. IDEA 导入项目 导入不进去