导读:这篇文章概述了麦当劳食品配送平台的架构。如果对各位有用,欢迎分享这篇文章。
本文将以故事形式描述麦当劳的架构流程与方法。
2024 年 3 月,德国柏林。Maria 在医院轮班结束后,正在午休。
但那天她没有带午餐,所以她又饿又累。于是她决定通过移动应用程序从麦当劳订餐。
麦当劳使用六边形架构来降低复杂性
可以将六边形架构想象为一种将核心应用程序与数据库和用户界面等外部服务分开的模式。
当域事件发生时,它们向消息代理发布事件。外部服务订阅消息代理以获取事件。
麦当劳每天为大约 37000 个地区和 6400 万+用户提供服务。
系统可扩展性是一个难题。大规模分布式网络的可扩展性更加困难。然而他们将平台扩展到每秒 20,000 个订单,延迟低于 100 毫秒。
他们将用户事件发布到消息队列中。它允许服务通过异步模式相互通信。此外,先进先出 ( FIFO ) 队列可保证事务的排序和一次性处理。
他们使用无服务器函数来轮询消息队列,然后处理其中的消息。接着使用无服务器来添加新功能,而无需担心基础设施。它还可以通过避免服务器配置来实现最大容量来帮助自己降低成本。
然后,当餐厅接受订单时,它会向客户端发送一个事件。
此时使用内存缓存和 Redis 来处理订单。它提供高性能和低延迟。此外,他们还将 Redis 备份到关系数据库中,以确保在发生中断时保持持久性。
而验证订单的无服务器函数则在那里等待回调。它用于在食物准备好由送货司机取货时通知用户。此外,它们将无服务器函数的回调任务令牌存储在键值数据库中。
他们使用预计到达时间 ( ETA ) 和食物准备时间来通知司机接载。它有助于避免额外的等待时间。
当司机靠近餐厅时,他们使用单独的无服务器功能来触发事件。事件总线将识别是否是现有订单的事件,如果是,则查询键值数据库以获取回调任务令牌。
餐厅需要有关用户体验的数据来改进员工的服务。
他们进行调查并收集社交媒体评论,并进行提取-转换-加载(ETL )来分析信息,然后数据存储在 S3 或相关对象存储中。
随后,他们将数据发送到自然语言处理(NLP )服务进行情感分析。此外,处理后的数据会发送到内部模型以提高其准确性。最后,果数据存储在数据仓库中,用以创建操作报告。
他们的食品配送平台运行微服务来支持更多功能。并使用负载均衡器在微服务之间分配流量。
然而,每个微服务都有不同的规模和运行时配置文件。这意味着面向客户的服务被认为至关重要。而后台处理服务是可以容忍失败的。
他们将经常变化的服务转移到单独的微服务中。这样他们就可以更快地部署和迭代。
他们进行冒烟测试来检查 API 的响应能力。将冒烟测试想象为一种快速且基本的测试来检查功能。
此外,他们还使用断路器逻辑和指数退避来实现弹性。并注重自动化以减少运营工作量。
麦当劳仍然是世界上最大的快餐连锁店之一。
作者:万能的大雄
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。