AMS运营平台从百万到亿级成长之路--徐汉彬
2020-02-27 213浏览
- 1.
- 2.AMS运营平台从百万到亿级成长之路 ——Hansionxu(徐汉彬)
- 3.自我介绍 Hansionxu(徐汉彬) 腾讯高级工程师(SNG增值产品部),AMS运营平台技术负责人。 曾就职于阿里巴巴、小满科技。 技术博客:hansionxu.blog.163.com
- 4.内容目录 AMS的简单介绍 AMS平台的三次重构 开发效率与价值
- 5.AMS平台介绍 AMS:Activity Manger System 活动运营平台(PHP) 承载QQ会员的活动运营和推广,接入了众多业务。 网上营业厅 ......
- 6.AMS的容量 每日请求量:3.5-5亿 每个月上线:近400个推广活动
- 7.AMS的容量 2012年初 2015年5月 CGI日请求量 200-500万 3.5-5亿 月上线活动 20+ 近400个 业务使用者 1个小组 多个部门 1个活动的开发耗时 1周左右 1-2天/不需要开发 支持的推广业务 PC端游戏活动 各类业务
- 8.2012年初的老AMS部署 前端 CDN OZ上报 CGI入口 提示语 JS前端组件 TGW/10台实体机Apache 框架基础逻辑 逻辑层 TTC 活动常规检测 营销平台 MySQL/主备 存储层 OP/Rule Server IDIP互娱接口 模调监控 Bitmap 离线脚本 白名单 竞拍server 导数据 邀请好友 OIGW/OIDB 支付回滚 Portal 积分server …… ……
- 9.2012年初的老AMS
- 10.TTC&MySQL TTC&MySQL: (1)百库百表 (2)类似memcache的内存级热点数据缓存 (3)间隔N秒的批量写入
- 11.老AMS遇到的问题 1. 产品嫌我们上线活动太慢,1周的开发时间,需求堆积 2. 开发的烦恼,要开发1000-2000行的JS代码,还要写一些PHP 3. CGI代码凌乱,很多冗余和结构不合理(历史原因) 4. Web服务器日志打印在本地,日志和告警管理混乱
- 12.AMS第一次重构和优化 • • • • • 活动开发:我们不想写重复的代码 PHP代码,管理后台化 后端和前端Zero框架打通,前端组件化 按照设计模式分层,统一接口层 搭建独立日志管理机器,优化告警系统
- 13.AMS的设计 显示层(V) 控制层(C) 逻辑层(M) API ams.php 统一入口,通过url的get参数 路由,主要走ajax和前端交互。 分发,调 用Module,返 回View 根据功能分控制器处理,如:参与 活动、拉活动信息、查询信息 根据活动配置调用 相应规则、发货 规则、发货按文件独立,方便扩展 以及维护。目前已支持N种规则判 断和发货型功能 公共API 包含各种常用API,例如:TTC 、CMEM、HTTP代理、统一日志 、IDIP游戏接口(N款游戏)
- 14.PHP代码 PHP代码管理后台化,全部变为配置。(活动开发不写PHP)
- 15.前端JS代码 JS前端封装为zero组件 前端JS:代码从1000-2000行缩短为不足100行
- 16.活动开发效率升级 单活动项目 老AMS AMS1.0 前端JS代码量 1000-2000行 100-200行 PHP代码 少量代码 无/管理后台 开发耗时 1周左右 3-4天 结果: AMS逐渐推广到开发其他小组,使 用的人越来越多。
- 17.2012年7月的AMS1.0部署 前端 ZERO CDN CGI入口 逻辑层 提示语 Js组件 TGW/60台虚拟机,VC1(Apache) 框架基础逻辑 TTC 存储层 OZ上报 活动常规检测 营销平台 MySQL/主备 Bitmap OP/Rule 接口层 L5 Tmem IDIP互娱接口 模调监控 日志server 离线脚本 白名单 导数据 邀请好友 OIGW/OIDB 支付回滚 Portal 积分server …… 日志机器
- 18.AMS1.0架构
- 19.AMS1.0的问题 1. 更多的新项目接入,性能压力暴增 2. 礼包、会员等价金钱,稳定性和监控受到挑战 3. 使用人数增多,管理后台太过粗糙 新的问题,诞生于旧的解决方案。
- 20.AMS第二次重构和优化 • • • • 解决性能瓶颈 增强系统稳定性和健壮性 重构管理后台 增强平台安全
- 21.请求量的新挑战 2013年,原本架构瓶颈支持1000多万,我们接到一个项目, 一天6000万PV的推广项目(手机QQ的“天天爱消除”,手Q 第一个手游推广项目),怎么办?
- 22.扩容与优化 工作难点 1. 各个扩容和优化的技术点 2. 过载保护、容灾、监控 核心工作 1. 服务扩容 2. 去单点风险,保证健壮性 3. 解决性能瓶颈
- 23.去掉单点风险 解决方式 1. 建立热备服务,自动或者手动切换。(例如,建立TTC的热备) 2. 服务Server接入L5,不能只有1台机器
- 24.存储层优化 老的存储分布: 1. TTC,空节点查询问题,单点风险,内存cache太小。 2. tmem,接入机器需要接入L5,数量少。 3. bitmap,服务器是公用的,单点。
- 25.存储优化:空节点问题 TTC的空节点查询问题: 业务特点:每当有用户来参加活动,会先查询用户是否有活动参与记录。 导致问题:大访问量下造成大量空查询,数据不在TTC的cache层中,直接落 到MySQL,冲击MySQL。
- 26.存储优化:空节点问题 TTC的空节点查询解决方法: 用tmem再追加数据是否存在的标志位
- 27.存储优化:频繁写入 MySQL的同步问题: 业务高峰期,MySQL主库大量写入,从库追不上主库。(Binlog同步) 解决方案:直接替换为Tmem
- 28.MP抽奖接口问题 抽奖接口存在的问题: 1. 当超过1000/s,响应慢 2. 部分请求甚至超时
- 29.MP抽奖接口问题 问题的原因(堵车): 1. 高峰期,中转server可用进程,被响应时间很长的抽奖请求耗 尽(100*3台),等待MP返回结果,Apache的进程也被挂住,被 迫启用更多的服务进程,容易陷入高负载。 2. 影响其他正常的业务。
- 30.MP抽奖接口问题 解决措施一: 1. “修路”----机器扩容,增加最大进程数目(200*5台) 2. 专线专用----读写分离(3台做读接口,2台写接口)
- 31.MP抽奖接口问题 解决措施二: 1. 业务层面规避,后端cgi层做请求过滤,直接返回不中奖。
- 32.MP中转Server微线程(协程)改造 原来的Server: 单机,开启200个服务进程。 资源浪费,占据大量内存,上下文切换。 改造后的Server: 单机,开启4个服务进程(复用虚拟机器核数),1个进程最多可 支持200个微线程,微线程处理。 机器负载,高峰期下降大概50%。
- 33.管理后台:问题 1. 管理后台界面粗糙,新人和其他组的同学操作容易出错 2. 多个管理后台,使用复杂 3. 产品同事看不懂,难用
- 34.管理后台:重构 简单易用,让产品和运营同学看懂,并且轻松使用 结果: 1. 新人和其他组的同学,快速上手,轻松操作 2. 开发效率进一步提升,大量活动开始走免测,耗时为1-2天 3. 模板化活动,运营同学独立配置,直接上线
- 35.AMS优化结果 单活动项目 AMS1.0 AMS2.0 性能瓶颈 1000多万 1亿 使用者 开发中心 整个部门 开发耗时 3-4天 1-2天 支持业务 PC游戏 PC/手游/手Q业务
- 36.2013年8月的AMS2.0 PC端 CDN ZERO CGI入口 OZ上报 提示语 TGW/25台虚拟机,VC4 逻辑层 PC端 逻辑层 移动端 AMS的PC端 TTC 存储层 移动端 营销平台 MySQL/主备 Bitmap 接口层 L5 Tmem 回流脚本 邀请好友 OIGW/OIDB IDIP互娱接口 模调监控 日志server 离线脚本 白名单 AMS移动端 …… Portal 积分server …… 日志机器
- 37.AMS2.0架构图
- 38.AMS2.0遇到的问题 1. 接入大量移动端推广活动,流量继续暴增 2. PC/移动端两个分支版本维护困难 3. 接入更多合作业务接口,安全性挑战更高
- 39.AMS第三次重构和优化 • • • • 再次提升平台的性能瓶颈 合并PC和移动端版本 解决安全风险 支持高并发业务
- 40.请求压力持续增长 AMS平台的每日访问量持续增长,突破亿级别: 1. 上线活动越来越多,移动端占比变大。 2. 接入手机QQ、游戏中心等新的移动端业务。
- 41.性能:升级&优化 1. 彻底告别TTC(MySQL),升级为Cmem,改进的接口, 测速显著提升。 2. 升级bitmap为Cbitmap,解决单点风险,Cbitmap是个 集群。 全面进入NoSQL存储时代
- 42.性能:降低CGI响应时间 对AMS的CGI的每个步骤,添加耗时监控,统计和分析,逐个优化。
- 43.支持高并发需求 剑灵秒杀活动:1分钟130万请求,平均2.1w/s,高峰5w+/s
- 44.实现秒杀保护机制 1. 队列服务。 2. 悲观锁:具有强烈的独占和排他特性。(mutex、rwlock等) 3. 乐观锁:不锁定,允许修改,通过“版本号控制”。
- 45.业务安全:Session重复问题 发货类等业务,同一个子活动号下: 在当前业务处理完毕之前,不再接受同一个QQ号的第二个请求。
- 46.安全:解决Session重复 单用户的Session重复解决方案:
- 47.安全:礼包超发风险 礼包的超发风险(2012年一些电商企业的促销)
- 48.安全:礼包超发风险 解决方案: 通过“乐观锁”的方式,控制资源余量的原子加操作。
- 49.监控与过载保护 1. 日志机器上的日志,成功率自动统计&告警,支持自动 暂停成功率低的子活动(例如某个礼包)。 2. 信号量控制单台Web机器的并发数目,通常用来控制 具体活动,保护一些特殊的后台服务接口。
- 50.异地部署 聚集与分散 (1)核心服务和部署成本大的聚集,走内网专线(30ms) (2)非核服务分散
- 51.AMS异地部署 手Q游戏中心:上海机房搭建中间Server,通过专线访问深 圳机房的AMS。
- 52.AMS优化结果 单活动项目 AMS2.0 AMS3.0(2014年6月) 单日请求量 日均5000万 1亿 性能瓶颈 1亿 3亿 使用者 自己部门 多个部门 支持业务 PC/手游/手Q业务 全面支持移动端/PC 月上线活动 50-80 100+
- 53.2014年5月的AMS3.0 前端 CDN ZERO PC端组件 CGI入口 逻辑层 移动端组件 TGW/30台虚拟机,VC4 框架基础逻辑 活动常规检测 OP/Rule MP/Curl CBitmap 存储层 接口层 IDIP/IEG发货 模调监控 Cmem/Ckv 日志server 离线脚本 其他组件 白名单 回流脚本 邀请好友 …… OIGW/OIDB SRF/Portal/Tips 积分server …… 日志机器
- 54.AMS的价值:解放开发人力 AMS发展阶段: 1. 第一个阶段:不写重复的代码,将代码变为配置。 2. 第二个阶段:将配置文件变为管理后台。 3. 第三个阶段:运营同学承担管理后台的配置工作,解放开发人力。
- 55.模板化生成
- 56.简化活动开发流程 设计 重构 开发 体验\测试 设计 组装 体验 发布 产品 模块开发 体验/测试 发布 开发 页面模块化 发布
- 57.