Does it work with Amazon RDS MySQL instances?
Плагин репликации и балансировки нагрузки (mysqlnd_ms
) для mysqlnd
позволяет легко добавить поддержку репликации в MySQL ко всем PHP MySQL расширениям,
которые используют mysqlnd.
Начиная с версии PHP 5.3.3, встроенный драйвер MySQL (mysqlnd
)
имеет возможность написания внутренних плагинов, используя API языка C. C-плагины,
такие как плагин репликации и балансировки нагрузки, могут расширить функциональность
mysqlnd.
Встроенный драйвер MySQL (mysqlnd
) - это C-библиотека, которая
поставляется вместе с PHP. Она служит полноценной заменой
для клиентской библиотеки MySQL (libmysqlclient). Использование библиотеки mysqlnd
имеет несколько преимуществ: не нужно дополнительных библиотек, так как она идёт
в комплекте с PHP, она под лицензией PHP, ниже потребление памяти в определённых
случаях, и она содержит новую функциональность, такую как асинхронные запросы.
Плагины mysqlnd, такие как mysqlnd_ms
, в большей
части работают прозрачно для пользователя. Плагины репликации и балансировки нагрузки
поддерживают все приложения на PHP и все MySQL-расширения для PHP. Они не изменяют
существующее API. Поэтому это может быть легко использовано с существующими
PHP-приложениями.
Ключевые особенности плагина PECL/mysqlnd_ms следующие:
Прозрачность и, следовательно, лёгкость в использовании.
Поддержка всех MySQL-расширений для PHP.
Поддержка SSL.
Совместимое API.
Требуется небольшое или вовсе не требуется изменение приложения, в зависимости от задач.
Ленивые соединения: соединение к master- и slave-серверу не открываются до непосредственного выполнения SQL-запроса.
Дополнительно: автоматическая использование master-сервера после первой записи в веб-запрос, для того, чтобы снизить возможное влияние задержки репликации.
Может быть использовано совместно с любыми кластерными решениями MySQL.
MySQL-репликация: разделение чтения и записи выполняется с помощью плагина. Это основное назначение плагина.
Кластер MySQL: разделение чтения и записи может быть отключено. Возможна версия конфигурации с многими master-серверами.
Сторонние решения: плагин оптимизирован для MySQL-репликации, но может быть использован с другими типами решений для кластеризации MySQL.
Возможности стратегии разделения чтения и записи.
Автоматическое определение SELECT-запросов.
Поддержка подсказок SQL (SQL hints) для переопределения действий по умолчанию.
Возможно определение пользователем.
Может быть отключено для, например, случая использования синхронных кластеров, таких как MySQL-кластер.
Возможности стратегии балансировки нагрузки.
Round-robin-алгоритм: позволяет выбрать slave-сервер на основе Round-robin-алгоритма для каждого запроса на slave-сервер.
Алгоритм случайности: выбирает случайный slave-сервер для каждого slave-запроса.
Алгоритм случайности на запрос: выбирает slave-сервер для выполнения всех запросов в течение одного веб-запроса.
Возможно определение пользователем: в приложении можно зарегистрировать
callback-функцию для mysqlnd_ms
.
PHP 5.4.0 или выше: транзакции знают об использовании API-вызовов только для управления транзакциями.
Взвешенная балансировка нагрузки: сервера могут быть назначены с разными приоритетами, например, можно задать перенаправление большего количества запросов к более мощному серверу, чем к другому менее мощному. Или же задать желаемый сервер, находящийся недалеко, для уменьшения задержки.
Глобальный идентификатор транзакции.
Эмуляция на стороне клиента. Осуществляет ручной перенос master-сервера и повышение slave-сервера легче с асинхронными кластерами, такими как MySQL Replication.
Поддержка встроенных глобальных идентификаторов транзакций для MySQL 5.6.5 или выше.
Поддержка использования идентификаторов транзакции для идентификации текущих асинхронных slave-серверов для чтения в случае, когда требуется сессионная согласованность. Пожалуйста, обратите внимание на ограничения, упоминаемые в руководстве.
Регулирование: в дополнение, плагин может ожидать "синхронное" состояние slave-сервера перед продолжением.
Обслуживание и последовательность уровней.
Приложения могут запросить сессионную и сильную согласованность, а также согласованность в конечном счёте для соединений. Поиск соответствующих узлов кластера будет выполнен автоматически.
Доступ к slave-серверам в MySQL-репликации с согласованностью в конечном счёте может быть заменён на доступ к быстрому локальному кешу для уменьшения загрузки сервера.
Партиционирование и шардинг.
Сервера в кластере репликации могут быть организованы в группы. Подсказки SQL могут быть использованы для ручного направления запросов к определённой группе. Группировка может быть использована для секционирования (шардинга) данных или же для решения проблемы горячих точек с обновлениями.
Фильтры MySQL-репликации поддерживаются через фильтр таблицы.
MySQL-фабрика
Экспериментальная функция для поддержки MySQL-фабрики также включена.
Встроенный механизм разграничения чтения и записи очень простой. Каждый запрос,
начинающийся с ключевого слова SELECT
, рассматривается как
читающий запрос и будет отправлен на slave-сервер. Все другие запросы
(такие как SHOW
) рассматриваются как записывающие запросы и будут
посланы к master-серверу MySQL. Этот встроенный механизм может быть переопределён,
используя подсказки SQL (SQL hints) или пользовательские
callback-функции.
Механизм разграничения чтения и записи не знает об мульти-запросах. Мульти-запросы
рассматриваются как один запрос. Решение о перенаправлении запроса основано на начале
запроса. Например, при использовании mysqli_multi_query() для
выполнения мульти-запроса SELECT id FROM test ; INSERT INTO test(id) VALUES (1)
,
запрос будет перенаправлен к slave-серверу из-за того, что он начинается с
ключевого слова SELECT
. INSERT
-запрос,
который является частью мульти-запроса, не будет перенаправлен к master-серверу.
Замечание:
Приложения должны быть осведомлены о последствиях переключения соединений, которые выполняются с целью балансировки. Пожалуйста, обратитесь к документации за информацией об объединении и переключении соединений, обработки транзакций, отказоустойчивости при балансировки нагрузки и механизме разграничения чтения и записи.
Сокращение mysqlnd_ms
означает
mysqlnd master slave plugin
. Над названием особо не задумывались и
он было выбрано быстро. В самом начале разработчики не рассчитывали продолжать
дальнейшее использование кода.