微信红包系统可用性设计实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 微信红包系统可用性设计实践 michaelfang
2.
3. 微信红包介绍 红包印象
4. 红包印象 – 产品形态 • 包红包 (支付) • 发 • 抢 • 拆
5. 红包印象 - 微信支付与微信红包 1. 发起支付 微信红包系统 2. 预下单 4. 选择:支付渠道 3. 拉起客户端收银台 微信红包前端 6. 通知商户 订单成功 微信支付 服务器 微信客户端 支付过程 5. 快捷 支付扣款 XX 银行
6. 微信红包系统可用性设 计实践 1. 微信红包系统介绍 2. 系统可用性影响因素分析 3. 可用性设计方向 4. 红包系统可用性实践
7. 微信红包的系统流程 包: 生成发红包单 写发红包订单 微信支付下单 发: 微信支付 更新发红包订 写发放记录 发微信消息 号 单 抢: 查发红包订单 拆: 查发红包订单 计算红包金额 写领取订单 更新发红包订 单 写领取记录 转零钱 更新领取单
8. 微信红包的系统架构 微信统一接入 抢红包 发红包 微信基 础服务 业务逻辑 拆红包 业务逻辑 历史数据 订单接入 接入 历史订单 订单 set0 查红包详情 业务逻辑 异步队列 数据分析 异构系统 出口 订单接入 订单接入 cache接入 用户数据接 入 订单 ... 订单 订单cache 用户数据 setn-1 setn TDW & 后台工具 迁移 查红包列表 对账 审计 同步 微信 支付
9. 可用性影响因素 – 计划外 • 系统级故障 • • • • • • 主机 操作系统 中间件 数据库 网络 电源以及外围设备 • 数据和中介故障 • 人员误操作 • 硬盘故障 • 数据错乱 • 其他 • 自然灾害 • 人为破坏 • 供电问题 故障无法 避免
10. 可用性影响因素 – 计划内 • 日常任务 • • • • • 运维相关 • • • • • • 备份 容量规划 用户和安全管理 后台批处理应用 数据库维护 应用维护 中间件维护 操作系统维护 网络维护 升级相关 • • • • • • 数据库 应用 中间件 操作系统 网络 硬件升级 通过精心设计方 案可以优化
11. 可用性设计方向 降低意外故障 影响 平行扩缩容
12. 降低故障影响 业务逻辑 订单存储 层 层 • 部署方案 • SET化 • 异步化 • DB故障自 • 降级与柔性 愈能力建设
13. 业务逻辑层 – 部署方案 • 通过部署设计降 低故障影响 • 方案 • 上海深圳两地部 署 • 同城三园区部署 • 容量冗余1/3 用户群 上海 • 收益 • 就近接入 • 单机故障不影响 • 单idc故障不影 响 用户群 深圳 idc_1 idc_1 跨城 通道 idc_2 idc_3 idc_2 idc_3
14. 业务逻辑层 – 异步化 • 思路 • 最简关键路径 • 快慢分离 • 方案 • 写用户记录、零钱入账使用MQ异步执行 • 增加对账机制保障最终一致 发: 更新发红包订 单 查发红包订单 计算红包金额 写发放记录 发微信消息 MQ 拆: 微信支付 写发放记录 写领取订单 更新发红包订 单 写领取记录 转零钱 更新领取单 MQ 写领取记录 转零钱 更新领取单
15. 订单存储层 – 早期架构 • 早期架构设计特点 • 订单顺序生成 • 按订单号末三位分 库表 • 多组物理DB均匀 分配库表 • 所有DB共用同一 接入层 单号: 201704160123456789 XX Y 业务逻辑服务 订单 hash 订单 SERVER 订单 SERVER 订单 SERVER • 存在问题 • DB连接数问题 • 存储机器故障影响 放大 • 扩缩容问题 订单 MASTER 订单 MASTER 订单 SLAVE_0 订单 SLAVE_1 db_00.t_y ~ db_09.t_y 订单 SLAVE_0 订单 MASTER 订单 SLAVE_1 db_10.t_y ~ db_19.t_y 订单 SLAVE_0 订单 SLAVE_1 db_90.t_y ~ db_99.t_y
16. 订单存储层 - SET化 • 设计方案 单号: 201704160123456789 • 按物理DB机器分 DB接入机按物理 SET 分SET规则路由 同一SET中DB接 入机对等,三园 区部署 Y 业务逻辑服务 • XX 按订单 划分set • xx=00~09 • 获得可用性提升 • • • 控制DB连接数 隔离故障影响 分流并发 xx=10~19 按订单 hash到 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 MASTER 订单 SLAVE_0 xx=90~99 订单 SERVER 订单 SERVER 订单 SERVER 订单 MASTER 订单 SLAVE_1 订单 SLAVE_0 订单 SERVER 订单 MASTER 订单 SLAVE_1 订单 SLAVE_0 订单 SLAVE_1
17. 订单存储层 – 故障自愈 • 方案 • • • 业务逻辑层写发红包 订单失败,生成另一 个set的订单号重试 SERVER监控DB失败情 况,单位时间内失败 次数达到预设值直接 报错 单号: 201704160123456789 XX Y 业务逻辑服务 效果 按订单 划分set • 故障后业务自愈 • 新业务无影响 • 已发未拆红包需等待 机器恢复或者过期退 款 xx=00~09 xx=10~19 按订单 hash到 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 MASTER 订单 SLAVE_0 xx=90~99 订单 SERVER 订单 SERVER 订单 SERVER 订单 MASTER 订单 SLAVE_1 订单 SLAVE_0 订单 SERVER 订单 MASTER 订单 SLAVE_1 订单 SLAVE_0 订单 SLAVE_1
18. 平行扩缩容 – 早期方案 业务逻辑服务 单号: 201704160123456789 XX Y 4. 发布业务逻辑 版本,使用启用新 SET 按订单 划分set 按订单 hash到 SERVER 订单 SERVER 2. 搭建新SET的DB 接入层 按订单 hash到 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 SERVER 订单 MASTER db_90.t_y ~ db_99.t_y 订单 MASTER 订单 SLAVE_0 订单 SLAVE_1 订单 SLAVE_0 db_00.t_y ~ db_09.t_y 3. 停服等待同步 完成 订单 SERVER 订单 MASTER 订单 SLAVE_1 订单 SLAVE_0 按订单 hash到 SERVER 订单 SLAVE_1 db_05.t_y ~ db_09.t_y 1. 搭建新SET,作 为原DB的备机并同 步数据 订单 MASTER 订单 SLAVE_0 订单 SLAVE_1 db_95.t_y ~ db_99.t_y 订单 SERVER 订单 SERVER 订单 SERVER
19. 为什么要停服? • 原因 • 按订单分库表 • 订单中表示逻辑库的空 间用尽 • 扩容时需要迁移数据 表示逻辑库,每次被分配完; 理论上00~99可分配100组物理 机器 红包单号: 201704160123456789 XX Y • 改进 • • 订单中预留三位为物理 机器标识 扩容时业务逻辑层新成 落地到新机器的订单号 表示物理机器; 最多可扩容1000组 红包单号: 201704160123456789 XXX Y
20. 改进后的平行扩容 201704160123456789 XXX Y 2. 逻辑服务开始生 成落到新SET订单 业务逻辑服务 1. 搭建新SET 按订单 划分set xxx=000 按订单 hash到 SERVER 订单 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 SERVER 订单 SERVER 订单 SLAVE_0 订单 SERVER 订单 SLAVE_0 订单 SERVER 订单 SERVER ... 订单 MASTER 订单 SLAVE_1 按订单 hash到 SERVER 按订单 hash到 SERVER 订单 SERVER 订单 MASTER xxx=010 xxx=009 xxx=001 订单 SLAVE_1 订单 SERVER 订单 SERVER 订单 SERVER 订单 MASTER 订单 MASTER 订单 SLAVE_0 订单 SERVER 订单 SLAVE_1 订单 SLAVE_0 订单 SLAVE_1
21. Q&A

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-09 10:43
浙ICP备14020137号-1 $Carte des visiteurs$