当前位置: 首页 > 知识库问答 >
问题:

事件源和微服务、消息传递系统

凌运恒
2023-03-14

我们正在设计我们的新系统,它很可能是从头开始编写的,因为旧系统非常非常旧。对我们的系统来说,保留系统中发生的所有事情的审计跟踪日志非常重要。

由于审计跟踪的重要性,我们决定遵循事件源架构以获得它的所有好处。另一个关键因素是我们有多个团队在不同的“域”上工作。也就是说,我们想将每个域拆分为自己的服务(微服务架构),这样每个团队都可以独立工作。

我们面临的最大问题是谁将负责微服务之间的事件共享。例如,在其中一个服务中发生的事件也应触发其他两个服务中的另一个事件。我们可以看到两种选择:

  • 中央流媒体服务(最有可能是AWS),所有服务都注册发布者和订阅者。每个服务都将在那里发布其所有事件,消费者将决定他们是否“关心”特定事件,然后做些什么

我们已经花了很多时间试图找出什么是对我们来说最好的选择,或者我们应该问自己什么问题才能做出正确的决定。我更倾向于第一种选择,尽管我确实对消费者的性能和瓶颈有一些担忧,因为每个服务都会听取所有事件,然后他们会决定是否必须采取行动。

你认为第一个选项或第二个选项有什么不可行的地方吗?我们是朝着正确的方向看,还是应该后退一步?

共有2个答案

邵弘义
2023-03-14

你做过简单的练习吗

注意,“解决方案优先级”指的是系统质量属性,如性能、可维护性、可测试性等,但也要考虑到您可能拥有的架构原则、产品所有者的功能优先级、商业驱动因素等。

为了更直接地回答OP,我将从一个单一的事件流开始:你把所有东西都放在一个地方,这更简单:更容易设置和管理、调试、监控等。拆分东西只会增加复杂性。当然,可以随意拆分——但前提是有明确的理由这样做。

师野
2023-03-14

我倾向于每个发布服务都有一系列事件。然后,您可以进行某种程度的分类,当您希望按排放顺序处理事件时,不必(或至少不必)处理多个流的同步消耗。

事件通常会有一个自然键,并且您通常只需要在按该键分组后进行严格排序;因此,您可以对事件进行分区/切分。

没有什么本质上阻止您同时拥有发布服务发出的所有事件的Firehose流和事件的分类流,以便消费者可以决定不订阅他们不感兴趣的流。

 类似资料:
  • 我正在计划开发一个基于微服务的架构应用程序,当我阅读Ronnie Mitra的书《微服务架构》时,我决定使用Kafka进行内部通信;马特·麦克拉蒂;迈克·阿蒙森;伊拉克利·纳达雷什维利说: 让微服务直接与消息代理(如RabbitMQ等)交互很少是个好主意。如果两个微服务通过消息队列通道直接通信,那么它们共享一个数据空间(通道),我们已经详细讨论了两个微服务共享一个数据空间的弊病。相反,我们可以做的

  • 我听说亚马逊使用HTTP作为其基于微服务的架构。另一种方法是使用RabbitMQ或Solace Systems这样的消息传递系统。我个人对基于Solace的微服务架构有经验,但从未使用过REST。 知道像Amazon、Netflix、UK Gov等各种大联盟实现使用什么吗? 其他方面是,在微服务中,还需要以下东西(除了其他东西): *模式匹配 *异步消息传递。接收系统可能已关闭 *发布订阅 *缓存

  • 我对尝试将微服务/SOA作为一种体系结构非常感兴趣,并且很难对服务之间的集成进行概念化。 我喜欢使用消息传递将客户端与服务分离的想法,但不理解系统如何独占地使用它。典型的异步操作和发布/订阅显然是有意义的——比如创建新订单、广播数据以进行报告等。我不明白的是,人们是否通常尝试在常见的请求/回复场景中使用消息传递——例如,用户点击他们的“个人资料”页面,而需要在页面上呈现的部分数据来自用户服务。 我

  • 我知道消息传递系统是无阻塞和可扩展的,应该在微服务环境中使用。 我质疑的用例是: 假设有一个admin dashboard客户机负责发送API请求以创建Item对象。有一个微服务提供APIendpoint,它使用一个MySQL数据库来存储项目。还有一个微服务使用弹性搜索进行文本搜索。 如果此管理仪表板客户端: a.发送2个API调用;1次调用MySQL服务和另一个elasticsearch服务 或

  • 脚本 我正在使用微服务构建快递服务系统。我不确定一些事情,这是我的场景 预订API-这是客户下订单的地方 付款API-这是我们处理预订付款的地方 通知API-有服务负责在一切完成后发送通知。 系统采用事件驱动架构。当客户下预订订单时,我在预订应用编程接口中提交本地交易并发布事件。支付应用编程接口和通知应用编程接口订阅了各自的事件。一旦完成,支付和通知应用编程接口需要向预订应用编程接口确认。 我的问

  • 我正在计划一个使用事件源的微服务模型。为了实现高可伸缩性和高吞吐量处理能力,我将使用Kafka作为微服务的消息代理。 在这一点上,我有问题的实现模型,以能够拥有Kafka主题和分区的好处。我的模型需要满足一些要求: 微服务必须从message broker获取数据(post/patch/put/delete) 数据一致性是强制性的,如果实体A需要实体B的先前存在,则必须只存在实体A的指向实体B的有