美团外卖系统架构演进与系统稳定性经验谈目录•个人简介•美团外卖业务发展历程•技术体系架构演进介绍•外卖业务稳定性的挑战•系统稳定性的处理原则个人简介北纬通信移动增值服务2006.7~2011.22011.3~2013.52013.5~新美大创新业务探索美团外卖架构组网易网易视频库网易应用网易新闻目录•个人简介•美团外卖业务发展历程•技术体系架构演进介绍•外卖业务稳定性的挑战•系统稳定性的处理原则美团外卖业务发展历程扩展中扩展中外卖配送美团外卖业务发展历程100w400w200w300w2013/112014/112015/052015/122016/05?WEB上线业务MVP在线支付APP占90%美团专送全国启动日交易额过亿新LOGO供给侧改革1000w目录•个人简介•美团外卖业务发展历程•技术体系架构演进介绍•外卖业务稳定性的挑战•系统稳定性的处理原则技术体系架构演进介绍技术架构:1.0业务起步:MVP阶段验证需求寻找产品和需求的切合点电话点餐-网络点餐快速开发功能快速调整流程快速发布上线美团外卖APP美团外卖WEB移动后台WEB后台dbwaimai订单列表技术体系架构演进介绍技术架构:2.0业务起步:规模化寻找规模化的业务产品形态提高运营效率用户业务系统商家业务系统dbwaimaimaster/slave运营业务系统公共服务系统快速开发多个业务系统复用工具库Util:http复用业务库AppWebI版PCApp打印机合同审核上单MQ订单商家技术体系架构演进介绍技术架构:3.0业务增长校园市场全国开展白领市场开拓美团专送启动平台活动增加用户激增订单激增系统级容错服务化重构中间件分库分表API订单数据层用户层应用层接口层服务层基础层访问层存储层性能监控统一配置中心MHA外卖App美团App点评App外卖商家NativeH5Nginx灰度MTThrift中间件OpenWeb商品商家MQKVES...AtlasDB异构DBDatabus技术体系架构演进介绍演进之路问题耦合相互影响容错差服务化中间件KV数据总线异步化系统架构多逻辑耦合直连DB服务化SOAMTThrift服务级容灾CacheRedis主从RedisCluster共用KV专用KVMQRabbitMQ外卖大集群订单集群其他集群延迟队列重试队列高级查询DBjoinlikeDB异构索引表DatabusElasticsearch离线任务Crontabquartz分布式调度HoraeDB一主一从一主多从LVS一主多从Atlas基础服务基本功能分流限流降级目录•个人简介•美团外卖业务发展历程•技术体系架构演进介绍•外卖业务稳定性的挑战•系统稳定性的处理原则外卖业务稳定性的挑战业务特点:高峰集中在中午、晚上饭点,爆发快系统挑战:高并发,一旦发生故障损失较大外卖业务稳定性的挑战用户浏览下单支付商家接单骑手配送中已送达用户评价结算业务特点:服务链条长系统挑战:依赖复杂外卖业务稳定性的挑战业务特点:发展快技术挑战:开发迭代快指标覆盖全规则变化快引入bug,稳定性风险发版频繁架构优化排不上期技术欠债项目周期短监控难度大目录•个人简介•美团外卖业务发展历程•技术体系架构演进介绍•外卖业务稳定性的挑战•系统稳定性的处理原则系统稳定性的处理原则99.99%系统可用性订单可用性系统稳定性的处理原则日常运行事前预警事后总结事故处理99.99%稳定性架构设计例行梳理和巡检全链路在线压测及时止损保护用户体验力保关键路径性能大盘业务大盘健康分析根本原因分析影响损失核算重构系统系统稳定性的处理原则日常运行稳定性架构设计大系统小做依赖稳定性原则保障用户体验的容错设计WEBAPIMQJOBWEBAPIMessageCenterTask读写QueryManage失败!服务器异常!null别看了,啥也没抱歉,您选的商家运力不足,请选择其他商家下单。异常情况下客户端的呈现客户端配合限流客户端配合降级只依赖稳定的服务将易变的部分拆分超时中断服务专一性独立的功能拆分为独立的服务系统稳定性的处理原则日常运行例行稳定性巡检静态梳理专项梳理指标巡检POIAPI定位banner定位频道用户Rank按场景Review关键链路调用放大情况梳理降低“高并发”,假高并发场景DB健康Reivew,大表,慢查询读写QPS,出轨,绿帽子降级方案演练性能大盘:不要放过尖刺业务大盘:定心丸报错大盘:定位好帮手系统稳定性的处理原则日常运行全链路在线压测线上引流压测全链路压测压测目标NginxWEBThriftRPCKVMQDB监控系统原始流量事务模拟第三方服务Mock染色异步阶梯加压流量录制Nginx分组ThriftRPC分组摘掉机器读流量回放写事务模拟流量染色异步阶梯加压告警自动终止排查性能瓶颈,上探系统容量,验证降级机制验证报警响应机制&指导设定警戒行动线系统稳定性的处理原则事前预警性能大盘业务监控健康分析MQAPIServiceCPUIdleDB读、写QPSTP90响应时间超时率业务大盘脚印系统指标变化趋势KVflumelogflumelogflumelogflumelogKafkastormHBase下单,各种信息,ip支付推送系统稳定性的处理原则事故处理及时止损保护用户体验力保关键路径应用APP接收请求请求令牌处理请求拒绝请求统一配置管理流控API:jar策略生成KEY获取令牌添加令牌熔断本地令牌日志监控KV降级管理客户端启动限流回滚!分流启动降级预案限流客户端配合降级非关键路径模块降级系统稳定性的处理原则事故总结根本原因分析损失核算系统&流程改进IncidentReviews-Askthekeyquestions:•Whatwentwrong?•Howcouldwehavedetecteditsooner?•Howcouldwehavepreventedit?•Howcanwepreventthisclassofprobleminthefuture?•Howcanweimproveourbehaviorfornexttime?10:00收到DBCPU高的报警10:20收到服务A接口超时报警10:23DBA定位分析10:25xx同学回滚服务10:34服务恢复5whys损失的订单系统改进流程改进开发红线系统稳定性的处理原则RANK用户个性化推荐附近商家门店商品中心订单中心下单推单多种接单方式支付平台进店广告系统线上营销搜索引擎行为数据收集实时数据收集平台风控策略商业分析/运营/BI门店运营/容器管理接单APPPC打印机派单配送骑手调度中心GIS路径规划调度引擎策略引擎骑手服务配送实时跟踪系统离线/实时数据计算挖掘平台特征抽取与机器学习模型训练基础数据服务活动计算引擎力保关键路径系统稳定性的处理原则预案建设上下游的超时约定。性能是功能的一部分容错处理:超时,幂等,重试。稳定是功能的一部分用户端,商家端的体验保障。用户体验是一个完整的过程开启商家列表将按照默认排序预案AA动作B动作C动作规则引擎统一配置中心应用操作审计监控告警系统稳定性的处理原则系统稳定性的处理原则需求管理项目开发测试发布上线监控报警故障处理•Task追踪•大功能设计Review•重大技术方案变更Review•上下游依赖变化Review•分支管理•代码交叉Review•代码静态检查•代码规范•日志规范•引入第三方工具、JAR包SOP•依赖外部服务SOP•数据库迁移/拆分SOP•测试环境使用规范•RD完成冒烟测试•回归关键路径及主要版本•项目提测流程规范•线上压测流程•新业务上线SOP•线上发布SOP•线上灰度SOP•数据库线上操作SOP•线上容量调整SOP•验证业务效果•业务指标监控•系统监控Dashboard•第一时间想上级反馈•及时周知业务方:问题,影响范围,解决方案,预计恢复时间•线上服务降级SOP稳定性的护航者:SOP。每一步操作都是经过认真思考的。系统稳定性的处理原则发布内容发布者发布时间基本信息1多系统协同步骤发布步骤3对下游的影响评估对上游的影响评估自身负载变化评估影响预估4回滚的版本号回滚步骤回滚措施5按城市按功能按百分比灰度策略6降级方案1降级方案2。。。降级方案7日志,报错数性能指标关键流程回归新功能测试发布后验证8可以改进的点casestudy发布总结9效果分析完成10关键业务流程测试新功能测试SQLReview代码Review发布前验证2将流程自动化进行到底。系统稳定性的处理原则发版窗口,晚高峰前发。.灰度!灰度!灰度!nojoin,SQLReview,慢查询巡检。慢查询往往闯大祸。做好对自身的保护,对依赖的熔断。防御式编程,不要相信任何人和服务。每一步均严谨可信赖,危机时不慌、不乱、不遗不漏。工具化,自动化。SOP保平安。例行巡检,DB,调用链。你所担心的一定会发生,可能马上发生。总结