Как правильно настроить балансировку нагрузки EC2 для синхронизации файлов в реальном времени? - PullRequest
5 голосов
/ 07 марта 2012

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

Если у меня есть 3 экземпляра (linux) с балансировкой нагрузки для всех, обслуживающих один и тот же сайт, и сайт представляет собой динамический php / mysql, в котором пользователи публикуют темы на форумах каждую секунду, как база данных и файлы синхронизируются со всеми 3 экземплярами в в реальном времени

  1. Нужно ли мне иметь базу данных на RDS, где каждый экземпляр просто указывает на нее?
  2. Как насчет пользовательских файлов. Если пользователь загрузил файл на сайт, то этот файл должен быть доступен немедленно во всех экземплярах немедленно, как это возможно. Я не думаю, что иметь 3 копии на 3 экземплярах очень практично.
  3. Если я изменю сайт, скажем, изменим что-то в файле CSS, как мне синхронизировать изменения со всеми экземплярами.
  4. Как EBS или S3 играют роль во всем этом.

Ответы [ 4 ]

7 голосов
/ 07 марта 2012

Нужно ли мне иметь базу данных на RDS, где каждый экземпляр просто указывает на нее?

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

Как насчет пользовательских файлов.Если пользователь загрузил файл на сайт, то этот файл должен быть доступен немедленно во всех экземплярах немедленно, как это возможно.Я не думаю, что иметь 3 копии на 3 экземплярах очень практично.

Нет, это не практично.Вы можете загрузить его в тот внутренний экземпляр БД, к которому у них всех есть доступ, но на самом деле вам, вероятно, следует загрузить его в S3 в ведре, которое все ваши экземпляры могут использовать с s3tools или чем-то другим.

Если яизменить сайт, скажем, изменить что-то в файле CSS, как синхронизировать изменения для всех экземпляров.

Git.(или SVN) Но вы могли бы использовать cloudfront для ваших файлов JS и CSS ... неплохая идея.И используйте корзину S3 в качестве источника ...

Как EBS или S3 играют роль во всем этом.

Ваша база данных всегда должна быть на томах ebsтак что ты не потеряешь это.S3 можно использовать для дешевого и удобного обмена и хранения файлов во всей среде.

0 голосов
/ 02 июля 2019

Если кто-то читает это в 2019 году, я подумал, что было бы хорошо вмешаться.

Чтобы полностью использовать горизонтальное масштабирование, вы должны сохранять экземпляры EC2 без сохранения состояния.Более подробную информацию можно найти в этом документе AWS в разделе Архитектура без сохранения состояния.

https://d1.awsstatic.com/whitepapers/AWS_Cloud_Best_Practices.pdf

Нужна ли мне база данных в RDS, где каждый экземпляр просто указывает на нее?

Да!это довольно стандартная настройка aws.

Как насчет пользовательских файлов.Если пользователь загрузил файл на сайт, то этот файл должен быть доступен немедленно во всех экземплярах немедленно, как это возможно.Я не думаю, что иметь 3 копии на 3 экземплярах очень практично.

Это часть волшебства, которое приходит с AWS и облаком.Это можно сделать с помощью S3.S3 реализует что-то согласованное по принципу «чтение после записи», что гарантирует полную согласованность для всех новых запросов на размещение.

Если я изменю сайт, скажем, что-то изменим в файле CSS, как мне синхронизироватьизменения для всех экземпляров.

Это зависит от того, на что похож ваш процесс развертывания.Для статического контента вы можете рассмотреть возможность использования CloudFront.Это версия для статических файлов.Другой способ сделать это - использовать группу автоматического масштабирования.Поменяйте конфигурацию запуска с новым ami, содержащим новую версию, и начните уничтожать старые экземпляры один за другим!

Как EBS или S3 играют роль во всем этом.EBS и S3 обслуживают очень разные потребности хранения.Этот вопрос слишком широк, чтобы на него ответить.

Мои два цента - прочитать лучшие практики и архитектуру aws, чтобы полностью использовать облако.Не пытайтесь изобретать велосипед.На самом деле все проще, чем кажется.Приветствия.Почему так сложно синхронизировать файлы в экземпляре ec2?возможно, потому что вам не нужно делать это для начала (да, в некоторых случаях это необходимо, но я не думаю, что это один из них).Вопрос вопрос.Спросите, есть ли способ построить это, где мне не нужно синхронизировать мои файлы с git?Создайте облачную архитектуру и программы для полноценного использования облака и облегчения вашей жизни.

Однако, если вы все же хотите пойти по этому пути по какой-либо причине, я бы посмотрел в devs на aws для управления ресурсами.Ура!

0 голосов
/ 07 марта 2012

Использование S3 - это один из способов синхронизации ваших файлов. Вы должны написать коды, которые каждая загрузка фотографий (например) будет попадать в ваше ведро S3. Но, конечно, ваш экземпляр 3 должен иметь к нему доступ.

Другое решение состоит в том, чтобы иметь общую файловую систему, в которой вы разделяете каталог для 3 экземпляров. Возможное решение этой проблемы - NFS или GlusterFS.

Для RDS, я думаю, это не проблема, вы можете использовать одну БД для 3 экземпляров. Позвольте мне знать, если это помогает.

0 голосов
/ 07 марта 2012

В большинстве случаев у вас может быть один экземпляр RDS, к которому подключаются все 3 экземпляра ec2.Если у вас очень требовательное приложение к базе данных, вы можете посмотреть репликацию базы данных.

...