Какой тип репликации базы данных используется на узлах Digital Ocean, предназначенных только для чтения?
Я работаю над двумя проектами Django, которые должны совместно использовать базу данных PostgreSQL, базу данных, которая должна быть реплицирована для работы только на чтение. Причина в том, что один из проектов в основном выполняет операции write
, а другой - read
. Для достижения этой цели я рассматриваю ноды Digital Ocean, предназначенные только для чтения.
Вопрос, который приходит мне на ум, сколько времени требуется для распространения операции записи в первичном сервере на сервер только для чтения, расположенный в том же центре данных, чтобы будущие запросы на чтение возвращали согласованные результаты. И, что более важно, является ли репликация синхронной или асинхронной?
Некоторые решения являются синхронными, то есть транзакция, изменяющая данные, не считается зафиксированной до тех пор, пока все серверы не примут ее к исполнению. транзакция не считается зафиксированной, пока все серверы не зафиксировали транзакцию. Это гарантирует, что при обходе отказа не будут потери данных и что все серверы с балансировкой нагрузки будут возвращать последовательные результаты независимо от того, какой сервер запрашивается. В отличие от этого, асинхронные решения допускают некоторую задержку между фиксацией транзакции и его распространением на другие серверы, что открывает возможность того, что некоторые транзакции могут быть потеряны при переключении на резервный сервер, и что серверы со сбалансированной нагрузкой могут вернуть немного устаревшие результаты. Асинхронная связь используется, когда синхронная связь слишком медленная.
https://www.postgresql.org/docs/current/high-availability.html