0

У меня есть задача, которая предоставляет большие сложные отчеты PDF, содержащие сложные диаграммы, изображения SVG, таблицы и другие данные. Обработка 1 запроса занимает до 10 минут. Иногда нам приходится обрабатывать сотни таких запросов в ограниченном диапазоне времени. Сетевое приложение, которое выполняет эту работу, в настоящее время размещается на одной машине. Служба полностью без гражданства. Параллелизм на 1 машине почти не имеет эффекта, поэтому мы ищем способы масштабировать его по горизонтали.Масштабирование задач с интенсивным использованием ресурсов в .NET-приложении, размещенном в AWS

Я использую AWS для размещения наших услуг. В настоящее время я думаю о включении экземпляра EC2 с этой службой в группу ручного или автоматического масштабирования с возможностью запуска необходимого количества экземпляров. Также я думаю о добавлении очереди, которая будет нести все запросы. Чтобы все экземпляры работали с одной очередью, каждый экземпляр обрабатывал бы собственный запрос (обработка запроса = рендеринг 1 PDF-отчета).

Не могли бы вы порекомендовать некоторые из готовых способов/лучших практик по масштабированию интенсивной работы ЦП для приложений без учета состояния .NET с использованием AWS.

Спасибо заранее!

ответ

0

У вас есть правильная идея. Запросы на обработку отчетов должны быть помещены в очередь SQS. Рабочие экземпляры EC2 могут использовать эти запросы из очереди и генерировать отчеты. Поместите рабочие экземпляры EC2 в группу автомасштабирования, которая настроена на масштабирование вверх/вниз в зависимости от размера очереди SQS.

На высоком уровне, чтобы начать работу, измените свой код, чтобы публиковать/потреблять запросы из очереди SQS, создавать экземпляр с этим кодом и затем создавать AMI из этого экземпляра. Используйте это AMI в группе автомасштабирования.

Лучшей практикой является использование ролей IAM для экземпляров для управления ключами AWS для доступа к очереди (а также если вы хотите сохранить отчеты на S3 или сделать что-то еще с ними).

Смежные вопросы