我有一组外部服务,希望在短时间内(大约30秒)从AWS轮询。例如,我有一组git repos,我希望轮询这些更改以触发ci管道。
我的要求是:
在AWS中实现这一点的成本效益方法是什么?
显而易见的方法是启动一组ec2实例(我想要轮询的每100个服务中可能有一个实例)并在它们之间分发服务。对于自愈来说,一种方法是自动标度组。
但是,要使其工作,自动标度中的每个实例都将知道它对哪些服务负责,这意味着每个实例都需要一个在重新启动时可以恢复的唯一id。我从这里上读到,这不是一个好的实践。
发布于 2019-08-07 19:10:06
你的实际用例是什么?您给出了一个监视git的示例,但如果这不是您实际要做的,则解决方案可能会有所不同。
无
这听起来像是使用Lambda/ Serverless计算的教科书用例。这是你的选择吗?
无论您收到什么更改,推送都比轮询更有效(正如MLu;所指出的那样)。如果您的工作负载确实是监视git存储库(作为示例给出的),则当某些事情发生变化时,它们可以推送给您。我不知道你是否可以这样做,如果你不拥有回购,但这是绝对值得考虑。
通过其他机制(如lambda或EC2实例)推送到SQS队列将是廉价和可靠的。
如果您必须使用EC2实例,我可以考虑几个选项
这样做的一个缺点是成本。每30秒检查5000次,相当于每天1440万条消息,按SQS收费计算为5.36美元。如果你把它们分批成10组,那就是每天50摄氏度。在t3a.nano实例上运行您自己的队列似乎更便宜,但是您必须设置并管理它。
与上面类似,但是要在DynamoDB中存储所需的作业,并让服务器轮询作业。设置起来会更加繁琐,基本上是使用类似于队列的DB。
您可以将要执行的检查存储在S3中,由lambda监视对象/文件进行修改。当它这样做时,lambda会划分作业并更新员工的配置。
还有很多其他的解决方案,可能比这些更好,但这是一些没有太多思考的想法。
发布于 2019-08-07 19:55:34
此外,大多数GitLab服务,如GitHub、GitLab或Bitbucket都会发布最近变化的提要,RSS或类似的内容。而不是每30秒使用git something ...检查数以千计的git,只需执行一个http请求就可以从提要中获取最新的更改。
希望有帮助:)
https://serverfault.com/questions/978283
复制相似问题