Amazon web services 仅在Aurora事务提交时调用Lambda函数,但保证调用(ACID)
对于新项目中的微服务,我目前正在考虑是否使用DynamoDB或auroramysql作为底层数据存储。micro服务为用户界面提供了一个RESTAPI,还有其他几个micro服务。这些其他微服务应该侦听由UI连接服务生成的事件流(事件源),以保持其他读取模型同步 我试图找出一种方法来保证发布到变更事件流的事件与底层数据存储中的数据的变更完全匹配。通常,问题在于,如果REST API处理程序(例如)在执行过程中中途中断,它可能已经更改了数据,但尚未创建事件(假设更改事件在数据更改后发布)。我现在正在寻找能够减轻这种担忧的机制 对于DynamoDB,有DynamoDB流和AWS Lambda触发器,用于在数据存储级别对数据更改做出反应。触发的Lambda可以将低级数据更改转换为有意义的更改事件,然后将该事件发布到SNS、SQS或Kinesis 对于Aurora MySQL,我还没有想出这样的机制。我看过描述两种机制的文章:Amazon web services 仅在Aurora事务提交时调用Lambda函数,但保证调用(ACID),amazon-web-services,microservices,amazon-aurora,Amazon Web Services,Microservices,Amazon Aurora,对于新项目中的微服务,我目前正在考虑是否使用DynamoDB或auroramysql作为底层数据存储。micro服务为用户界面提供了一个RESTAPI,还有其他几个micro服务。这些其他微服务应该侦听由UI连接服务生成的事件流(事件源),以保持其他读取模型同步 我试图找出一种方法来保证发布到变更事件流的事件与底层数据存储中的数据的变更完全匹配。通常,问题在于,如果REST API处理程序(例如)在执行过程中中途中断,它可能已经更改了数据,但尚未创建事件(假设更改事件在数据更改后发布)。我现在正
我想把这个问题和讨论的重点放在如何保证底层数据存储的更改和带有更改事件的传出流之间的一致性上,而不是放在Aurora和DynamoDB上。我找到了一个适合我们情况的答案,使用Aurora和MySQL兼容。在我的研究过程中,我发现了一个极好的信息来源。具体来说,关于的页面引用了四种相关模式,以保证更新状态和发布事件的原子性
- 活动来源
- 应用程序事件
- 数据库触发器
- 事务日志跟踪
- 真正的无服务器和AZ-,VPC,无子网
- 事件的顺序是有保证的,因为不会有多个Lambda调用并行轮询和发布
- 如果轮询Lambda函数因任何原因终止(例如,因为AZ消失),则发布间隔最多为1分钟,直到CloudWatch下次调用Lambda函数。这个差距是可以接受的