我有一个在AWS上运行的Node.js应用程序。
在弹性负载均衡器后面有两个运行相同应用程序的EC2实例。如果服务器负载很高,则更多实例可以开始运行相同的Node.js应用程序,但总是至少有2个实例。
两个实例都连接到postgres的一个唯一实例:
每隔几秒钟,ELB就会收到由两个Node.js实例之一处理的HTTP POST请求。如果一切顺利,每个HTTP POST都以表中的新行结束,让我们称之为TABLE1。每行都有一个名为is_processed
的布尔字段,允许识别行是否已经处理过。
每个Node.js实例也运行一个每隔几分钟执行一次的计划作业。计划的作业在TABLE1中搜索is_processed
为false
的行并处理它们。如果处理逻辑顺利:
is_processed
列已更新为true
。这两个步骤发生在交易中。
我的问题发生在:
is_processed=false
行,然后在事务中开始处理。is_processed=false
行。因此,某些行将被多次处理。
我相信这可以通过使用正确的level of isolation:
来解决我的问题是我不确定最佳隔离级别。我的猜测是我需要REPEATABLE_READ
,因为没有删除操作?
我的另一个问题是我不知道这种锁定是否会导致AWS自动数据库备份出现任何问题?