Обзор
В MongoDB read replicas (вторичные узлы) по-разному влияют на производительность чтения и записи. Понимание этого различия необходимо для проектирования масштабируемых систем.
Производительность чтения
- Направление операций чтения на вторичные узлы может распределить нагрузку чтения на несколько серверов
- Это улучшает пропускную способность чтения по мере добавления дополнительных вторичных узлов в replica set
- Используй read preferences (например,
secondaryPreferred, nearest) для управления маршрутизацией чтения
Производительность записи
- Все записи должны идти на первичный узел — вторичные узлы не могут принимать операции записи
- Добавление большего количества вторичных узлов не улучшает производительность записи
- Первичный узел асинхронно реплицирует изменения на вторичные узлы после того, как запись зафиксирована
Ключевые ограничения
- Replication lag — вторичные узлы могут немного отставать от первичного, а значит чтение со вторичных узлов может вернуть устаревшие данные
- Запись не масштабируется — replica sets в MongoDB не решают проблему write-heavy нагрузок; вместо этого рассмотри sharding
- Компромисс консистентности — чтение со вторичных узлов жертвует строгой консистентностью в пользу доступности и производительности
- Повышенные инфраструктурные затраты — больше вторичных узлов означает больше серверов для обслуживания
Резюме
| Аспект | Primary | Secondary |
|---|
| Записи | ✅ Приняты | ❌ Не разрешены |
| Чтения | ✅ Поддерживаются | ✅ Поддерживаются |
| Консистентность | Строгая | Eventual consistency |
Read replicas лучше всего подходят для read-heavy рабочих нагрузок, где допустимы случайные устаревшие данные.