Как использовать 1 соединение с базой данных для чтения и другое для записи WordPress MySQL?
Я использую экземпляр Amazon RDS для размещения баз данных MySQL для всех моих 6 веб-сайтов WordPress. В момент пика наибольшего трафика у экземпляра RDS загрузка ЦП достигает 100% в течение часа.
Я думаю о распределении нагрузки на сервер базы данных по активности чтения. Большая часть трафика на мои сайты приходится на незарегистрированных пользователей. Итак, я хотел бы подключить этих незарегистрированных пользователей к экземпляру RDS с репликой чтения, почему остальные, к исходному экземпляру RDS, используют текущее соединение с базой данных, которое я использую.
Как мне этого добиться?
2 ответа
Масштабирование Wordpress По мере увеличения трафика на вашем сайте вы также будете испытывать большую нагрузку на серверы. Чтобы не отставать от скорости, у вас есть две возможности: scale up
- увеличить размер вашего бокса - это - особенно в AWS - очевидно, имеет ограничения, помимо других недостатков, таких как время простоя при масштабировании в обоих направлениях.
scale out
: разделить трафик и позволить нескольким машинам делать работу. Просто добавьте машину, когда ваш трафик превышает пороговое значение, и отключите питание, когда ваш трафик имеет более низкий уровень.
Масштабирование в обычной настройке можно выполнить на веб-серверах или серверах баз данных. AWS поможет вам с обоими. Поскольку база данных является общим узким местом, и этот вопрос на самом деле требует решения этой проблемы, сейчас я расскажу о масштабировании базы данных.
Amazon RDS (управляемый MySQL SaaS) предлагает решение в один клик для создания реплик чтения вашей базы данных. В мире баз данных реплика чтения называется подчиненной репликацией. Каждый модифицирующий запрос, выполняемый на вашем главном сервере, будет автоматически воспроизводиться на вашем ведомом компьютере.
Вы можете создать столько реплик чтения, сколько вам нужно для обслуживания ваших пользователей. Теперь начинается сложная часть. Мы говорим о READ репликах. Это означает, что вы не можете просто сбалансировать ваши запросы случайным образом по всем экземплярам. Только главный сервер принимает написание запросов.
Разделение типов запросов и равномерное распределение нагрузки может быть достигнуто с помощью прокси-сервера базы данных, такого как MySQL-прокси, для которого потребуется дополнительная машина. Ваше приложение будет взаимодействовать с этим прокси и не будет нуждаться в каких-либо изменениях само по себе.
Хотя Wordpress не был разработан для установки "главный-подчиненный" и изначально не поддерживается, мы все знаем, что существует множество блогов с большим объемом трафика.
К счастью, есть решение под названием HyperDB
http://wordpress.org/extend/plugins/hyperdb/
Это плагин Wordpress, который делает
- Чтение и запись серверов (репликация)
- Настраиваемый приоритет для чтения и записи
- Локальные и удаленные центры обработки данных
- Частные и публичные сети
- Разные таблицы на разных базах данных / хостах
- Умный пост-запись мастер читает
- Отказ для сбитого хоста
- Расширенная статистика для профилирования
Этот плагин заменит слой абстракции базы данных по умолчанию в Wordpress. Он разработан и активно используется командой Wordpress.
Просто скачайте и обязательно внимательно следуйте инструкциям по установке.
Повеселись!
Сначала настройте реплику чтения RDS, как описано в разделе часто задаваемых вопросов по Amazon. Затем получите клиентскую конечную точку для этой машины (см. Следующий вопрос в FAQ).
Я не уверен, что более новые версии Wordpress поддерживают функцию, которую вы используете "из коробки", но есть способ проверить, вошел ли текущий пользователь в Wordpress. В Wordpress есть метод, позволяющий проверить, вошел ли пользователь в систему. Если вы вызываете эту функцию раньше, чем устанавливаете соединение с базой данных, вы можете изменить соединение с базой данных, если встретите вошедшего в систему пользователя.