Размещенные службы .Net Core в среде с балансировкой нагрузки

Мы разрабатываем веб-API с использованием .Net Core. Для выполнения фоновых задач мы использовали Hosted Services.

Система размещена в среде AWS Beantalk с балансировщиком нагрузки. Таким образом, в зависимости от нагрузки Beanstalk создает/удаляет новые экземпляры системы.

Наша проблема заключается в том, что, поскольку фоновые службы также работают внутри API, когда балансировщик нагрузки увеличивает количество экземпляров, количество фоновых служб также увеличивается, и есть возможность выполнять одну и ту же задачу несколько раз. В идеале должен быть только один экземпляр фоновых служб.

Один из способов решить эту проблему — прекратить выполнение фоновых служб в среде с балансировкой нагрузки и создать выделенную среду с одним экземпляром без балансировки нагрузки только для фоновых служб.

Это немного уродливое решение. Так,

1) Есть ли лучшее решение для этого?

2) Есть ли способ определить основной экземпляр в среде с балансировкой нагрузки? Если это так, я могу условно зарегистрировать Hosted services.

Любая помощь очень ценится.

Спасибо


comment
У меня такая же проблема. Вы нашли больше информации по этому поводу?   -  person Ryan Buening    schedule 12.03.2020
comment
Не совсем. В настоящее время я отключил выполнение фоновых служб в среде с балансировкой нагрузки и создал еще одну среду с одним экземпляром для фоновых служб. Я использую переменную настроек приложения для условной регистрации размещенных сервисов. Я знаю, что это уродливое решение, но пока оно работает нормально. В этом случае лучше использовать AWS Lambdas для фоновых сервисов. (вы размещаете на AWS?)   -  person Wijitha    schedule 13.03.2020
comment
Мои приложения ASP.NET Core размещены в IIS. Я думаю, что мы собираемся использовать Hangfire (hangfire.io), чтобы решить проблему с балансировщиком нагрузки. Спасибо.   -  person Ryan Buening    schedule 13.03.2020


Ответы (1)


Я сталкиваюсь с тем же сценарием и думаю о способе реализации пользовательской архитектуры службы, которая может нормально работать на всех экземплярах, но использовать преимущества брокера публикации/подписки и службы распределенной памяти, чтобы эти небольшие службы связывались друг с другом и координировали то, что сделать. Это сложно разработать, да, но очень надежное решение IMO.

person Yasser Jarouf    schedule 05.09.2020