【发布时间】:2020-02-07 10:29:22
【问题描述】:
我们正在使用 .Net Core 开发 Web API。为了执行后台任务,我们使用了托管服务。
系统已通过负载均衡器托管在 AWS Beantalk 环境中。因此,Beanstalk 会根据负载创建/删除系统的新实例。
我们的问题是, 由于后台服务也在 API 内部运行,当负载均衡器增加实例时,后台服务的数量也会增加,并且有可能多次执行相同的任务。理想情况下,应该只有一个后台服务实例。
解决此问题的一种方法是在负载平衡环境中停止执行后台服务,并为后台服务提供专用的非负载平衡单实例环境。
这是一个有点丑陋的解决方案。所以,
1) 有没有更好的解决方案?
2) 有没有办法在负载平衡环境中识别主实例?如果是这样,我可以有条件地注册托管服务。
非常感谢任何帮助。
谢谢
【问题讨论】:
-
我遇到了同样的问题。你找到更多关于这方面的信息了吗?
-
并非如此。目前我所做的是,在负载平衡的环境中禁用执行后台服务,并为后台服务设置另一个单实例环境。我使用 app-settings 变量有条件地注册托管服务。我知道这是一个丑陋的解决方案,但到目前为止它工作正常。在这种情况下,将 AWS Lambdas 用于后台服务会更好。 (您在 AWS 上托管吗?)
-
我的 ASP.NET Core 应用托管在 IIS 上。我想我们将研究使用 Hangfire (hangfire.io) 来解决负载均衡器问题。谢谢。
标签: asp.net-core amazon-elastic-beanstalk amazon-elb aws-load-balancer asp.net-core-hosted-services