Как заставить экземпляр EC2 вызывать другой экземпляр? - PullRequest
0 голосов
/ 29 января 2011

У меня есть два экземпляра EC2.Я хочу, чтобы, если один закончит работу, он подпишет другой, чтобы он занялся другими делами.
Итак, как установить связь?Я не хочу использовать CURL .. потому что это кажется дорогим.Я думаю, что у AWS должно быть какое-то простое решение, но я все еще не могу найти соответствующую помощь в документации.

: (*

также, как быстро отправить данные между двумя экземплярами без giong через SSH? Я знаю, что ssh можно сделать. Но это кажется медленным. Еще раз, любой инструмент, которыйEC2 предоставляет для этого?


На самом деле мне нужны два метода:

1) Экземпляр A сообщает экземпляру B получить данные из экземпляра A.

  • Адриан ответил, что я могу использовать SQS.Я попробую это.

2) Как только экземпляр B получит сигнал, данные данных (EBS) в экземпляре A необходимо передать в экземпляр B. Объем данных может быть большим, даже если я его сжал.Это около 50 МБ.И мне нужен экземпляр B для быстрого получения данных, чтобы у экземпляра B было достаточно времени для обработки данных до наступления следующего интервала.

Итак, я думаю о любом из этих методов:

a) Экземпляр A имеет дамп данных из БД, загружаемый на S3.Затем сигнал Экземпляр B. Экземпляр B получает данные от S3.

b) Экземпляр A имеет дамп данных из БД.Затем подайте сигнал экземпляру B. Экземпляр B устанавливает SSH (или любое другое соединение) с экземпляром A и захватывает данные.

Возможно, данные должны храниться постоянно, но в данный момент это не проблема.Это в основном для экземпляра B для обработки.

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

Спасибо.

Ответы [ 4 ]

3 голосов
/ 29 января 2011

У Amazon есть специальный сервис для этого - он называется SQS и позволяет экземплярам отправлять сообщения друг другу через специальные очереди.Существуют SDK для SQS на разных языках, например Java и PHP .Это должно удовлетворить ваши потребности в сигнализации.

Для фактической отправки громоздких данных лучше использовать S3 (и отправить объектный ключ в сообщении SQS).Вы правы, что вводите задержку, добавляя дополнительного посредника, но вы обнаружите, что S3 на очень быстр от экземпляров EC2 (если вы поместите их в одну зону доступности, то есть), и, что более важно, чем производительность, S3 очень надежен.Если вы попытаетесь сами управлять передачей через SSH, вам придется потрудиться с проверкой ошибок и логикой повторных попыток, которую S3 обрабатывает для вас.Вы можете использовать S3FS для простой записи и чтения в / из S3 из EC2.

Отредактировано для решения вашего обновленного вопроса.

1 голос
/ 29 января 2011

Возможно, вы захотите взглянуть на SNS ... что-то вроде push SQS.

0 голосов
/ 30 июля 2017

Вы можете использовать распределенную службу управления рабочими процессами.

Если экземпляр B уже выполнил задачу, он может продолжить выбирать другую задачу.Обычно вы хотите, чтобы экземпляр B сигнализировал, что он «подобрал» задачу и выполняет ее.Затем другие экземпляры должны попытаться выбрать другие задачи из вашего списка.Вам нужна центральная служба, которая знает, какая задача уже подобрана, а какая оставлена ​​для захвата.

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

Если задача не будет выполнена, центральная служба должна быть в состоянии обнаружить ее (через определенные вами периодические импульсы и тайм-ауты) и вернуть задачу обратно насписок, чтобы его могли забрать другие экземпляры.

Amazon SWF - это центральная служба, которая предоставит вам все это.

Для данных, требуемых для каждого экземпляра.Вы должны поместить его в центральное хранилище, такое как s3, и настроить пути s3 таким образом, чтобы каждая задача знала, откуда загружать данные, без необходимости синхронизации.например, данные для задачи 1 могут быть помещены в что-то вроде s3: // my-bucket / task1

0 голосов
/ 29 января 2011

Как быстро вам нужно это общение? SSH чертовски быстр. Единственное, что я могу думать о том, что может быть быстрее, это необработанные сокеты (из любой программы, выполняющей задания).

...