Fargate 任务级 SNS 主题订阅

问题描述 投票:0回答:1

在当前状态下,我有一个 AWS Batch,它配置为运行 ML 训练作业。在流程结束时,模型工件存储在 S3 存储桶中。此外,我还有一个 AWS 应用程序负载平衡 Fargate 服务,可扩展 1-10 个任务,托管 FastAPI 应用程序。我在这个 API 上有一个

/update_model/
,它给定模型密钥,从 S3 检索最新的模型。

天真地,我希望 Batch 在向我的 Fargate Servive update_model 方法发送 HTTP 请求后终止。然而,ALB 只会将其分配给一个任务,从而导致一致性问题。

弹性疼痛+轮询

我考虑的第一个缓解措施是 Batch 将模型密钥发布到 Elasticache,然后每个任务异步轮询 Redis 以获取模型密钥更新;如果存在,从 S3 检索该工件。

SNS任务级订阅

我的第二个缓解措施(如果可能的话)我更喜欢的是 Batch 通过 SNS 发送通知,并且每个任务独立订阅该主题。根据我的研究,ALB 可以订阅该主题,但我会遇到幼稚的解决方案问题,其中

n-1
任务服务于过时的模型。

我的问题是:每个 Fargate 任务是否可以独立订阅 SNS 主题(启用扇出)?或者我最好使用缓存轮询策略吗?

amazon-sns aws-fargate system-design
1个回答
0
投票

我的问题是:每个 Fargate 任务是否可以独立订阅 SNS 主题(启用扇出)?

仅当它们除了可以通过负载均衡器访问之外,还可以通过公共 IP 地址直接访问时。他们每个人都可以在启动时使用自己的 IP 地址订阅 SNS。

但是,我会担心这种方法的安全隐患,因为它将您的 Fargate 容器直接暴露到互联网。


我考虑的第一个缓解措施是 Batch 将模型密钥发布到 Elasticache,然后每个任务异步轮询 Redis 以获取模型密钥更新;如果存在,从 S3 检索该工件。

他们甚至不需要轮询,他们可以使用 Redis pub/sub 让 Redis 在新消息到达时将其推送给他们。这与 SNS 类似,但网络流量将完全包含在您的 VPC 内。

© www.soinside.com 2019 - 2024. All rights reserved.