1.微信红包数据架构演变 嘉宾:莫晓东 • 红包印象 • 2015春晚红包 • 2015新的挑战 • 2016再战春晚 1

2.红包映像 微信红包是什么? 微信红包是什么 包红包(支付) 发 抢 拆 2014年短短几天内快速上线的内部项目,满足业务基本需求,每秒几 百发送,每秒上千拆的请求。 2

3.微信红包资金流 • A 用户发红包,C, D, E 用户抢红包 • 支付(发红包) • 转账(拆红包) • 退款(过期 24小时) 银行卡 or A用户微信支付余额 微信红包中转账户 必须做到资金安全,所以需要事 务。 微信红包中转账户 C 用户微信支付余额 D 用户微信支付余额 E 用户微信支付余额 银行卡 A 用户微信支付余额 • 资金原路返回 微信红包中转账户 2015年春晚红包 400倍的挑战 海量之道 全民摇红包,不能失败 3

4.存储层方案和设备选型 • 项目挑战: • 预估量级是日常的100倍。 • 无法借鉴、摸着石头过河。 • 精确压测性能,为容量评估和限流提供依据。 • 从配置、部署、容灾三方面深入优化,为业务保驾护航。 • 是否继续使用MySQL? • 需要多少机器,怎样部署。 • 使用什么机器类型。 • 可能出现什么问题,怎么解决。 继续使用MySQL • MySQL支持事物,满足一致性要求。 • 结构化存储,紧凑、连续。 • 支持多索引。 • 部署简单,工具支持。 • 团队技术积累。 • 设备改进。 硬盘从sas升级FusionIO SSD。 系统从SUSE linux 10升级tlinux 1.2。 • 测试先行,实践是检验真理的第一标准。 模拟测试: 吞吐量:2.6w/s 主事物:2k+/s 同步速度:6k/s 4

5.性能优化 • 业务最终一致性,cap、base。 • 允许丢失和对账、异步达成。 • 多层Cache。 • 定制列表服务,下单前验证预订单。 • 接入层数据cache,标记红包抢状态。 • 部署优化。 • 多实例,交错部署。 • MySQL参数优化。 • 系统层参数优化。 • 数据优化。 • Sharding,水平拆分。 • 数据冗余,维度拆分。 • 数据预生成,摇一摇红包预先导入。 • 字段冗余,减少访问次数。 • 默认字符集从utf8改latin1。 有损服务、柔性可用、大系统小做 • 什么是有损服务?有损服务是通过精心拆分产品流程,选择性牺牲一部分数据一致性和完整性从而 保证核心功能绝大多数运行。核心功能是摇,拆,发。其它模块异常立即降级防止引起雪崩。 • 过载保护,层层过滤、快速拒绝,把千万级别的请求减少到万级,减少DB负载。 • 异步处理,耗时最长的入账操作,直接跳过,异步处理。 • 柔性策略,关闭不重要的功能模块,比如查看收发历史、关闭祝福语。 • 资源隔离,拆分红包DB为50个Set,出现故障只影响1/50。 • 大系统小做,功能单一。逻辑层需要减少模块耦合,存储层也需要多源。 • 故障处理,如果DB故障直接替换空白机器,未领取的红包锁定退款。 故障预案,可控 ;未算胜先算拜,极端情况。 5

6.2015年春节成果 • 除夕抢红包峰值增长500倍(含春晚企业红包) • 拆红包峰值增长400倍 • 单日红包发送超过亿 2015年新的问题 业务从3月开始快速上涨 红包订单量月增速约达2倍并持续 保持 6

7.红包野蛮生长 • 红包使用量急剧增长。 • 拆事务性能瓶颈,高峰抖动。 • 主从同步压力,对账不及时。 • 存储容量压力,设备已缩容。 • 需要进行业务重构。 • 运维和开发处于高负荷状态。 • 先应付眼前。 月增速为1.8倍并保持 运维和开发处于高负荷状态 业务抖动多次扩容 需要进行业务重构 第一阶段,争取时间 • 存储容量不足。 • 使用InnoDB压缩格式,为冷热分离争取时间 。 • 压缩率订单库44%,用户库57%。 • 可接受的性能下降10-15%。 • 性能问题。 • 梳理主机SQL,索引优化、语句优化、请求精简。 • 高峰期抖动,优化请求时间分布。 • 新特性如线程池,4k page。 • 主从同步延时。 • 优化从机SQL。 • 升级 Percona 5.5,多库同步。 7

8.第二阶段,冷热分离 • 分离依据 。 • 分析数据访问情况占比, 实测订单3天内,访问占比98.9%。 • 优化目标。 • 提高性能,减少现网库表数据量。 • 节省成本,历史数据使用低成本大容量设备。 • 历史库方案。 • 按日分表,proxy路由请求。低峰时段搬迁数据,现网只保留7天。 • 改善性能,从raid10+tokudb迁移到NoRaid+myisam,解决迁移问题和优化查询性能。 暂时解决问题,脱离容量问题,性能稳定性增加。 第三阶段,必须重构 • 表空间回收困难,现网库删除慢,历史库存储过大。 • 字段过冗余,如果按每月约翻倍的速度增长,到年底是很惊人的。 • 假设到年底还有6个月,如果2^6=64倍,那到2月份过年2^8=256倍。 • 目前大约占了20T历史数据,如果几十几百倍,机器数量,业务成本无法承受。 • 性能同样需要优化,拆红包单组DB拆峰值仅仅2000+,预计春节10w峰值,也无法完成任务。 • 红包系统的性能瓶颈在拆事务上。 8

9.精简和拆分-容量比想象中更宝贵,按字节计算需求 • 库表重新设计,字段缩减,去冗余。 • 冗余字段精简。 • 单号精简。 • 字段类型精简。 • 按天分表,循环使用。 • 确保数据单表数据不会无限增长。 • 用truncate代替delete清理。 • 垂直分表力度更细。 • 小表性能更佳。 • 主键从单号修改为自增字段。 • 自增主键减少体积,加速插入速度。 • 不同的内容,不同的存储。 • 有些内容使用kv更适合。 • 用户维度迁入列表服务。 • 扩散读和更依赖cache。 • 个人红包和企业红包分离。 • 企业红包特有字段去除。 性能优化-异步和cache • 事物优化。 – 事物语句精简和优化。 – 入账分布式事务。 – 提高并发度,请求排队 机制。 • 异步化。 – 异步入账。 – 异步用户信息。 – 异步补拆,异步入账。 • 语句优化。 • 不查不需要的字段。 • 非核心查询移到从机。 • 大操作合并查询。 • 先查cache。 • 通过cache判断能不能抢。 • 缓存常查询的内容。 9

10.优化效果 • 单表行数: • 千万级别到十万级别。 • 拆性能: • 2000/s到6000/s+。 • QPS: • 1.5w到6w。 • 为业务快速成长排除了性能瓶颈: • 以去年春晚的2倍设备量,支撑今年春晚10倍的处理能力,容量上节省了数百台设备的成本。 • 元旦实例验证,超过去年春节的量,单机负载小于20%。 存在问题 • 红包系统只部署深圳。 • 跨城流量高延时。 • 深圳机架位不足。 • DB宕机后的数据安全 • 主备切换风险:主备延时,数据不一致。 • 切换后,数据写脏。 • 资金风险。 红包DAO服务 1 23 红包DAO服务 2 1 3 10

11.2016年春晚红包 新的战斗 波澜不惊 春晚准备工作-南北分布 • 挑战。 – 就近接入。 – 城域容灾。 • 南北分布设计。 – 系统切分,相互独立。 – 流量可调控。 – 相互容灾。 • 收益。 – 故障恢复。 – 流量均衡。 – 降低时耗。 11

12.2016年新架构 前端 微信 逻辑 红包存储 后台支撑 ???? 客户端 代理 红包CGI 微信消息 微信用户信息 队列 ???? 逻辑服务 DAO服务 DB 客户端 代理 红包CGI ???? 微信消息 微信用户信息 逻辑服务 DAO服务 DB ???? ???? ???? 监控告警 队列 ???? ???? ???? 运营管理 数据分析 其它 • 异地多IDC部署。 • 上海深圳南北分布。 • 三园区部署。 • 层级结构。 • 纵向分层。 • 异步结构。 • 多set结构。 2016春节红包-除夕成果 • 系统符合预期。 • 控制安全范围,平稳度过。 • 2016年主要工作是安全和容灾。 • 增加故障自动恢复和自动切换。 12

13.谢 谢! 13

微信红包管理数据库mysql_莫晓东 - 微信红包数据库架构演变相关推荐

  1. jdbc连接云数据库mysql_如何通过JDBC连接MySQL数据库

    通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下: jdbc:mysql://:/?sslmode=verify-full&sslrootcert= 表1参数说明参数 说明 如果 ...

  2. python微信群管理_利用python实现在微信群刷屏的方法

    hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一个大牛不也是从一个小白慢慢进步学习从而达到一定的高度的吗,而 ...

  3. 怎么打开微信支付管理中关闭的服务器,手机微信中如何关闭已经开启的自动续费服务...

    微信作为我们生活中的一款支付神器,不管是看电影.吃东西.买衣服等都是可以用到微信支付的,那么平时我们在使用手机的时候都经常有可能需要用到一些付费服务,所以就自然而然的就用到微信支付了,也有很多服务是需 ...

  4. 微信红包数据架构演变

    PPT主题:微信红包数据架构演变 嘉宾:莫晓东有关资金安全,所以需要事务1.继续使用MySQL• MySQL支持事物,满足一致性要求.• 结构化存储,紧凑.连续.• 支持多索引.• 部署简单,工具支持 ...

  5. 微信群管理工具可靠吗?

    很多企业在使用微信运营客户时,会拉很多客户群进行社群运营,那么有没有什么可靠的微信群管理工具? 前言 很多企业在使用微信运营客户时,会拉很多客户群进行社群运营,方便企业对客户的集中管理.即便微信群可以 ...

  6. Laravel5.6结合EasyWechat实现微信菜单管理

    关于微信公众号开发,网上的教程也有很多,但是针对于功能模块的开发,没有具体的操作步骤,很难理解别人写的是什么,所以我根据自己的经验来总结一下针对微信菜单管理的具体实现步骤.微信原生实现我就不说了,看看 ...

  7. 微信公众平台开发 mysql_微信公众平台开发数据库操作

    一.简介 前面讲解的功能开发都是简单的调用API 完成的,没有对数据库进行操作.在接下来的高级功能开发中,需要使用到数据库,所以在这一篇中,将对MySQL 数据库的操作做一下简单的介绍,以供读者参考. ...

  8. C#开发微信门户及应用(46)-基于Bootstrap的微信门户应用管理系统功能介绍

    在前面介绍很多的微信框架,基本上都采用EasyUI的界面来搭建的微信框架,如随笔<C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍>介绍的一样,不过随着微信的H5应用越来越多,因 ...

  9. 丁晓东_丁晓东|一种光盖过了另一种光NO.984

    唯有批评不可辜负 真诚 包容 严肃 原创 独立 审慎 △封面 <品位·浙江诗人>为诗歌月刊.浙江省文联主管,浙江省文联传媒中心主办·出版.2020年第4期将于4月出刊.敬请关注和订阅! 本 ...

  10. thinkphp 微信服务器验证代码_基于ThinkPHP5微信后台管理平台

    DIY分享秀 2019-10-08 22:28:57 ThinkAdmin V5 是一个基于 ThinkPHP 5.1 开发的后台管理系统. 我们致力于二次开发底层框架,提供完整的组件及API,基于此 ...

最新文章

  1. 丢失/root目录导致命令行-bash-4.1#,解决方法
  2. Balanced Binary Tree leetcode java
  3. Matlab-贪心/贪婪算法
  4. ZZUOJ 10508: 数列游戏IV
  5. JS 点击复制Copy插件--Zero Clipboard
  6. 我对Linux输入输出重定向的小结
  7. python打开csv文件绘制折线图,[转载]python绘制简单折线图
  8. php 去掉无关数据,php 读取 mysql 表中的double数据,去掉多余的0
  9. 如何调用VS自带的数据源选择对话框
  10. linux查看磁盘使用情况及每个文件夹占用磁盘大小
  11. caffe框架的介绍
  12. 画出使用回溯法解0/1背包问题的解空间树
  13. 老电脑可以安装win11系统吗
  14. 聊天斗图微信表情包小程序源码下载支持长按发送好友
  15. Google Chrome v90.0.4430.212 正式版下载
  16. 程序员吐槽培训班简历造假,经验包装竟拿到阿里外包26k的offer
  17. 股票市场中有哪些是一般散户想不到但实际却很重要的知识?
  18. 微信体现计算机网络功能,教你微信提现如何免手续费
  19. 购计算机软件,计算机软件购销合同
  20. JS控制退格键删除内容

热门文章

  1. matlab中转置操作,如何转置MATLAB表?
  2. vue移动端实现电子签名画板
  3. android模拟鼠标键盘,有关通过Happy Android模拟器的鼠标和键盘操作进行手机游戏的详细设置的图形教程...
  4. 【keil/MDK5】编译生成bin文件和汇编文件
  5. Python处理Excel数据的方法
  6. 点分十进制IP和网络字节序IP互转
  7. 制图折断线_CAD制图规范及技巧总结大全
  8. arduino 智能车组装步骤_Arduino智能小车硬件安装说明
  9. unity2018关联不到vs_Unity和VS2019下载及配置流程
  10. python识别文字答题_头脑王者的Python答题助手——从OCR文字识别到Fiddler抓包