Я размещаю веб-сайт на основе ExpressionEngine на одном экземпляре Amazon EC2 в регионе Восток США (Вирджиния). Я использую Ubuntu.
Веб-сайт позволяет участникам публиковать свой контент и отображает его для других участников и для пользователей, которые не вошли в систему.
Цель: Мне нужно начать обслуживать один и тот же веб-сайт по всему миру, одинаково быстро в Гонконге, Нью-Йорке и Лос-Анджелесе.
Я рассмотрел два решения:
1. Настройка трех отдельных инстансов EC2 для трех регионов: Вирджиния, Орегон и Сингапур. Используйте Amazon Rot53 Geo Location для направления трафика к инстансам на основе IP-адреса браузера.
Плюсы: сайт будет загружаться быстро для региона.
Противоположно: по сути, это будут три отдельных веб-сайта. Разве я ошибаюсь?
Плюс: это будет один и тот же сайт для всех регионов.
Против: сделать это достаточно быстро будет дорого.
Мои проблемы:
а) Я не знаю, как синхронизировать настройки сервера, базу данных и контент между несколькими экземплярами Ubuntu в реальном времени. Если бы знающий человек объяснил мне, как это сделать, я был бы очень благодарен.
б) Я не очень хорошо знаком со всеми ресурсами Amazon AWS. Есть ли в AWS встроенный метод, который позволил бы мне достичь моей цели - одинаково быстро обслуживать один членский веб-сайт на основе PHP / MySQL по всему миру во всех трех выбранных местах?
Есть много способов снять шкуру с кошки, но в основном вам нужно так или иначе воспроизвести свой сайт в нескольких географических точках.
Вот несколько вариантов, которые могут быть подходящими, если ваше приложение сильно читается (что есть на большинстве веб-сайтов). Я не знаком с Expression Engine, поэтому не уверен, насколько сложно реализовать эти архитектуры в вашем случае.
Вариант 1. Реплики межрегионального чтения
Вариант 2: кеширование прокси
Если ваш контент почти полностью статичен, вы можете иметь кеширующий прокси в каждом регионе. Если вам не нужны расширенные правила кеширования CloudFront - очень простое решение, иначе у вас могут быть экземпляры EC2 с лаком.
Вариант 3: кэширование базы данных
Базы данных являются наиболее сложным элементом для распространения в вашем сценарии, поэтому вы можете оставить его в одном регионе (и подключить другие регионы к базе данных в вашем главном регионе), а затем использовать кэширование данных в своем приложении, чтобы минимизировать задержку. Если ваше приложение поддерживает кэш памяти, то в качестве варианта можно использовать ElastiCache.