Короткий ответ
При синхронной репликации primary подтверждает запись только после подтверждения реплики(к), гарантируя отсутствие потери данных при отказе primary, но увеличивая латентность; при асинхронной репликации primary подтверждает запись немедленно, и при отказе primary до того, как реплика получила изменения, эти изменения будут потеряны.
Как это работает подробнее
Синхронная репликация добавляет сетевой round-trip до реплики в путь каждой записи; асинхронная применяет изменения на реплике отдельным, не блокирующим процессом, с отставанием.
Пример кода
example.sql
-- PostgreSQL: синхронная репликация на конкретную реплику
synchronous_standby_names = 'replica_1'Что использовать на практике
- Практика. Выбор зависит от того, что дороже — потеря последних секунд данных при отказе primary или повышенная латентность/сниженная доступность записи; многие системы используют гибрид (полу-синхронная репликация).
Подводные камни
- Риск. Включать строго синхронную репликацию на несколько реплик без учёта, что при недоступности хотя бы одной из них запись может блокироваться; считать, что наличие реплики само по себе защищает от потери данных без синхронности.