Архитектура AWS - веб-приложение (диаграмма) - PullRequest
0 голосов
/ 29 августа 2018

Я нахожусь в процессе настройки инфраструктуры AWS среднего размера для веб-проекта. Возможно, я обдумываю пару вещей и поэтому хочу спросить мнение сообщества. Любой вклад приветствуется.

См. Рисунок: здесь

Пояснение (слева направо):

  1. Мой домен размещен на GoDaddy и будет просто направляться в Cloudfront для глобального кэширования статического содержимого.
  2. Cloudfront будет указывать на Route53, который отвечает за маршрутизацию пользователя в ближайший регион на основе геопривязки и / или задержки
  3. Каждый регион будет иметь балансировщик нагрузки доступности, указывающий на экземпляр EC2 (разные зоны доступности для аварийного восстановления)
  4. Оттуда каждый экземпляр EC2 выполняет запись в одну базу данных MySQL. Статический контент загружается из корзины S3.
  5. Эта база данных MySQL реплицируется / синхронизируется между зонами доступности и регионами и создает реплики для чтения
  6. Если экземпляр EC2 имеет запрос на чтение, он связывается с другим маршрутизатором Route53, который перенаправляет запрос на чтение к балансировщику нагрузки (в каждом регионе) в зависимости от того, откуда поступает запрос (геополитичность / задержка). Единственная альтернатива, которую я вижу здесь, - это направить запросы на чтение из европейского экземпляра EC2 на европейский балансировщик нагрузки. (наоборот для США)
  7. Балансировщик нагрузки в каждом регионе будет решать, из какой базы данных выполнять чтение, исходя из работоспособности или количества запросов
  8. Каждый экземпляр EC2 также может запускать функцию LAMBDA через шлюз API.

Что мне не хватает? Это слишком много? Каковы взлеты и падения этой конструкции?

Спасибо всем большое!

1 Ответ

0 голосов
/ 30 августа 2018

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

Шаг 7 проблематичен, поскольку ELB нельзя использовать для балансировки экземпляров RDS. Однако с Aurora / MySQL вы получаете одно имя хоста конечной точки «считывателя» кластера с коротким TTL, который балансирует нагрузку между вашими репликами Aurora. Если реплика умирает, она автоматически удаляется из DNS.

Шаг 8 Использование шлюза API строго не обязательно - экземпляры могут напрямую вызывать функции Lambda через API Lambda.

Кроме того, есть Lambda @ Edge, который позволяет запускать функции Lambda непосредственно из CloudFront - хотя, если необходимая вам функция Lambda имеет большой размер (зависимости) или ее необходимо запускать внутри VPC, вам необходимо каскадировать две из них - функция пограничного уровня (не в VPC) вызывает региональную функцию (большую или в VPC), но обычно она все же дешевле, чем API-шлюз. Пограничные функции автоматически реплицируются глобально и запускаются в области, ближайшей к краю CloudFront, обрабатывающей отдельный запрос, и в рамках любого конкретного вызова функции это можно определить путем проверки process.env.AWS_REGION. Краевые функции также можно использовать для изменения источника, обслуживающего контент, например, например, если ваша функция видит, что она была вызвана в регионе ЕС, она может переписать запрос, чтобы CloudFront отправлял запросы S3 в корзину ЕС.

Если ваш сайт находится на вершине домена, например, example.com вместо, скажем, www.example.com, ваш домен должен быть размещен в Route 53, а не в Go Daddy, поскольку ограничения в стандартах DNS не допускают динамического поведения, требуемого CloudFront на вершине. Вы все еще можете зарегистрировать свой домен в них, но не размещать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...