Мониторинг фоновых задач в масштабируемой среде - PullRequest
0 голосов
/ 12 мая 2018

У нас есть локальное решение (c # .net), которое работает нормально, теперь мы пытаемся перейти на облако (azure), чтобы использовать функцию автоматического масштабирования.

Мы столкнулись с несколькими проблемами, одна из которых - мониторинг фоновых задач.

Мы создаем новую долгосрочную задачу следующим образом:

1- Write the C# code that will be run on background
2- Run it using our own JobFramework in another thread and storing some handle for the running task
3- Keep checking the progress of the task using the handle

Теперь давайте предположим, что у нас есть 2 экземпляра после масштабирования, а 1-й запускает какую-то задачу.

Если пользователь проверяет состояние задачи с помощью дескриптора и запрос переходит ко 2-му компьютеру, мы получим неожиданный результат, поскольку он выполняется в каком-то потоке на 1-м компьютере.

Есть ли какие-либо предложения по решению этого вопроса?

1 Ответ

0 голосов
/ 14 мая 2018

не зная специфики;здесь я иду.

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

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

Другим способом может быть поддержание очереди сообщений, такой как SQS, за пределами экземпляров, и экземпляры должны быть разумно подобраныработать, но это может быть серьезным изменением, поэтому его нелегко реализовать.

...