Amazon web services AWS ECS春季开机共享列表<;字符串>;在微服务实例之间

Amazon web services AWS ECS春季开机共享列表<;字符串>;在微服务实例之间,amazon-web-services,spring-boot,amazon-ecs,aws-fargate,Amazon Web Services,Spring Boot,Amazon Ecs,Aws Fargate,我有两个springbootmicroservice(microservicea)和一个负载平衡器的实例。Spring boot应用程序在AWS Fargate中运行,具有2个所需任务(Microservice A的2个实例) 如果我请求microservice A,负载平衡器会在第一次请求microservice A实例1时引导我。 下一个请求将负载平衡到microservice A实例2。这是在未来的每一个请求中交替进行的 在microservicea上,我有一个Spring服务,它有一个L

我有两个springbootmicroservice(microservicea)和一个负载平衡器的实例。Spring boot应用程序在AWS Fargate中运行,具有2个所需任务(Microservice A的2个实例)

如果我请求microservice A,负载平衡器会在第一次请求microservice A实例1时引导我。 下一个请求将负载平衡到microservice A实例2。这是在未来的每一个请求中交替进行的

在microservicea上,我有一个Spring服务,它有一个
List
属性。每一个请求我都会把一些东西放在这个列表中。 列表保存在内存中,我不想将此列表放入数据库。 在我的例子中,每一个进一步的请求都会交替填写microservice A实例1和microservice A实例2的列表。但我只想在未来的每个请求中填写一个列表,这样我的列表输入就不会分布在我的microservice实例中

所以我的问题是:

有没有办法在这两个微服务实例之间共享一个列表

我是否必须在他们之间建立某种沟通,或者是否有更好的解决方案?或者我必须配置负载平衡器吗?
解决方案是将其存储在数据库中。但是这会产生许多DB调用,我想防止这种情况,因为代码的目的是防止DB调用。

为了您的目标,使用外部服务(Redis | DynamoDB |……)是一种常见的模式。如果您不想使用DB(或进行API调用),我可以想到的另一件事是使用共享文件系统(EFS)来保持这种状态,尤其是博客末尾的用例。您不需要将列表存储在内存中,而是将其刷新到文件系统中(这恰好是任务之间共享的)。同一服务中的不同任务之间没有其他通信方式。我不知道您的确切需求(并发性、延迟等),但使用DynamoDB似乎是最好的方法。延迟非常低,“管理数据库”的负担为0。

我通常喜欢@mreferre的方法

您可以查看AWS粘性会话。

但是请注意:如果用户的粘性目标正在下降,您需要确保用户不会一直发送到现在下降的目标。 你需要仔细考虑粘性会话是否符合你的用法。 也许您可以使用短持续时间cookie来最小化不良粘性连接的持续时间