Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 无服务器CQR+;使用AWS Lambda更新EventSourcing ReadModel_Amazon Web Services_Aws Lambda_Cqrs_Event Sourcing_Serverless Architecture - Fatal编程技术网

Amazon web services 无服务器CQR+;使用AWS Lambda更新EventSourcing ReadModel

Amazon web services 无服务器CQR+;使用AWS Lambda更新EventSourcing ReadModel,amazon-web-services,aws-lambda,cqrs,event-sourcing,serverless-architecture,Amazon Web Services,Aws Lambda,Cqrs,Event Sourcing,Serverless Architecture,我正在尝试基于AWS无服务器架构实现CQRS+事件源后端。 问题在于readmodel更新 当事件保存到事件存储时,它将发布到SNS。SNS然后调用updateradmodellambda。 将多个连续事件发布到SNS时,会调用多个lambda 第一个问题是,它们都执行相同的ReadModel更新,实际上,所有事件都只能调用一个lambda 第二个问题是,在多次执行lambdas之后,最终ReadModel状态可能会损坏 要求每个ReadModel只调用一个lambda 可能的解决办法: 使用M

我正在尝试基于AWS无服务器架构实现CQRS+事件源后端。 问题在于readmodel更新

当事件保存到事件存储时,它将发布到SNS。SNS然后调用
updateradmodel
lambda。 将多个连续事件发布到SNS时,会调用多个lambda

第一个问题是,它们都执行相同的ReadModel更新,实际上,所有事件都只能调用一个lambda

第二个问题是,在多次执行lambdas之后,最终ReadModel状态可能会损坏

要求每个ReadModel只调用一个lambda

可能的解决办法:

  • 使用MessageBroker(RabbitMQ或Kafka)+EC2实例调用
    UpdateReadModelLambda

  • 在SNS+EC2实例之后添加SQS,并编写调用lambdas并从SQS获取事件的代码

  • 但我不希望使用实例,因为它不适合无服务器方法,开发人员应该手动管理和扩展容器或MessageBus


    也许有人已经解决了这个问题,或者有其他云服务+CQRS+EventSourcing解决方案?

    使用消息代理进行预测通常是个坏主意。您无法保证订购,您无法保证仅一次交付,您无法仅重播一个读取模型的事件,因为其他读取模型将再次获得相同的事件,您无法拥有事件驱动系统,因为重播时,它们也将获得集成事件。我不会那么做的


    您可以使用由事件存储操作触发的lambda函数(例如,Dynamo插入)。每个lambda可以是一个聚合类型的投影集合,也可以只是一个投影。尽管如此,请记住,如果您重试,您有可能出现无序事件,我非常不确定您是否可以在那里禁用并行化。

    使用消息代理进行预测通常是个坏主意。您无法保证订购,您无法保证仅一次交付,您无法仅重播一个读取模型的事件,因为其他读取模型将再次获得相同的事件,您无法拥有事件驱动系统,因为重播时,它们也将获得集成事件。我不会那么做的


    您可以使用由事件存储操作触发的lambda函数(例如,Dynamo插入)。每个lambda可以是一个聚合类型的投影集合,也可以只是一个投影。尽管如此,请记住,如果您进行重试,您有可能会出现无序事件,我非常不确定您是否可以在那里禁用并行化。

    我自己没有尝试过,但看起来这件事正在满足您的需要:我们正在开发一个云托管的事件引擎,通过API提供EventSourcing和CQR。这是一个超早期的阶段,但你可以免费尝试,如果你想:-)运动流是SNS的替代品吗?和/或带有分区键(=流id)和排序键(=序列号)的DynamoDB似乎是一个很好的潜在事件存储,并与lambda或kinesis很好地集成。我自己没有尝试过,但看起来这件事正在满足您的需要:我们正在开发一个云托管的事件引擎,通过API提供EventSourcing和CQR。这是一个超早期的阶段,但你可以免费尝试,如果你想:-)运动流是SNS的替代品吗?带有分区键(=流id)和排序键(=序列号)的和/或DynamoDB似乎是一个很好的潜在事件存储,并且与lambda或kinesis很好地集成。