Events 模型更新事件主体

Events 模型更新事件主体,events,architecture,event-driven,event-driven-design,Events,Architecture,Event Driven,Event Driven Design,假设我们有一个用户对象,我们希望通过使用事件的面向服务体系结构来同步该对象的状态。关于修改用户时发送的事件,我想知道这些选项中的哪一个更适合事件主体: 仅发送已修改的字段 发送用户对象中的所有字段,让订阅者负责检查哪些字段已被修改 在我想到的示例中,以下是一个可行的场景: 在服务A中,更新用户的字段配置文件,并发送主题用户更新事件中的事件 订阅该主题的服务B会更新用户信息,更新后会修改该用户的联系人电子邮件。假定用户的状态已更改,将向同一主题发送事件 服务A也订阅了该主题,它接收事件并在本地更新

假设我们有一个用户对象,我们希望通过使用事件的面向服务体系结构来同步该对象的状态。关于修改用户时发送的事件,我想知道这些选项中的哪一个更适合事件主体:

  • 仅发送已修改的字段
  • 发送用户对象中的所有字段,让订阅者负责检查哪些字段已被修改
  • 在我想到的示例中,以下是一个可行的场景:

  • 在服务A中,更新用户的字段
    配置文件
    ,并发送主题
    用户更新
    事件中的事件
  • 订阅该主题的服务B会更新用户信息,更新后会修改该用户的
    联系人电子邮件
    。假定用户的状态已更改,将向同一主题发送事件
  • 服务A也订阅了该主题,它接收事件并在本地更新用户的
    联系人电子邮件
    字段。假定用户的状态已更改,将向同一主题发送事件
  • 服务B接收到最后一个事件,其中只有
    联系人电子邮件
    已更改,并尝试更新用户。由于现有用户信息和接收到的用户信息之间没有变化,因此没有状态变化,也没有进一步的事件发送到
    user updated
    topic

  • 这个过程对我来说似乎相当复杂,尽管只有两个服务跟踪用户的状态。在一个真实的例子中,这样的服务的数量可能要高得多。

    我个人只会发送修改过的字段,如果没有其他内容的话,以保持消息的有效负载较小。大多数消息传递系统对小消息进行优化/限制,并且在发送超过两K个数据时表现不佳


    此外,我还不明白为什么要在这里进行多主机复制。为什么你没有一个单用户服务,这两个服务都向其发送更新,而其他服务则从中获取信息。您可以将数据缓存在客户端服务中,然后您的事件可以成为缓存过期,而不是数据复制事件。

    我个人只发送修改后的字段,如果没有其他内容,以保持消息的有效负载较小。大多数消息传递系统对小消息进行优化/限制,并且在发送超过两K个数据时表现不佳


    此外,我还不明白为什么要在这里进行多主机复制。为什么你没有一个单用户服务,这两个服务都向其发送更新,而其他服务则从中获取信息。您可以在客户端服务中缓存数据,然后您的事件可以成为缓存过期事件,而不是数据复制事件。

    感谢您的回答,Rob。你有没有提到某个地方证实了大消息的糟糕表现,或者是基于你的经验?用户示例只是一个抽象,对于用户来说,我可能会选择使用单个服务并使用API同步获取用户信息,但对于跨多个服务的多个模型,我面临这个问题(其中不需要所有模型的所有信息,只需要一些)。此外,我们希望避免单点故障,如果我们有一个集中的真实理解源,那么我们会得到什么,但我仍然会认真考虑建模您的域,使您成为一个单一的真相来源,然后缓存各种服务内的不同表示。多主机复制带来了一些非常棘手和昂贵的巨大问题。从大小限制来看,Azure服务总线的上限为256K,AWS SQS也是如此。其他的服务有不同的上限,我知道RabbitMQ是一个像4GB这样巨大的东西,但是你在磁盘分页活动上受到的限制比其他任何东西都多。不管怎样,通常您希望事件而不是数据,让事件成为指向数据的指针谢谢您的回答,Rob。你有没有提到某个地方证实了大消息的糟糕表现,或者是基于你的经验?用户示例只是一个抽象,对于用户来说,我可能会选择使用单个服务并使用API同步获取用户信息,但对于跨多个服务的多个模型,我面临这个问题(其中不需要所有模型的所有信息,只需要一些)。此外,我们希望避免单点故障,如果我们有一个集中的真实理解源,那么我们会得到什么,但我仍然会认真考虑建模您的域,使您成为一个单一的真相来源,然后缓存各种服务内的不同表示。多主机复制带来了一些非常棘手和昂贵的巨大问题。从大小限制来看,Azure服务总线的上限为256K,AWS SQS也是如此。其他的服务有不同的上限,我知道RabbitMQ是一个像4GB这样巨大的东西,但是你在磁盘分页活动上受到的限制比其他任何东西都多。无论如何,通常您希望事件(而不是数据)是指向数据的指针