背景

美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验。最主要的收获包括两点:

  1. 即时物流业务对故障和高延迟的容忍度极低,在业务复杂度提升的同时也要求系统具备分布式、可扩展、可容灾的能力。即时物流系统阶段性的逐步实施分布式系统的架构升级,最终解决了系统宕机的风险。

  2. 围绕成本、效率、体验核心三要素,即时物流体系大量结合AI技术,从定价、ETA、调度、运力规划、运力干预、补贴、核算、语音交互、LBS挖掘、业务运维、指标监控等方面,业务突破结合架构升级,达到促规模、保体验、降成本的效果。

本文主要介绍在美团即时物流分布式系统架构逐层演变的进展中,遇到的技术障碍和挑战:

  • 订单、骑手规模大,供需匹配过程的超大规模计算问题。

  • 遇到节假日或者恶劣天气,订单聚集效应,流量高峰是平常的十几倍。

  • 物流履约是线上连接线下的关键环节,故障容忍度极低,不能宕机,不能丢单,可用性要求极高。

  • 数据实时性、准确性要求高,对延迟、异常非常敏感。

美团即时物流架构

美团即时物流配送平台主要围绕三件事展开:一是面向用户提供履约的SLA,包括计算送达时间ETA、配送费定价等;二是在多目标( 成本、效率、体验 )优化的背景下,匹配最合适的骑手;三是提供骑手完整履约过程中的辅助决策,包括智能语音、路径推荐、到店提醒等。

在一系列服务背后,是美团强大的技术体系的支持,并由此沉淀出的配送业务架构体系,基于架构构建的平台、算法、系统和服务。庞大的物流系统背后离不开分布式系统架构的支撑,而且这个架构更要保证高可用和高并发。

分布式架构,是相对于集中式架构而言的一种架构体系。分布式架构适用CAP理论( Consistency 一致性,Availability 可用性,Partition Tolerance 分区容忍性 )。在分布式架构中,一个服务部署在多个对等节点中,节点之间通过网络进行通信,多个节点共同组成服务集群来提供高可用、一致性的服务。

早期,美团按照业务领域划分成多个垂直服务架构;随着业务的发展,从可用性的角度考虑做了分层服务架构。后来,业务发展越发复杂,从运维、质量等多个角度考量后,逐步演进到微服务架构。这里主要遵循了两个原则:不宜过早的进入到微服务架构的设计中,好的架构是演进出来的不是提前设计出来的。

分布式系统实践

上图是比较典型的美团技术体系下的分布式系统结构:依托了美团公共组件和服务,完成了分区扩容、容灾和监控的能力。前端流量会通过HLB来分发和负载均衡;在分区内,服务与服务会通过OCTO进行通信,提供服务注册、自动发现、负载均衡、容错、灰度发布等等服务。当然也可以通过消息队列进行通信,例如Kafka、RabbitMQ。在存储层使用Zebra来访问分布式数据库进行读写操作。利用CAT( 美团开源的分布式监控系统 ) 进行分布式业务及系统日志的采集、上报和监控。分布式缓存使用Squirrel+Cellar的组合。分布式任务调度则是通过Crane。

在实践过程还要解决几个问题,比较典型的是集群的扩展性,有状态的集群可扩展性相对较差,无法快速扩容机器,无法缓解流量压力。同时,也会出现节点热点的问题,包括资源不均匀、CPU使用不均匀等等。

首先,配送后台技术团队通过架构升级,将有状态节点变成无状态节点,通过并行计算的能力,让小的业务节点去分担计算压力,以此实现快速扩容。

第二是要解决一致性的问题,对于既要写DB也要写缓存的场景,业务写缓存无法保障数据一致性,美团内部主要通过Databus来解决,Databus是一个高可用、低延时、高并发、保证数据一致性的数据库变更实时传输系统。通过Databus上游可以监控业务Binlog变更,通过管道将变更信息传递给ES和其他DB,或者是其他KV系统,利用Databus的高可用特性来保证数据最终是可以同步到其他系统中。

第三是我们一直在花精力解决的事情,就是保障集群高可用,主要从三个方面来入手,事前较多的是做全链路压测评,估峰值容量;周期性的集群健康性检查;随机故障演练( 服务、机器、组件 )。事中做异常报警( 性能、业务指标、可用性 );快速的故障定位( 单机故障、集群故障、IDC故障、组件异常、服务异常 );故障前后的系统变更收集。事后重点做系统回滚;扩容、限流、熔断、降级;核武器兜底。

单IDC的快速部署&容灾

单IDC故障之后,入口服务做到故障识别,自动流量切换;单IDC的快速扩容,数据提前同步,服务提前部署,Ready之后打开入口流量;要求所有做数据同步、流量分发的服务,都具备自动故障检测、故障服务自动摘除;按照IDC为单位扩缩容的能力。

多中心尝试

美团IDC以分区为单位,存在资源满排,分区无法扩容。美团的方案是多个IDC组成虚拟中心,以中心为分区的单位;服务无差别的部署在中心内;中心容量不够,直接增加新的IDC来扩容容量。

单元化尝试

相比多中心来说,单元化是进行分区容灾和扩容的更优方案。关于流量路由,美团主要是根据业务特点,采用区域或城市进行路由。数据同步上,异地会出现延迟状况。SET容灾上要保证同本地或异地SET出现问题时,可以快速把SET切换到其他SET上来承担流量。

智能物流的核心技术能力和平台沉淀

机器学习平台,是一站式线下到线上的模型训练和算法应用平台。之所以构建这个平台,目的是要解决算法应用场景多,重复造轮子的矛盾问题,以及线上、线下数据质量不一致。如果流程不明确不连贯,会出现迭代效率低,特征、模型的应用上线部署出现数据质量等障碍问题。

JARVIS是一个以稳定性保障为目标的智能化业务运维AIOps平台。主要用于处理系统故障时报警源很多,会有大量的重复报警,有效信息很容易被淹没等各种问题。此外,过往小规模分布式集群的运维故障主要靠人和经验来分析和定位,效率低下,处理速度慢,每次故障处理得到的预期不稳定,在有效性和及时性方面无法保证。所以需要AIOps平台来解决这些问题。

未来的挑战

经过复盘和Review之后,我们发现未来的挑战很大,微服务不再“微”了,业务复杂度提升之后,服务就会变得膨胀。其次,网状结构的服务集群,任何轻微的延迟,都可能导致的网络放大效应。另外复杂的服务拓扑,如何做到故障的快速定位和处理,这也是AIOps需要重点解决的难题。最后,就是单元化之后,从集群为单位的运维到以单元为单位的运维,也给美团业务部署能力带来很大的挑战。

从下单到享用,美团外卖背后的分布式架构设计相关推荐

  1. 全球AI技术开放日之走进美团 :探索美团外卖背后的AI大脑

    全球 AI 技术开放日(系列)是 AICamp 发起的学习和练习 AI 技术的一系列技术交流学习活动.活动组织国内外 AI 技术专家学者走进优秀的 AI 技术公司,和公司的 AI.机器学习.数据分析部 ...

  2. 和硅谷AI专家一起走进美团,探索美团外卖背后的AI大脑

    " 美团外卖目前覆盖了上百万商家和上亿菜品.如何做到实时搜索.推荐以及商家管控和智能套餐搭配等业务? 美团外卖每天有50万以上骑手穿梭在大街小巷.如何使用目前最先进语音识别.NLU.机器学习 ...

  3. 美团外卖的用户画像怎么设计?用户画像全流程讲解!

    陈旸 | 作者 王兴说过,我们已经进入到互联网的下半场.在上半场,也就是早期的互联网时代,你永远不知道在对面坐的是什么样的人.那个年代大部分人还是 QQ 的早期用户.在下半场,互联网公司已经不新鲜了, ...

  4. google背后的分布式架构

    您还未登录 ! 登录 注册 群组首页 → 互联网 → 大网络 → 论坛 发表回复 google背后的分布式架构 dogstar 2008-05-29 Google背后的分布式计算架构策略 Google ...

  5. 美团外卖uml流程图_美团即时物流的分布式系统架构设计

    编辑推荐: 本文来自于infoq,本文主要介绍在美团即时物流分布式系统架构逐层演变的进展中,遇到的技术障碍和挑战. 背景 美团外卖已经发展了五年,即时物流探索也经历了 3 年多的时间,业务从零孵化到初 ...

  6. 美团即时物流的分布式系统架构设计

    背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...

  7. 大白话教你认识 Kafka 背后优秀的架构设计

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我 ...

  8. 大白话认识 Kafka 背后优秀的架构设计

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 I once heard that,the only thing ...

  9. 美团外卖系统架构演进与稳定性的探索

    美团外卖系统架构演进与稳定性的探索 "相信大部分人都用过美团外卖,尤其是在每天的两个吃饭的高峰期.美团外卖从创业到现在经历了数次的迭代,不断的适应需求,提供更好的体验.本文是美团外卖架构师曹 ...

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

    https://blog.csdn.net/MeituanTech/article/details/80534636 背景 美团外卖从2013年11月开始起步,经过数年的高速发展,一直在不断地刷新着记 ...

最新文章

  1. CodeForces 114B 【STL应用】
  2. ajax提交数据到后台php接收
  3. 基于jenkins结合git实现web程序的多服务器批量发布
  4. JAVA拾遗--关于SPI机制
  5. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧
  6. SQL入门试炼创建表
  7. 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
  8. 【学习笔记】dubbo 控制台的部署
  9. Spring Security系列之基本原理
  10. java建立_java建立一个类
  11. ckeditor4 使用总结
  12. 第39级台阶python实现
  13. [JZOJ4567]nekopara
  14. 人的一生要疯狂一次,无论是为一个人,一段情,或一个梦想
  15. 研发人员一些比较重要的能力指标参考
  16. android平板电脑怎么才能连接电脑,平板连接电脑没反应怎么办 平板怎样连接电脑...
  17. Markdown 文本编辑图片居中显示以及题注
  18. 前端 - html2canvas 截图显示空白
  19. vue antd table customRender 自定义标签
  20. 如何使用 Python 爬取微信公众号文章?

热门文章

  1. 解决github下载及访问不稳定问题
  2. ISTQB FL初级认证考试资料(中文)
  3. 蒋正寒计算机编程大赛,重庆大学第七届研究生编程大赛完美收官
  4. 不用担心JDK17收费了,Oracle 推出 JDK 8 的升级替代品
  5. 机器学习基石 之 三大学习原则(Three Learning Principles)
  6. 基于spss的正态分布正态性检验
  7. 实时视频动作检测(action detection)
  8. 韩昊20190912-1 每周例行报告
  9. vlan tenant network on ovn based dvr (by quqi99)
  10. 两招快速教会你们PDF怎么转图片jpg格式