Microservices 我不知道';我不了解事件来源

Microservices 我不知道';我不了解事件来源,microservices,grpc,event-sourcing,Microservices,Grpc,Event Sourcing,我是活动采购的新手,有一些问题想问 假设我们有2个服务书店实例和2个服务钱包实例。 用户要求BookService_1为其购买一本书。此book服务创建事件BuyBookRequestCreated并将其推送到事件总线。事件总线将此事件发送到service Wallet的两个实例。现在有两个实例试图从用户钱包中预留足够的钱,它们都发出事件BookMoneyReserved?现在在另一边,书店服务的两个实例接收2个事件,它们都试图发出事件BookBuyed?或者eventbus可能只向一个订阅者发

我是活动采购的新手,有一些问题想问

  • 假设我们有2个服务书店实例和2个服务钱包实例。 用户要求BookService_1为其购买一本书。此book服务创建事件BuyBookRequestCreated并将其推送到事件总线。事件总线将此事件发送到service Wallet的两个实例。现在有两个实例试图从用户钱包中预留足够的钱,它们都发出事件BookMoneyReserved?现在在另一边,书店服务的两个实例接收2个事件,它们都试图发出事件BookBuyed?或者eventbus可能只向一个订阅者发送BuyBookRequestCreated?但是,当所选服务失败时会发生什么

  • 从API消费者的角度来看,这个模式是如何处理的?如果我打电话给某个API给我买一本书,我希望它在买书时“返回200”。在事件源模式中,不需要等待其他服务的响应,因此如果其他服务必须发出事件来完成图书购买,则无法告知客户其购买是否确实失败

  • 我对整个微服务世界有点迷茫。一方面,我们有Grpc、protobufs和服务网格,但另一方面,我们有事件源和事件驱动架构。什么时候用哪个?从我所看到和理解的情况来看,我可以将事件源和grpc结合起来使用吗?我可以只使用grpc来传递服务,并将事件保存为状态持久性的一种形式,或者我完全没有得到它,应该再次通读文章

  • 谢谢你的帮助

    我不了解事件来源

    那不是你的错。文学很烂

    这里是示例图

    好的,关于这个图表,我能给你们的最重要的一课是:它与事件源无关。它与消息传递、分布式系统和事件驱动有很大关系。但活动来源是另一种动物

    在高层,一个基本问题是分布式系统不完善。因此,我们需要接受这一点,将其作为设计中的一个约束条件,并使用它。Pat Helland的是一个很好的起点

    在正常操作中,我们永远不会有两个钱包服务做相同的工作。他们可能正在共享工作(与图书服务共享来自负载平衡器的工作的方式大致相同)

    分享作品的一种方式是为每条消息分配一个唯一的编号;顶部钱包处理奇数消息并忽略偶数消息,底部钱包处理偶数消息并忽略奇数消息


    当然,正常的操作是你想要的,但不一定是你得到的——毕竟。对于某些类型的问题,有合适的模式——锁定或幂等消息处理——您的系统可以继续提供业务价值


    对于其他类型的问题,答案是有些人打电话告诉别人出了错误,我们能解决问题吗?

    我想我开始明白了。我混淆了事件来源和域事件。事件通信服务!=事件来源,但因为在互联网上的大多数讲座上,这两个概念被显示在一起,所以在我的头脑中,它作为一个单一的概念融合在一起。@Arczewski绝对正确。事件源实际上只是一种数据持久性机制。它是关于持久化关于您的域的一系列“事实”(例如“CustomerSignedUp”、“CustomerCreditLimitInIncreased”、“CustomerMovedAddress”),这些事实可以“重放”,以便构建域聚合的当前状态(例如客户、销售订单、产品等)。事件源并不要求消息通过网络发送,但实际上,大多数事件源系统也是分布式系统,因此也与消息异步通信。@VoiceOfUnreason不知道为什么文献如此糟糕。我乐观地认为我的书中有足够的关于事件来源的内容。在事件商店博客中,我们发表了几篇文章,解释了什么是事件来源。我同意,很多博客文章都说了一些关于事件源的奇怪事情,这对人们没有好处,但这对其他事情也是有效的。事件驱动的集成不是事件源。看看这个,也许还有我们过去的一些网络研讨会