2000万日订单背后:美团外卖客户端高可用建设体系

背景

美团外卖从2013年11月开始起步,通过数年的高速发展,一直在不断地刷新着记录。2018年5月19日,日订单量峰值突破2000万单,已经成为全球规模最大的外卖平台。业务的快速发展对系统稳定性提出了更高的要求,如何为线上用户提供高稳定的服务体验,保障全链路业务和系统高可用运行,不只须要后端服务支持,更须要在端上提供全面的技术保障。而相对服务端而言,客户端运行环境千差万别,不可控因素多,面对突发问题应急能力差。所以,构建客户端的高可用建设体系,保障服务稳定高可用,不只是对工程师的技术挑战,也是外卖平台的核心竞争力之一。html

高可用建设体系的思路

一个设计良好的大型客户端系统每每是由一系列各自独立的小组共同开发完成的,每个小组都应当具备明肯定义的的职责划分。各业务模块之间推行“松耦合”开发模式,让业务模块拥有隔离式变动的能力,是一种能够同时提高开发灵活性和系统健壮性的有效手段。这是美团外卖总体的业务架构,总体上以商品交易链路(门店召回,商品展现,交易)为核心方向进行建设,局部上依据业务特色和团队分工分红多个可独立运维单元单独维护。可独立运维单元的简单性是可靠性的前提条件,这使得咱们可以持续关注功能迭代,不断完成相关的工程开发任务。前端

图片1

咱们将问题依照生命周期划分为三个阶段:发现、定位、解决,围绕这三个阶段的持续建设,构成了美团外卖高可用建设体系的核心。后端

美团外卖质量保障体系全景图

这是美团外卖客户端总体质量体系全景图。总体思路:监控报警,日志体系,容灾。缓存

图片2

经过采集业务稳定性,基础能力稳定性,性能稳定性三大类指标数据并上报,衡量客户端系统质量的标准得以完善;经过设立基线,应用特定业务模型对这一系列指标进行监控报警,客户端具有了分钟级感知核心链路稳定性的能力;而经过搭建日志体系,整个系统有了提取关键线索能力,多维度快速定位问题。当问题一旦定位,咱们就能经过美团外卖的线上运维规范进行容灾操做:降级,切换通道或限流,从而保证总体的核心链路稳定性。安全

监控&报警

监控系统,处于整个服务可靠度层级模型的最底层,是运维一个可靠的稳定系统必不可少的重要组成部分。为了保障全链路业务和系统高可用运行,须要在用户感知问题以前发现系统中存在的异常,离开了监控系统,咱们就没有能力分辨客户端是否是在正常提供服务。服务器

图片3

按照监控的领域方向,能够分红系统监控与业务监控。 系统监控,主要用于基础能力如端到端成功率,服务响应时长,网络流量,硬件性能等相关的监控。系统监控侧重在无业务侵入和定制系统级别的监控,更多侧重在业务应用的底层,多属于单系统级别的监控。 业务监控,侧重在某个时间区间,业务的运行状况分析。业务监控系统构建于系统监控之上,能够基于系统监控的数据指标计算,并基于特定的业务介入,实现多系统之间的数据联合与分析,并根据相应的业务模型,提供实时的业务监控与告警。按照业务监控的时效性,能够继续将其细分红实时业务监控与离线业务监控。网络

  • 实时业务监控,经过实时的数据采集分析,帮助快速发现及定位线上问题,提供告警机制及介入响应(人工或系统)途径,帮助避免发生系统故障。
  • 离线的业务监控,对必定时间段收集的数据进行数据挖掘、聚合、分析,推断出系统业务可能存在的问题,帮助进行业务上的从新优化或改进的监控。

美团外卖的业务监控,大部分属于实时业务监控。借助美团统一的系统监控建设基础,美团外卖联合公司其余部门将部分监控基础设施进行了改造、共建和整合复用,并打通造成闭环(监控,日志,回捞),咱们构建了特定符合外卖业务流程的实时业务监控; 而离线的业务监控,主要经过用户行为的统计与业务数据的挖掘分析,来帮助产品设计,运营策略行为等产生影响,目前这部分监控主要由美团外卖数据组提供服务。值得特别说明的是单纯的信息汇总展现,无需或没法当即作出介入动做的业务监控,能够称之为业务分析,如特定区域的活动消费状况、区域订单数量、特定路径转换率、曝光点击率等,除非这些数据用来决策系统实时状态健康状况,帮助产生系统维护行为,不然这部分监控由离线来处理更合适。架构

图片4

咱们把客户端稳定性指标分为3类维度:业务稳定性指标,基础能力稳定性指标,性能稳定性指标。对不一样的指标,咱们采用不一样的采集方案进行提取上报,汇总到不一样系统;在设定完指标后,咱们就能够制定基线,并依照特定的业务模型制定报警策略。美团外卖客户端拥有超过40项度量质量指标,其中25项指标支持分钟级别报警。报警通道依据紧急程度支持邮件,IM和短信三条通道。所以,咱们团队具有及时发现影响核心链路稳定性的关键指标变化能力。运维

一个完善的监控报警系统是很是复杂的,所以在设计时必定要追求简化。如下是《Site Reliability Engineering: How Google Runs Production Systems》一书中提到的告警设置原则:工具

最能反映真实故障的规则应该可预测性强,很是可靠,而且越简单越好 不经常使用的数据采集,汇总以及告警配置应该定时清除(某些SRE团队的标准是一季度未使用即删除) 没有暴露给任何监控后台、告警规则的采集数据指标应该定时清除

经过监控&报警系统,2017年下半年美团外卖客户端团队共发现影响核心链路稳定性超过20起问题:包括爬虫、流量、运营商403问题、性能问题等。目前,全部问题均已所有改造完毕。

日志体系

监控系统的一个重要特征是生产紧急告警。一旦出现故障,须要有人来调查这项告警,以决定目前是否存在真实故障,是否须要采起特定方法缓解故障,直至查出致使故障的问题根源。

简单定位和深刻调试的过程必需要保持很是简单,必须可以被团队中任何一我的所理解。日志体系,在简化这一过程当中起到了决定性做用。

图片5

美团外卖的日志体系整体分为3大类:即全量日志系统,个体日志系统,异常日志系统。全量日志系统,主要负责采集总体性指标,如网络可用性,埋点可用性,咱们能够经过他了解到系统总体大盘,了解总体波动,肯定问题影响范围;异常日志系统,主要采集异常指标,如大图问题,分享失败,定位失败等,咱们经过他能够迅速获取异常上下文信息,分析解决问题;而个体日志系统,则用于提取个体用户的关键信息,从而针对性的分析特定客诉问题。这三类日志,构成了完整的客户端日志体系。

图片2

日志的一个典型使用场景是处理单点客诉问题,解决系统潜在隐患。个体日志系统,用于简化工程师提取关键线索步骤,提高定位分析问题效率。在这一领域,美团外卖使用的是点评平台开发的Logan服务。做为美团移动端底层的基础日志库,Logan接入了集团众多日志系统,例如端到端日志、用户行为日志、代码级日志、崩溃日志等,而且这些日志所有都是本地存储,且有多重加密机制和严格的权限审核机制,在处理用户客诉时才对数据进行回捞和分析,保证用户隐私安全。

经过设计和实施美团外卖核心链路日志方案,咱们打通了用户交易流程中各系统如订单,用户中心,Crash平台与Push后台之间的底层数据同步;经过输出标准问题分析手册,针对常见个体问题的分析和处理得以标准化;经过制定日志捞取SOP并按期演练,线上追溯能力大幅提高,平常客诉绝大部分可在30分钟内定位缘由。在这一过程当中,经过个体暴露出影响核心链路稳定性的问题也均已所有改进/修复。

故障排查是运维大型系统的一项关键技能。采用系统化的工具和手段而不只仅依靠经验甚至运气,这项技能是能够自我学习,也能够内部进行传授。

容灾备份

针对不一样级别的服务,应该采起不一样的手段进行有效止损。非核心依赖,经过降级向用户提供可伸缩的服务;而核心依赖,采用多通道方式进行依赖备份容灾保证交易路径链路的高可用;异常流量,经过多维度限流,最大限度保证业务可用性的同时,给予用户良好的体验。总结成三点,即:非核心依赖降级、核心依赖备份、过载保护限流。接下来咱们分别来阐述这三方面。

降级

图片6

在这里选取美团外卖客户端总体系统结构关系图来介绍非核心依赖降级建设概览。图上中间红色部分是核心关键节点,即外卖业务的核心链路:定位,商家召回,商品展现,下单;蓝色部分,是核心链路依赖的关键服务;黄色部分,是可降级服务。咱们经过梳理依赖关系,改造先后端通信协议,实现了客户端非核心依赖可降级;然后端服务,经过各级缓存,屏蔽隔离策略,实现了业务模块内部可降级,业务之间可降级。这构成了美团外卖客户端总体的降级体系。

右边则是美团外卖客户端业务/技术降级开关流程图。经过推拉结合,缓存更新策略,咱们可以分钟级别同步降级配置,快速止损。

目前,美团外卖客户端有超过20项业务/能力支持降级。经过有效降级,咱们避开了1次S2级事故,屡次S三、S4级事故。此外,降级开关总体方案产出SDK horn,推广至集团酒旅、金融等其余核心业务应用。

备份

核心依赖备份建设上,在此重点介绍美团外卖多网络通道。网络通道,做为客户端的最核心依赖,倒是整个全链路体系最不可控的部分,常常出现问题:网络劫持,运营商故障,甚至光纤被物理挖断等大大小小的故障严重影响了核心链路的稳定性。所以,治理网络问题,必需要建设可靠的多通道备份。

图片7

这是美团外卖多网络通道备份示意图。美团外卖客户端拥有Shark、HTTP、HTTPS、HTTP DNS等四条网络通道:总体网络以Shark长连通道为主通道,其他三条通道做为备份通道。配合完备的开关切换流程,能够在网络指标发生骤降时,实现分钟级别的分城市网络通道切换。而经过制定故障应急SOP并不断演练,提高了咱们解决问题的能力和速度,有效应对各种网络异常。咱们的网络通道开关思路也输出至集团其余部门,有效支持了业务发展。

限流

服务过载是另外一类典型的事故。究其缘由大部分状况下都是因为少数调用方调用的少数接口性能不好,致使对应服务的性能恶化。若调用端缺少有效降级容错,在某些正常状况下可以下降错误率的手段,如请求失败后重试,反而会让服务进一步性能恶化,甚至影响原本正常的服务调用。

美团外卖业务在高峰期订单量已达到了至关高的规模量级,业务系统也及其复杂。根据以往经验,在业务高峰期,一旦出现异常流量疯狂增加从而致使服务器宕机,则损失不可估量。

所以,美团外卖先后端联合开发了一套“流量控制系统”,对流量实施实时控制。既能平常保证业务系统稳定运转,也能在业务系统出现问题的时候提供一套优雅的降级方案,最大限度保证业务的可用性,在将损失降到最低的前提下,给予用户良好的体验。

图片8

整套系统,后端服务负责识别打标分类,经过统一的协议告诉前端所标识类别;而前端,经过多级流控检查,对不一样流量进行区分处理:弹验证码,或排队等待,或直接处理,或直接丢弃。 面对不一样场景,系统支持多级流控方案,可有效拦截系统过载流量,防止系统雪崩。此外,整套系统拥有分接口流控监控能力,可对流控效果进行监控,及时发现系统异常。整套方案在数次异常流量增加的故障中,经受住了考验。

发布

随着外卖业务的发展,美团外卖的用户量和订单量已经达到了至关的量级,在线直接全量发布版本/功能影响范围大,风险高。 版本灰度和功能灰度是一种可以平滑过渡的发布方式:即在线上进行A/B实验,让一部分用户继续使用产品(特性)A,另外一部分用户开始使用产品(特性)B。若是各项指标平稳正常,结果符合预期,则扩大范围,将全部用户都迁移到B上来,不然回滚。灰度发布能够保证系统的稳定,在初试阶段就能够发现问题,修复问题,调整策略,保证影响范围不被扩散。

美团外卖客户端在版本灰度及功能灰度已较为完善。 版本灰度 iOS采用苹果官方提供的分阶段发布方式,Android则采用美团自研的EVA包管理后台进行发布。这两类发布均支持逐步放量的分发方式。 功能灰度 功能发布开关配置系统依据用户特征维度(如城市,用户ID)发布,而且整个配置系统有测试和线上两套不一样环境,配合固定的上线窗口,保证上线的规范性。 对应的,相应的监控基础设施也支持分用户特征维度(如城市,用户ID)监控,避免了那些没法在总体大盘体现的灰度异常。此外,不管版本灰度或功能灰度,咱们均有相应最小灰度周期和回滚机制,保证整个灰度发布过程可控,最小化问题影响。

线上运维

图片9

在故障来临时如何应对,是整个质量保障体系中最关键的环节。没有人天生就能完美的处理紧急状况,面对问题,恰当的处理须要平时不断的演练。 围绕问题的生命周期,即发现、定位、解决(预防),美团外卖客户端团队组建了一套完备的处理流程和规范来应对影响链路稳定性的各种线上问题。总体思路:创建规范,提早建设,有效应对,过后总结。在不一样阶段用不一样方式解决不一样问题,事前肯定完整的事故流程管理策略,并确保平稳实施,常常演练,问题的平均恢复时间大大下降,美团外卖核心链路的高稳定性才可以得以保障。

将来展望

当前美团外卖业务仍然处于快速增加期。伴随着业务的发展,背后支持业务的技术系统也日趋复杂。在美团外卖客户端高可用体系建设过程当中,咱们但愿可以经过一套智能化运维系统,帮助工程师快速、准确的识别核心链路各子系统异常,发现问题根源,并自动执行对应的异常解决预案,进一步缩短服务恢复时间,从而避免或减小线上事故影响。

诚然,业界关于自动化运维的探索有不少,但多数都集中在后台服务领域,前端方向成果较少。咱们外卖技术团队目前也在同步的探索中,正处于基础性建设阶段,欢迎更多业界同行跟咱们一块儿讨论、切磋。

参考资料

  1. Site Reliability Engineering: How Google Runs Production Systems
  2. 美团点评移动端基础日志库——Logan
  3. 美团点评移动网络优化实践

做者简介

陈航,美团高级技术专家。2015年加入美团,目前负责美团外卖iOS团队,对移动端架构演进,监控报警备份容灾,移动端线上运维等领域有深入理解。

富强,美团资深工程师。2015年加入美团,是外卖iOS的早期开发者之一,目前做为美团外卖iOS基础设施小组负责人,负责外卖基础设施及广告运营相关业务。

徐宏,美团高级工程师。2016年加入美团,目前做为外卖iOS团队主力开发,负责移动端APM性能监控,高可用基础设施支撑相关推动工做。

招聘

美团外卖长期招聘iOS、Android、FE高级/资深工程师和技术专家,可Base在北京、上海、成都,欢迎有兴趣的同窗将简历发送至chenhang03#meituan.com。若是对咱们团队感兴趣,能够关注咱们的专栏

相关文章
相关标签/搜索