谈谈基于Kafka的六种微服务架构事件驱动模式

一次请求穿过的六道关卡:微服务基础组件的通信与IO、事件驱动、负载均衡、服务路由、API网关与配置协调 微服务的稳定性往往取决于看不见的基础组件。本文跟随一次下单请求,依次穿过API网关、服务路由、负载均衡与服务通信,再沿事件分支扇出,并从控制面审视配置中心。通信层剖析握手成本、连接复用、epoll与主从Reactor、心跳判活、退避抖动、截止时间与重试预算;事件层讲解编舞与编排、事务发件箱和幂等消费;均衡与路由对比静态与动态算法、路由链、全链路灰度与同区保底;网关讨论过滤器链与限流算法;配置部分给出四类配置、长轮询与共识协调,最后归纳五道防线。文中关键数据均来自可在Java8运行的演示程序。 阅读详情

前言

在过去的一年里,我一直是负责Wix的事件驱动消息基础设施(基于Kafka之上)的数据流团队的一员。该基础设施被 1400 多个微服务使用。 在此期间,我已经实现或目睹了事件驱动消息传递设计的几个关键模式的实现,这些模式有助于创建一个健壮的分布式系统,可以轻松处理不断增长的流量和存储需求。

一、消费与投射 -

那些非常受欢迎的服务会成为瓶颈 当您遇到存储大型领域对象的“流行”数据的瓶颈时,此模式可以提供帮助。 在 Wix,我们的MetaSite服务就是这种情况,它为 Wix 用户创建的每个站点保存了大量元数据,例如站点版本、站点所有者以及站点上安装了哪些应用程序-已安装的应用程序上下文。 此信息对于 Wix 的许多其他微服务(团队)很有价值,例如Wix Stores、Wix Bookings、Wix Restaurants等等。这个单一的服务被超过 100 万 RPM 的请求轰炸,以获取网站元数据的各个部分。 通过查看服务的各种 API 可以明显看出,它正在处理其客户端服务的太多不同的问题。

​

MetaSite 服务处理约 1M RPM 的各种请求 我们想要回答的问题是,我们如何以最终一致的方式从该服务转移读取请求? 使用 Kafka 创建“物化视图”负责这项服务的团队决定创建一项附加服务,该服务仅处理 MetaSite 的一个问题——来自其客户端服务的“已安装应用程序上下文”请求。

  • 首先,他们将所有数据库的站点元数据对象流式传输到 Kafka 主题,包括新站点创建和站点更新。一致性可以通过在 Kafka Consumer 中进行数据库插入来实现,或者通过使用像Debezium这样的[url=https://en.wikipedia.org/wiki/Change_data_capture]CDC[/url]产品来实现。

  • 其次,他们使用自己的数据库创建了一个“只写”服务(反向查找写入器),该服务使用站点元数据对象,但仅获取已安装应用程序上下文并将其写入数据库。即,它将站点元数据的某个“视图”(已安装的应用程序)投射到数据库中。

​

使用和项目安装的应用程序上下文

  • 第三,他们创建了一个“只读”服务,只接受与已安装应用程序上下文相关的请求,他们可以通过查询存储计划的“已安装应用程序”视图的数据库来完成这些请求。

​

拆分读写 结果:

  • 通过将数据流式传输到 Kafka,MetaSite 服务与数据的消费者完全分离,从而显着降低了服务和数据库的负载。

  • 通过使用来自 Kafka 的数据并为特定上下文创建“物化视图”,反向查找编写器服务能够创建最终一致的数据投影,该投影针对其客户服务的查询需求进行了高度优化。

  • 将读取服务与写入服务分开,可以轻松扩展只读数据库复制和服务实例的数量,以处理来自全球多个数据中心的不断增长的查询负载。

2.端到端的事件驱动

-便于业务流程状态更新 请求-回复模型在浏览器-服务器交互中特别常见。

通过将 Kafka 与websocket一起使用,我们可以驱动整个流事件,包括浏览器-服务器交互。 这使得交互更具容错性,因为消息保存在 Kafka 中,并且可以在服务重新启动时重新处理。这种架构也更具可扩展性和解耦性,因为状态管理完全从服务中移除,并且不需要数据聚合和查询维护。 考虑以下用例 - 将所有 Wix 用户的联系人导入 Wix 平台。 此过程涉及多项服务——Contacts Jobs 服务处理导入请求并创建导入批处理作业,Contacts Importer执行联系人的实际格式化和存储(有时在 3rd 方服务的帮助下)。 注册,然后会告诉你结果传统的请求-回复方式需要浏览器不断轮询导入状态,前端服务保持部分数据库表的状态更新,同时轮询用于状态更新的下游服务。 相反,通过使用 Kafka 和webs

AI驱动服务创新的生态整合:架构师如何连接AI与第三方服务 图1:AI驱动的服务生态系统整体架构示意图。 阅读详情

相关推荐

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 524

Cube.js 安装避坑指南:从零到一键启动

本文是一份详细的Cube.js安装避坑指南,旨在帮助开发者从零开始顺利启动Cube.js。文章重点强调了安装前的环境准备,包括Node.js版本、包管理工具和项目路径等关键“地基”,并深入解析了使用npx安装的优势、数据库类型选择以及数据库连接配置的核心步骤与常见陷阱,确保您能高效完成安装并成功启动服务。

weixin_29218509的博客 429

从DMD芯片到3D视觉革命:揭秘DLP工业投影光机的核心技术

本文深入解析了DMD芯片在DLP工业投影光机中的核心技术应用,揭示了其如何通过3D结构光技术实现微米级精度。从DMD芯片的机械设计到工业级光机的特殊优化,再到光固化3D打印和系统集成,展现了DLP技术在工业自动化和智能制造中的革命性作用。

weixin_29048775的博客 517

笔试题-2023-大疆-数字IC设计【纯净题目版】

笔试题-2023-大疆-数字IC设计【纯净题目版】

w0shishabi的博客 2513

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案

本文主要介绍了ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

深度学习实战35-图卷积神经网络GCN模型的搭建与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战35-图卷积神经网络GCN模型的搭建与应用,GCN是一种用于处理图结构数据的深度学习模型,它可以捕捉节点之间的拓扑关系和局部特征,并进行图级别的预测和分类任务。下面将介绍如何搭建并应用GCN模型。

微学AI的博客 2226

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 12 个技巧帮你顺利从单体应用到微服务
下一篇: Java的AOP修改参数、Mybatis拦截器实现自动填充
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值