McDonald‘s Event-Driven Architecture 麦当劳事件驱动架构

原文链接 1 mcdonalds-technical-blog/

原文链接 2 mcdonalds-technical-blog/

麦当劳在异步、事务性和分析性处理用例中使用跨技术栈的事件,包括移动订单进度跟踪和向客户发送营销通信(交易和促销)。

统一事件平台(unified eventing platform)旨在为跨域服务和应用程序之间的实时数据流提供一个可扩展、安全可靠的平台。它确保了一致性,并降低了维护和采用事件架构所涉及的实现和操作复杂性。

挑战:

虽然基于事件的集成在麦当劳并不新鲜,但我们已经看到了各种各样的技术和模式在构建平台时使用的各种技术和模式。缺乏标准化的方法可能导致实现不一致且操作复杂,从而影响可用性、可靠性和数据质量。当我们开始设想这个平台时,我们建立了一些高层次的设计目标,使我们的团队能够朝着正确的方向工作。

设计目标:

可伸缩(Scalable):需要自动伸缩,以适应不断增加的事件数量,而不会影响服务质量。

可用性(Available):需要高可用性,以承受(withstand)其组件的故障。

高性能(Performant):应该实时交付事件,并能够处理高度并发的工作负载。

安全(Secure):数据必须遵循围绕加密、访问控制等的数据安全指南。

可靠的(Reliable):必须可靠的控制到位,以避免丢失任何事件。

一致性(Consistent):必须在围绕错误处理、弹性、模式演变、监视和灾难恢复的模式实现中保持一致性。

简单(Simple):需要最小化实现和操作的复杂性,并使团队能够轻松地在平台上构建。
考虑到这些目标,我们选择了一组工具、技术和模式来创建统一的平台。

引擎盖下面(Under the hood):

在整体层面,可以创建事件并将其发送到 architecture,消费者(其他应用程序)进一步处理事件。

它有几个关键组成部分:

事件代理(Event Broker):- AWS Managed Streaming for Kafka

        我们使用AWS Managed Streaming for Kafka Service (MSK)来托管主题和事件,并为生成和消费事件提供语义,因为它与我们使用的其他AWS服务集成在一起。在减少操作开销和对用例进行定制的灵活性之间取得良好的平衡是很重要的。


模式注册表(Schema Registry) - AWS Elastic Container Service:

        发布到基于事件的体系结构的事件遵循定义良好的契约,确保下游消费应用程序中的数据质量,同时在事件模式更改时为生成应用程序提供清晰的演进路径。注册中心在事件的不同版本之间运行模式验证和兼容性检查。


备用事件存储(Standby Event Store) - AWS DynamoDB:

        为了避免在MSK不可用的情况下丢失消息,平台连接了一个备用数据存储,它将事件写入数据库。该体系结构提供了工具和实用程序来读取消息,并在MSK可用时将其发布回MSK。

自定义软件开发工具包(SDK) (Custom Software Development Kits):

        我们构建了特定于语言的库,为生产者和消费者提供api,以编写和读取具有内置逻辑的体系结构事件,以执行模式验证、处理错误和实现重试模式。sdk作为我们开发团队的加速器,提高了他们的生产力,并提供了实现最佳实践的一致方法。

事件网关(Event Gateway):- AWS API Gateway

        McDonald的基于事件的体系结构既支持我们应用程序内部生成的事件,也支持外部合作伙伴应用程序生成的事件,这些事件通过带有身份验证和授权层的事件网关进行路由。网关在不暴露内部主题管理的情况下提供了灵活性和抽象性。

支持的实用程序和工具(Supporting Utilities and Tools):Infrastructure as code, monitoring UI&CLI tools

        我们的开发人员和服务可靠性工程师有一组工具来纠正死信主题中的事件,提供对集群健康状况的可见性,并执行任何集群管理任务。

可靠的事件处理

下面是一个典型的数据流,说明事件是如何从平台可靠地产生和消费的:

1,在模式注册中心定义并注册事件模式。

2,需要生成事件的应用程序利用生产者SDK来发布事件。

3,当应用程序启动时,在生成应用程序中缓存事件模式以获得高性能。

4,SDK执行模式验证以确保事件符合模式。

5,如果验证通过,SDK将事件发布到主主题。

6,如果SDK遇到错误,比如模式验证或可检索的错误,它将被路由到绑定到该生产者的死信主题。

7,如果SDK遇到错误,例如MSK不可用,则将其写入DynamoDB数据库。

8,需要消费事件的应用程序利用消费者SDK来实现这一点。

9,SDK类似地执行模式验证,以确保所消费的事件与模式一致。

10,一次成功的消费将导致将偏移量提交回MSK,并继续消费该主题的下一个事件。

11,死信主题中的事件稍后通过管理实用程序进行修正,并发布回主主题。

12,我们的合作伙伴产生的事件,或“外部事件”,通过事件网关发布。

数据治理(Data governance

        消费系统( consuming systems)的一个关键问题是数据完整性。在保证数据完整性的前提下,可以为下游系统的设计节省大量的时间和复杂性。MSK以及模式注册表允许我们在系统之间强制执行数据契约。模式被定义为描述预期的数据字段和类型,以及可选字段和必选字段。在实时情况下,将根据该模式(通过序列化库)检查每个消息的有效性,否则将消息路由到死信主题以进行更正。

模式的使用方式如下所示:

在启动时,生产者将一个已知模式列表缓存到内存中。可以出于多种原因更新模式,包括增加更多字段或更改数据类型。当生产者发布消息时,在每个消息的开头使用自定义魔术字节将版本控制信息存储在主题中。稍后,当使用消息时,魔术字节将确定应该使用哪种模式来使用消息。该系统有助于减少主题中的滚动更新和混合消息版本。如果我们需要回滚或进行新的模式更新,消费者有权解析每条消息。

以这种方式使用模式注册中心可以验证跨不同系统的数据契约,并有助于确保下游分析系统中的数据完整性。

集群自动扩展(Cluster autoscaling

        虽然MSK提供了连接到代理的存储的自动伸缩,但是必须构建一个扩展集群的解决方案。我们创建了一个自动缩放函数,当代理的CPU利用率超过可配置的阈值时触发该函数,将代理添加到MSK集群,然后触发另一个lambda函数在代理之间移动分区。

域的分片(Domain-based sharding

        为了有效地扩展和最小化故障,我们将事件分为多个基于域的MSK集群。事件的域决定主题将驻留在哪个集群中,消费应用程序可以灵活地使用来自任何基于域的主题的事件。该平台旨在支持跨区域的全球部署,并在每个区域中配置高可用性配置。

【🤣  你看完什么感觉?  🤣】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/496371.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)

设备逻辑的概念: 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转:组…

『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释

评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…

MySQL基础-常见的增删改查操作语句总结

1.数据库操作 查看所有数据库 show databases;创建数据库 create database db_stu; --如果数据库已经存在就不创建 create database if not exists db_stu; --添加默认字符集 create database db_stu default charset utf8mb4;删除数据库 drop database db_stu; --如果存在…

模拟——郑益慧_笔记1_绪论

B站视频链接 模电是数电的基础;参考书: 模拟电子技术基础(第四版)华成英、童诗白主编,高等教育出版社;电子技术基础 模拟部分 康华光主编,高等教育出版社; 电子技术的发展史 电子…

【Ubuntu 20.4安装截图软件 flameshot 】

步骤一: 安装命令: sudo apt-get install flameshot 步骤二: 设置快捷方式: Ubuntu20.4 设置菜单,点击 号 步骤三: 输入软件名称, 软件快捷命令(flameshot gui)&am…

WordPress源码解析-数据库表结构

WordPress是一个功能强大的内容管理系统,它使用MySQL数据库来存储和管理网站的内容、用户和配置信息。作为WordPress开发者,了解WordPress数据库的结构和各表的作用至关重要,因为这将帮助您更好地开发插件和主题,以及执行高级数据…

Java中使用四叶天动态代理IP构建ip代理池,实现httpClient和Jsoup代理ip爬虫

在本次爬虫项目中,关于应用IP代理池方面,具体完成以下功能: 从指定API地址提取IP到ip池中(一次提取的IP数量可以自定义更改) 每次开始爬虫前(多条爬虫线程并发执行),从ip池中获取一…

Python机器学习笔记(十三、k均值聚类)

聚类(clustering)是将数据集划分成组的任务,这些组叫作簇(cluster)。其目标是划分数据,使得一个簇内的数据点非常相似且不同簇内的数据点非常不同。与分类算法类似,聚类算法为每个数据点分配&am…

KNN分类算法 HNUST【数据分析技术】(2025)

1.理论知识 KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想: 对于任意n维输入向量,分别对应于特征…

宝塔-firefox(Docker应用)-构建自己的Web浏览器

安装基础软件 宝塔中安装firefox(Docker应用) 。宝塔中需要先安装docker及docker-composefirefox配置安装 点击firefox应用,选择【安装配置】点击右边绿色按钮,进行安装,这一步等待docker-compose根据你的配置初始化docker应用 等待安装 …

如何从 0 到 1 ,打造全新一代分布式数据架构

导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。借助 GitLab,开发…

芯片Tapeout power signoff 之IR Drop Redhawk Ploc文件格式及其意义

数字IC后端工程师在芯片流程最后阶段都会使用redhawk或voltus进行设计的IR Drop功耗signoff分析。必须确保静态,动态ir drop都符合signoff标准。 在做redhawk ir drop分析前,我们需要提供一个redhawk ploc供电点坐标。 数字IC设计后端实现前期预防IR D…

HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index代码 import { authen…

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的…

前端:改变鼠标点击物体的颜色

需求&#xff1a; 需要改变图片中某一物体的颜色&#xff0c;该物体是纯色&#xff1b; 鼠标点击哪个物体&#xff0c;哪个物体的颜色变为指定的颜色&#xff0c;利用canvas实现。 演示案例 代码Demo <!DOCTYPE html> <html lang"en"><head>&l…

聊一聊 C#前台线程 如何阻塞程序退出

一&#xff1a;背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题&#xff1a;后台线程的内部是如何运转的 ? &#xff0c;犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug&#xff0c;最后发现是有一个 Backgrond…

Nmap基础入门及常用命令汇总

Nmap基础入门 免责声明&#xff1a;本文单纯分享技术&#xff0c;请大家使用过程中遵守法律法规~ 介绍及安装 nmap是网络扫描和主机检测的工具。作为一个渗透测试人员&#xff0c;必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径&#xff0c;我们可以扫描互…

Excel中一次查询返回多列

使用Excel或wps的时候&#xff0c;有时候需要一次查询返回多列内容&#xff0c;这种情况可以选择多次vlookup或者多次xlookup&#xff0c;但是这种做法费时费力不说&#xff0c;效率还有些低下&#xff0c;特别是要查询的列数过多时。我放了3种查询方法&#xff0c;效果图&…

NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU NodeMCU开发板 此NodeMCU是在乐鑫公司&#xff08;Espressif Systems&#xff09;生产的ESP-12F模组的基础上封装好的具备WiFi功能的开源IoT开发板。本次选用安信可公司&#xff08;Ai-Thinker&#xff09;生产的CP2102版本的开发板。 28BYJ-48型步进电机 28BYJ-48型…