Скажем, у меня есть 3 разных приложения, все из которых работают по протоколу HTTPS. Не все из них имеют высокий трафик, поэтому я запускаю все 3 в одном «пуле» из 3 экземпляров EC2.
domain1.com/domain2.com/domain3.com имеют свои записи A, указывающие на Amazon ELB, который перенаправляет: 443 и: 80 на nginx: 80 на всех трех серверах (так что да, ELB завершает SSL). Поскольку ELB выполняет завершение SSL, у меня есть три разных ELB вместо одного. Итак, в основном:
domain1.com domain2.com domain3.com
| | |
| | |
V V V
ELB1 ELB2 ELB3
\ | /
\ | /
\ | /
\ | /
\ | /
\ | /
\_______|_______/
|
|
V
---------------------------
nginx nginx nginx
| | |
V V V
php-fpm php-fpm php-fpm
Каждый из трех экземпляров запускает как nginx, так и php-fpm. Таким образом, когда нагрузка слишком высока, мы просто загружаем другой экземпляр из того же образа машины, и он просто присоединяется к пулу. Сами экземпляры настроены таким образом, что nginx подключается только к php-fpm, запущенному на localhost.
Я не знаю, правильный ли это способ решения этого сценария.
Надеюсь, этот вопрос не неуместен для SF.
Должен ли я перенести завершение SSL на nginx, чтобы мне не понадобилось n ELB в качестве сертификатов HTTPS? Как это повлияет на загрузку процессора?
ELB - это дополнительные расходы (около 20 долларов в месяц плюс данные), поэтому вам следует принять это во внимание. Какие функции вы используете? Если вы сразу после завершения SSL, вы, вероятно, могли бы просто выгрузить его на свои веб-серверы / серверы приложений.
Если вы получаете выгоду от функций балансировки нагрузки и масштабирования (наряду с нулевым обслуживанием), вы можете считать это выгодным вложением.
1 ELB на домен может быть дорогостоящим для 100 сайтов, но только для 3 сайтов, вероятно, неплохо не беспокоиться о накладных расходах на обслуживание.
Должен ли я использовать одну машину nginx, которая подключается к нескольким бэкэндам php-fpm? Затем мне нужно беспокоиться о масштабировании двух разных ролей вместо одной.
Вы предлагаете это вместо ELB или в дополнение к ним? Разделение веб-серверов и серверов приложений для получения преимуществ, поскольку может быть удобно масштабировать независимо. Это, конечно, добавляет дополнительные накладные расходы на обслуживание, которые могут не стоить того для 3 сайтов (которые не часто находятся под большой нагрузкой). Я бы не советовал идти по этому пути, пока вы не узнаете, что он вам понадобится.
Как это изменится, если я захочу запустить экземпляры, например, в других регионах?
Вот один пример EC2 в нескольких регионах, использующих ELB и Route53 в сценарии аварийного переключения.
http://aws.amazon.com/elasticloadbalancing/
Используя аварийное переключение DNS Route 53, вы можете запускать приложения в нескольких регионах AWS и назначать альтернативные балансировщики нагрузки для аварийного переключения между регионами. В случае, если ваше приложение не отвечает, Route 53 удалит недоступную конечную точку балансировщика нагрузки из службы и направит трафик на альтернативный балансировщик нагрузки в другом регионе.
Должен ли я перенести завершение SSL на nginx, чтобы мне не понадобилось n ELB в качестве сертификатов HTTPS? Как это повлияет на загрузку процессора?
вы могли бы использовать 1 ELB (или 2 в сценарии активного ожидания), если бы вы могли убедиться, что ВСЕ ваши посетители используют браузеры с поддержкой SNI (см. этот документ о проблемах с SNI, например, с Windows XP, Android 2.x и т. д.), в противном случае вам понадобится 1 общедоступный IP для каждого ssl-сертификата.
я не знаю, можно ли заказать и использовать более 1 IP на экземпляр EC2; Если это так, вы можете просто перенаправить эти IP-адреса на свой единственный ssl-offloader / loadbalancer, избегая проблем с SNI.
Должен ли я использовать одну машину nginx, которая подключается к нескольким бэкэндам php-fpm? Затем мне нужно беспокоиться о масштабировании двух разных ролей вместо одной.
вы могли бы, но это действительно зависит от того, для чего вы используете nginx; если это просто дамп proxy_pass, централизация может быть в порядке, и вы можете значительно упростить настройку, уменьшив некоторые уровни. но на это можно ответить, только взглянув на свою живую установку.
Вы можете запустить что-то вроде этого:
domain1.com domain2.com domain3.com
\ | /
\ | /
\ | /
\ | /
\ | /
\ | /
\_______|_______/
|
ngix (static pages from local storage, 3 IP addresses, SSL termination)
|
|
ELB (optional)
|
|
-----------------------
| | |
V V V
php php php
Это будет немного дешевле, так как 1 зарезервированный небольшой экземпляр EC2 + 1 ELB дешевле, чем 3 ELB.
Вы могли бы быть еще дешевле, если бы вы могли отказаться от ELB и просто использовать обычный циклический перебор DNS (но вы потеряете некоторые функции ELB, такие как автоматическое переключение при отказе).
На задержку обслуживания статических страниц не повлияет нагрузка на экземпляры, обслуживающие php.
Обслуживание PHP не будет конкурировать за оперативную память со статическим кешем ОС страниц.
Вы даже можете использовать apache mod_php вместо php-fpm, если вам не нужно разделение пользователей между процессами - это должно быть несколько быстрее.
Было бы дешевле добавить больше страниц для обслуживания (добавить еще один IP вместо еще одного ELB).
Но есть и недостатки:
У вас была бы еще одна единственная точка отказа (сервер ngix).
Более сложная настройка.