首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以可伸缩和自愈的方式从aws轮询大量外部服务?

如何以可伸缩和自愈的方式从aws轮询大量外部服务?
EN

Server Fault用户
提问于 2019-08-07 11:44:37
回答 2查看 31关注 0票数 0

我有一组外部服务,希望在短时间内(大约30秒)从AWS轮询。例如,我有一组git repos,我希望轮询这些更改以触发ci管道。

我的要求是:

  • 我希望这个解决方案是可扩展的(假设我想要对成千上万的git repos进行投票)。
  • 我希望解决办法是自愈。因此,如果外部服务在短时间内没有被轮询(因为一些故障),但是在短时间后轮询应该重新开始,这是可以的。
  • 我需要一些外部方式来删除和添加应该被轮询的外部服务。

在AWS中实现这一点的成本效益方法是什么?

我对解决方案的思考

显而易见的方法是启动一组ec2实例(我想要轮询的每100个服务中可能有一个实例)并在它们之间分发服务。对于自愈来说,一种方法是自动标度组。

但是,要使其工作,自动标度中的每个实例都将知道它对哪些服务负责,这意味着每个实例都需要一个在重新启动时可以恢复的唯一id。我从这里上读到,这不是一个好的实践。

EN

回答 2

Server Fault用户

发布于 2019-08-07 19:10:06

你的实际用例是什么?您给出了一个监视git的示例,但如果这不是您实际要做的,则解决方案可能会有所不同。

服务器的

这听起来像是使用Lambda/ Serverless计算的教科书用例。这是你的选择吗?

Push

无论您收到什么更改,推送都比轮询更有效(正如MLu;所指出的那样)。如果您的工作负载确实是监视git存储库(作为示例给出的),则当某些事情发生变化时,它们可以推送给您。我不知道你是否可以这样做,如果你不拥有回购,但这是绝对值得考虑。

通过其他机制(如lambda或EC2实例)推送到SQS队列将是廉价和可靠的。

EC2 Options

如果您必须使用EC2实例,我可以考虑几个选项

EC2选项1

  • 将所需检查推入队列的发行者。由EC2事件触发的小型CloudWatch / Lambda
  • 根据队列中的消息数量进行缩放的消费者自动标度组

这样做的一个缺点是成本。每30秒检查5000次,相当于每天1440万条消息,按SQS收费计算为5.36美元。如果你把它们分批成10组,那就是每天50摄氏度。在t3a.nano实例上运行您自己的队列似乎更便宜,但是您必须设置并管理它。

EC2选项二

与上面类似,但是要在DynamoDB中存储所需的作业,并让服务器轮询作业。设置起来会更加繁琐,基本上是使用类似于队列的DB。

EC2选项三

您可以将要执行的检查存储在S3中,由lambda监视对象/文件进行修改。当它这样做时,lambda会划分作业并更新员工的配置。

还有很多其他的解决方案,可能比这些更好,但这是一些没有太多思考的想法。

票数 2
EN

Server Fault用户

发布于 2019-08-07 19:55:34

此外,大多数GitLab服务,如GitHub、GitLab或Bitbucket都会发布最近变化的提要,RSS或类似的内容。而不是每30秒使用git something ...检查数以千计的git,只需执行一个http请求就可以从提要中获取最新的更改。

希望有帮助:)

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/978283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档