Перейти к основному содержимому

Отказоустойчивость, балансировка нагрузки и репликация

примечание

Эта страница переведена при помощи нейросети GigaChat.

Серверы баз данных могут работать вместе, чтобы позволить второму серверу быстро взять на себя управление в случае сбоя основного сервера (высокая доступность) или разрешить нескольким компьютерам обслуживать одни и те же данные (балансировка нагрузки). В идеале, серверы баз данных могли бы работать вместе без проблем. Веб-серверы, обслуживающие статические веб-страницы, можно легко объединить, просто сбалансировав запросы к веб-серверам на нескольких машинах. На самом деле, серверы баз данных только для чтения также могут быть объединены относительно легко. К сожалению, большинство серверов баз данных имеют смесь запросов на чтение/запись, а серверы с возможностью чтения/записи гораздо сложнее объединить. Это связано с тем, что хотя данные только для чтения должны размещаться на каждом сервере только один раз, запись на любой сервер должна распространяться на все серверы таким образом, чтобы будущие запросы на чтение с этих серверов возвращали согласованные результаты.

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

Некоторые решения решают проблему синхронизации, разрешая изменять данные только одному серверу. Серверы, которые могут изменять данные, называются серверами для чтения/записи, главными или первичными серверами. Серверы, отслеживающие изменения в первичном сервере, называются резервными или вторичными серверами. Резервный сервер, который не может быть подключен до тех пор, пока он не будет повышен до уровня основного сервера, называется теплым резервным сервером, а тот, который может принимать подключения и обслуживает запросы только для чтения, называется горячим резервным сервером.

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

Решения также можно классифицировать по их гранулярности. Некоторые решения могут работать только с целым сервером баз данных, в то время как другие позволяют управлять ими на уровне таблиц или баз данных.

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

Оставшаяся часть этого раздела описывает различные решения для отказоустойчивости, репликации и балансировки нагрузки.