2016-02-18 1 views
0

Я новичок в AWS, но это стек, который мы используем, поэтому это необходимо для работы с AWS.Как я могу добавить узлы EC2 и начать их собирать из пула совместной работы?

Я ничего не вижу в наборе инструментов AWS, который помогает мне раскручивать еще один узел EC2, а затем автоматически обрабатывать выделение кучи задач новому узлу.

Так, например, у меня может быть множество запросов на создание чисел Фибоначчи. Первоначально один JVM на одном узле EC2 мог запускать, красть партию чисел для обработки и обрабатывать их.

По мере увеличения нагрузки второй узел может запускаться, а его JVM украсть следующую партию чисел для обработки.

Примечание: ни один номер не должен обрабатываться более одного раза, в идеале. Нечетный обман не имеет значения, но нам нужно избегать конфликтов во всех партиях работы.

Я мог хранить задачи в RDS или, возможно, в DynamoDB. Затем мне нужно было бы отметить записи, зарезервированные конкретным узлом EC2 для обработки, и очистить их после завершения. Хуже того, мне пришлось бы иметь какую-то логику восстановления, если бы узел EC2 опустился и оставил некоторые записи, помеченные для обработки.

Я мог бы использовать что-то не-AWS-y, например Redis, и распространять данные в памяти через JVM. Мне по-прежнему нужно упорствовать в записи в какой-то момент, поскольку они должны быть долговечными, но это, по-видимому, будет более результативным.

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

+0

См. Https://aws.amazon.com/documentation/autoscaling/ – alfasin

+0

Я не вижу ничего, что касается общего состояния или распределения работы из пула. – fiddlesticks

+0

Предполагая, что все узлы в вашей ASG настроены с использованием одного и того же AMI, вы можете создать правило автомасштабирования на основе использования ЦП или других показателей, доступных в watchwatch, таким образом, когда ваша ASG будет перегружена, AWS автоматически разворачивает новые экземпляры. Если у вас нет логики вашего экземпляра, испеченного в AMI, то есть если любой новый экземпляр, который вы добавляете, требует ручной установки и настройки - тогда AFAIK невозможно автоматическое масштабирование без ручного вмешательства. – alfasin

ответ

0

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

Обратите внимание, что SQS гарантирует, что сообщения будут доставлены «по крайней мере один раз» (https://aws.amazon.com/sqs/faqs/), поэтому ваше приложение должно иметь возможность обрабатывать повторяющиеся задачи соответствующим образом.

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

+0

Это интересно - это, вероятно, будет работать для примера Фибоначчи. Однако у меня есть дополнительное усложнение: работа основана на времени, то есть в момент времени 1, выполняйте набор задач A, а затем в момент времени 2 выполняйте набор задач B. На самом деле задачи в моем случае состоят в том, чтобы отправлять сообщения в сообщение очереди ... но только с интервалами, заданными вызывающим абонентом. Бит, как будильник. – fiddlesticks

+0

Если у вас есть два набора задач (A и B), вы можете использовать две очереди SQS. Тогда ваши приложения могут потребляться из соответствующей очереди в течение установленного периода времени. (Вы можете использовать третью очередь SQS для очереди сообщений.) – jbird