apache-kafka - 事件驱动的架构如何应用到这个例子中?
问题描述
我不确定如何在现实场景中使用事件驱动架构。假设有一个由以下后端服务组成的路线规划平台:
- 用户服务(管理用户数据和角色)
- 地图数据服务(道路和地址,仅由管理员修改)
- 计划任务服务(接受新的路线计划任务,跟踪后台任务,存储结果)
公共网站通常会从所有 3 项服务中请求数据。map-data-service 需要有关数据更改请求的用户角色的信息。计划任务服务需要有关用户的信息以及有关地图数据的信息以验证新任务。
现在,这些服务只会相互发出同步请求以获取所需的数据。将这种基本结构转换为事件驱动架构的最佳方式是什么?可以通过使用事件来减少依赖关系吗?公共网站将如何获得所需的数据?
解决方案
Cosmin 是 100% 正确的,因为您需要做一些编排。
如果您的客户端需要来自多个服务的数据,可以采用的一种方法是 Experience API 方法。
客户端调用体验 API,该 API 执行编排 - 从不同来源提取数据并将其提供回客户端。体验 API 的设计严重且有意地偏向于客户的需求。
根据您到目前为止所说的详细信息,我看不出有什么需要基于事件的架构。客户端和 ExpAPI 之间的通信可以是同步和异步的混合,ExpAPI 到 [Services] 的通信也是如此。
就其价值而言,将所有这些都放在 API 网关上并不是一个坏主意,因为它们旨在托管 API,因此为管理它们提供了理想的控制和可观察性。
根据 OP 评论更新
我真的对事件驱动架构如何减少我的微服务之间的依赖关系非常感兴趣,正如人们经常所说的那样
让组件(或系统)通过事件进行对话有点像控制反转的异步等价物,因为事件消费者与发出事件的事物没有紧密耦合。这就是减少依赖关系的方式。
您可以做的一件事是做一个小项目作为学习练习 - 拍摄您的代码的快照并进行粗略的准备转换为基于事件的转换,然后看看它是如何进行的 - 与其说是尝试对您的解决方案进行事件处理,但要看看将事件放入实际解决方案中的样子。如果你有时间,当然可以。
推荐阅读
- typescript - 如何检查对象 Ionic 4 中的元素
- docker - Keycloak Keystore 和 Java Keystore with HTTPS -> 重定向循环
- c++ - 如何使用divides和for_each?
- reactjs - TypeError:无法使用 Jest 和 React 读取未定义道具的属性“电子邮件”。为什么?
- javascript - 无法设置 fetch() 之外的变量的 innerHTML
- javascript - 两位数30秒倒计时
- centos - 在同一局域网中公开 Ngrok Web 界面
- ascii - 在雪花中创建文件格式
- python - 将 Pandas 系列的 Dataframe 作为一个整体而不是元素进行比较
- blazor - 何获取自定义 Blazor 组件的特定实例