【问题标题】:AWS Kinesis for Microservice Choreography用于微服务编排的 AWS Kinesis
【发布时间】:2017-06-20 02:15:51
【问题描述】:

我正在尝试使用 CQRS、DDD 和事件溯源概念为在线商店开发微服务。我将 AWS Kinesis 视为事件流。我认为这对精心设计的微服务很有好处。我有 2 项服务,客户数据服务和订购系统服务。我想查看每个客户的未付款订单总数和订单总数。因此,我应该将 orderCreated 事件和 orderPaid 事件发送到服务以获取客户数据,并重新计算相关客户的未付款订单总数和订单总数。

我可以将订购系统事件发送到 AWS Kinesis 并在客户的命令端服务中监听它吗?我应该将 AWS Kinesis 中的事件(orderCreated 和 orderPaid 事件)持久保存到客户命令端服务中的数据库吗?还是只更新客户查询端服务可以吗?我应该使用 AWS Lambda 作为事件处理器吗?你能给我一些关于这个模型的最佳实践吗?

提前致谢。

【问题讨论】:

    标签: amazon-web-services domain-driven-design microservices cqrs event-sourcing


    【解决方案1】:

    我将 AWS Kinesis 视为事件流。我认为这对精心设计的微服务很有好处。

    我不认为 Kinesis 的用例是设计的;看到这个overview by Aditya Krishnan。或者这个以前的question on stack overflow

    我应该将事件(orderCreated 和 orderPaid 事件)从 AWS Kinesis 持久化到客户命令端服务中的数据库吗?

    在我看来,问题在于:您真的不希望事件泄露给订阅者然后不会出现在记录簿中。因此,通常的顺序是将事件放入持久存储中,并且只有在您获得写入确认(这是“确认我们已达到最低持久性保证”的代理)之后,您才开始共享事件出去。

    所以大多数设计都会颠倒您建议的顺序 - 首先是持久存储(数据库),然后是发布。但是您正在失去延迟;在商店结束之前,订阅者无法看到该事件。根据您的设计,您也许可以通过批量读取来弥补其中的一部分。

    我们已经尝试过 SQS 和 SNS。但是,性能还不够好。发布和使用事件大约需要 5 秒。

    嗯,考虑到我在 Kinesis 的建议中看到的内容,看起来您的胜率不会超过 order of magnitude;他们似乎在推荐完整的管道而不是快速管道。

    【讨论】:

    • 您能建议使用什么工具来处理这个问题吗?实际上,我们在数据库中插入事件记录。但是,我们应该将一些事件发布到另一个服务。我们正在寻找使用这些已发布事件的工具。我们已经尝试过 SQS 和 SNS。但是,性能还不够好。发布和使用事件大约需要 5 秒。所以,我们想尝试另一种方法来解决这个问题。
    • 我不同意。事件流是 kinesis 的一个很好的用例。与 SQS 和 SNS 相比,它只需要更多的工作。
    • @Benedict 当您说 SQS 中端到端时间为 5 秒时,您使用的是短轮询还是长轮询?您对队列有什么样的吞吐量?如果您使用短轮询并且更积极地进行轮询,您应该能够实现更低的端到端时间。
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2017-12-29
    • 2018-08-05
    • 2021-02-16
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多