Руководство по архитектуре для AWS, запускающего приложение Rails (настройка Web / Worker) - PullRequest
0 голосов
/ 25 сентября 2019

Мы размещаем приложение на AWS и используем EB (ElasticBeanstalk) для развертываний.Приложение - Rails, и мы используем Sidekiq для фоновых процессов.Мы отсоединили экземпляр RDS, ElasticCache (для связи с Sidekiq) и, в общем, мы являемся архитектурой без состояния.

В данный момент наш веб-процесс и процесс sidekiq работают на одних и тех же экземплярах EC2.Это означает, что нам нужно использовать более крупные экземпляры для поддержки этого процесса.Мы хотим перейти к разделению веб-архитектуры и рабочей архитектуры.Идея состоит в том, чтобы перемещать веб-процессы на маленькие экземпляры EC2 и иметь один большой экземпляр EC2, предназначенный только для Sidekiq.Причиной этого является то, что у нас есть проблемы с использованием ЦП, когда большие рабочие места занимают все ресурсы и приводят в действие экземпляр, который превосходит домино в новых экземплярах и, как правило, не оптимальное использование наших ресурсов.нам, но у нас возникают проблемы с поиском веб-ресурсов, где это было реализовано.Также нас смущает настройка приложений Web EB и Worker EB по отдельности.Как бы развернуть работу, мы бы развернули два отдельных приложения EB одновременно?Это не кажется безопасным.

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

Также есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 25 сентября 2019

Настройка web / worker, описанная вами для приложения Rails, абсолютно уместна.В одном приложении вы можете создать среду для своего веб-сервера и среду для своего работника.Ваша база кода может быть развернута в обеих средах по отдельности (если ваши изменения влияют только на работника или веб-сервер) или одновременно (если ваши изменения влияют на обе среды).Вы можете установить переменные среды, специфичные для вашей среды, которые вы можете использовать, чтобы определить, должен ли код выполняться на рабочем или веб-сервере.Вот краткое описание шагов, которые вы можете использовать:

  1. Создание нового приложения.
  2. Создание среды веб-сервера в приложении (например, «производство»).
  3. Создайте рабочую среду в приложении (например, «production-worker»).
  4. Установите переменную среды, например, APP_ENVIRONMENT (это имя может быть любым, которое вы выберете) в рабочей среде с помощьюзначение «production» и значение «production-worker» в среде production-worker.
  5. Создание файлов конфигурации в .ebextensions для запуска / остановки sidekiq (и любых других программ, необходимых для работника) в зависимости отвключен, если имя переменной APP_ENVIRONMENT соответствует «worker».
  6. Настройка файла cron.yaml для фоновых заданий (см. Документы AWS ).
  7. Для фоназадания, я создаю отдельный контроллер cron для конечных точек, перечисленных в файле cron.yaml.
  8. Развертывание базы кода как на веб-сервере, так и в рабочей среде.Последующие изменения могут быть развернуты по мере необходимости в соответствующей среде.

Для Sidekiq ваше веб-приложение и ваш работник должны получить доступ к серверу Redis, чтобы ваше приложение могло создавать задания, а затемработник может забрать их для обработки.

...