Cetus классифицирует SQL-запросы, отправленные клиентами, обычно разделяя DDL/DML/транзакционные и другие типы SQL на запросы на запись, а SQL запросов на выборку — на запросы на чтение. Обычно запросы на запись отправляются на основную базу данных, а запросы на чтение распределяются между подчинёнными базами данных или основной базой данных в зависимости от стратегии.
В этой статье основное внимание уделяется стратегии маршрутизации запросов на чтение в Cetus, то есть как запросы на чтение распределяются по различным базам данных внутри одного кластера MySQL. Стратегия маршрутизации запросов на чтение Cetus состоит из двух основных частей:
По умолчанию запросы на чтение без транзакций, не требующие принудительной маршрутизации на основную базу данных через комментарии и не использующие блокировки, будут маршрутизироваться на подчинённые базы данных. Запросы на чтение будут равномерно распределяться между различными подчинёнными базами данных. Только когда все подчинённые базы данных недоступны, запросы на чтение будут направляться на основную базу данных.
Для некоторых бизнес-сценариев основная база данных может обрабатывать часть запросов на чтение. В этом случае необходимо настроить стратегию распределения нагрузки между запросами на чтение на основной базе данных и подчинённых базах данных. В Cetus можно настроить параметр read-master-percentage
, чтобы указать процент запросов на чтение, которые будут направлены на основную базу данных по умолчанию. Диапазон значений этого параметра составляет [0, 100]. Значение по умолчанию равно 0, что означает, что все запросы на чтение сначала направляются на подчинённые базы данных, и только когда все они недоступны, они направляются на основную базу данных. Если этот параметр установлен на 100, все запросы на чтение направляются на основную базу данных. Когда значение находится в диапазоне (0, 100), запросы на чтение маршрутизируются в соответствии с указанным соотношением. Следует отметить, что это соотношение относится к основной базе данных и всем подчинённым базам данных.
Запросы на чтение, направленные на подчинённые базы данных, будут равномерно распределены между ними. На данный момент Cetus поддерживает только метод циклического перебора (RR) для стратегии балансировки нагрузки между подчинёнными базами данных.
Cetus также оптимизировал распределение запросов. Некоторые промежуточные программы MySQL основаны на измерении SQL для балансировки нагрузки, независимо от того, отправляется ли запрос одним и тем же соединением или разными соединениями, промежуточное программное обеспечение последовательно направляет полученные SQL-запросы в соответствующие базы данных.
Однако в реальных сценариях использования было обнаружено, что эта стратегия может привести к большому количеству переключений соединений при длительных соединениях, что приводит к частой настройке переменных сеанса и влияет на эффективность выполнения SQL. Поэтому Cetus оптимизировал эту стратегию и не полностью основывает балансировку нагрузки на измерении SQL. Cetus учитывает ситуацию, когда одно и то же соединение отправляет последовательные SQL-запросы. Вместо немедленного возврата соединения с Cetus и MySQL в пул соединений для повторного использования, оно временно удерживает соединение в течение короткого периода времени (256 миллисекунд), ожидая дальнейших SQL-запросов, чтобы избежать частой настройки переменных сеанса и значительно повысить эффективность выполнения SQL.
Когда существует хотя бы одна доступная подчинённая база данных, факторы, влияющие на стратегию маршрутизации запросов на чтение, включают:
select...for update
или select ... lock in share mode
;master-preferred=true
в Cetus для направления всего трафика на основную базу данных по умолчанию;read-master-percentage
для управления распределением нагрузки между основной и подчинённой базами данных для запросов на чтение;/*#mode=READWRITE*/
или /*#mode=READONLY*/
.По умолчанию запросы на чтение сначала маршрутизируются на подчинённые базы данных, и между различными подчинёнными базами данных используется метод циклического перебора для балансировки нагрузки. Как только все подчинённые базы данных становятся недоступными, запросы на чтение перенаправляются на основную базу данных. В настоящее время Cetus не поддерживает балансировку нагрузки между подчинёнными базами данных на основе весов.
Что касается пунктов 1, 2 и 3, Cetus будет направлять запросы непосредственно на основную базу данных.
Относительно пункта 4, если установлено read-master-percentage=100
, все запросы на чтение будут направлены на основную базу данных; если установлено read-master-percentage=[0, 100)
, Cetus будет направлять запросы на чтение на основную и подчинённые базы данных в соответствии с заданным соотношением. Обратите внимание, что здесь «подчинённые базы данных» относятся ко всем подчинённым базам данных, то есть это соотношение между основной базой данных и всеми подчинёнными базами данных.
Что касается пункта 5, если используется комментарий /*#mode=READWRITE*/
, запросы на чтение будут направлены на основную базу данных; если используется комментарий /*#mode=READONLY*/
, запросы на чтение будут направлены на подчинённые базы данных и будут перенаправлены на основную базу данных только тогда, когда все подчинённые базы данных станут недоступными.
Среди этих факторов приоритет имеют комментарии, затем параметр master-preferred
, и наконец, параметр read-master-percentage
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )