Pull to refresh

Comments 4

Сначала так же подумал, но потом вспомнил заказчиков, сертефикаторов и т.д. У автора в статье упоминается .NET, так что видимо там всё виндовое. Ну нет у них репликации на уровне ФС, ну в принципе пофиг)
Думаю можно ещё так:
Для уменьшения задержки при синхронной репликации можно установить значение synchronous_commit в remote_write. В таком случае будет ожидаться не запись на диск, а ответ от резервного сервера о получении данных.
Так же использовать её следует для реально важных данных и включать её следует на уровне приложения, а не конфигурационно для всего сервера.

Минус: при больших нагрузках скорость работы клиентов снизиться: здесь скажется задержка ведомых нод при подтверждении записи транзакций.

Не ведомых, а ведомой, СУБД для синхронной репликации в версии 9.4 использует первую доступную ноду. В случае её сбоя другую доступную, но всегда одну.

Всё-таки синхронную репликацию лучше делать частью каскадной репликации с горячим резервом, т.к. как ни крути, а накладной расход на ожидание уменьшает отклик, а если приложение постоянно мелкими запросами меняет данные, то отклик увеличится на порядок.

Про потерю данных в асинхронном режиме: она возможна, на время недоступности ведущего сервера, это есть, хотя потоковая репликация уменьшает это время, всё равно остаётся риск. Но она сильно быстрее работает, а по восстановлении ведущего сервера комиты дозапишутся, если ведомые сервера работали в режиме только для чтения. Если же горячая замена, то по идее без конфликтов допишется, но конфликты могут начаться просто с id записей и oid-ами.

Поэтому грамотный баланс синхронной и асинхронной репликации дадут и возможность горячего резерва с рабочими данными, и бэкап, и хорошие нервы, но делать его хорошо бы на уровне и приложения, и БД, и сетевом, и хардварном))
Sign up to leave a comment.

Articles