Назад | Перейти на главную страницу

Как разместить сайт Wordpress на нескольких серверах из-за проблем с географической загрузкой сайта?

Веб-сайт Wordpress в настоящее время размещен в США, это место, где находится 40% нашей целевой аудитории. Остальные посетители прибывают из Ближнего Востока, Австралии, России, Китая, Сингапура, Великобритании, Швейцарии, Казахстана ... со всех концов карты.

При наличии кеширования (не CDN) он по-прежнему почти не загружается в Азии / Океании и имеет проблемы со скоростью в Европе.

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

Какие-нибудь советы?

Как вы увидите, все проблемы с географическим распределением WordPress связаны с базой данных MySQL.

В основном есть два способа спроектировать это:

Читать реплики

В этой архитектуре вы запускаете свой интерфейс LAMP с WordPress в нескольких географических точках, каждое из которых имеет реплику только для чтения (подчиненную) главной базы данных MySQL. Вам нужно будет использовать что-то вроде Прокси MySQL чтобы направить операции записи обратно на мастер, поскольку WordPress изначально не поддерживает использование другого соединения с базой данных для чтения и записи.

Большая проблема с этой настройкой заключается в том, что, если ваш мастер выходит из строя, вы не можете вносить изменения (например, никаких новых сообщений или комментариев). Таким образом, мастер, вероятно, должен быть кластеризован или защищен иным образом (например, с помощью Amazon RDS Multi-AZ). Запись в базу данных также немного задерживается из-за сетевой задержки между интерфейсом LAMP и удаленным мастером MySQL.

Мульти-мастер

В этой архитектуре вы запускаете свой интерфейс LAMP с WordPress в нескольких географических точках, каждый из которых имеет реплицированную базу данных с несколькими мастерами, используя что-то вроде MariaDB Galera или эквивалентное решение MySQL (если вы его найдете). Если вы идете по этому маршруту, у вас должно быть как минимум три мастера.

Поскольку нет единой точки отказа, действительно не имеет значения, выйдет ли из строя один мастер (если они не ВСЕ выходят из строя одновременно; эта ситуация требует ручного вмешательства для восстановления).

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


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

Я предполагаю, что, поскольку этот вопрос был помечен как amazon-web-services, ваш сайт Wordpress работает на экземплярах Amazon AWS EC2. В этом случае вы можете использовать продукт Amazon Route53 для обслуживания географических записей DNS. Вы можете найти подробное руководство Вот. Существуют и другие поставщики DNS, которые поддерживают географические записи DNS, например Dyn но учтите, что это будет дополнительная функция, за которую вам нужно будет заплатить.

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

нет, это невозможно. В таком случае это будет что-то вроде круговой системы. В вашем случае CDN будет лучшим выбором, imho.