Раздел описывает системы, состоящие из нескольких взаимодействующих компонентов, которые выполняются на разных процессах, узлах, сетях или площадках.
Материалы раздела рассматривают координацию, согласованность, масштабирование, обмен сообщениями, устойчивость к частичным отказам и архитектурные механизмы, позволяющие системе сохранять требуемые свойства при росте нагрузки и недоступности отдельных компонентов.
Основные направления
- Основы распределённых систем — узлы, сетевое взаимодействие, локальное и распределённое состояние, частичные отказы, задержки и неопределённость сети.
- Масштабирование и распределение нагрузки — горизонтальное и вертикальное масштабирование, stateless- и stateful-компоненты, балансировка и обнаружение сервисов.
- Репликация и согласованность — модели репликации, lag, кворумы, уровни согласованности, CAP, PACELC и разрешение конфликтов.
- Распределение и размещение данных — partitioning, sharding, consistent hashing, rebalancing, locality и работа с неравномерной нагрузкой.
- Обмен сообщениями и асинхронная обработка — очереди, журналы событий, delivery semantics, consumer groups, ordering, idempotency и обработка повторов.
- Координация и распределённые операции — лидерство, консенсус, блокировки, саги, двухфазные протоколы и управление совместными изменениями.
- Надёжность и устойчивость к отказам — timeout, retry, circuit breaker, bulkhead, rate limiting, graceful degradation, failover и восстановление.
- Доступность и восстановление системы — SLI, SLO, SLA, резервирование, multi-zone и multi-region архитектуры, RTO, RPO и disaster recovery.
- Проектирование и эксплуатация распределённых систем — границы сервисов, зависимости, наблюдаемость, тестирование отказов, планирование ёмкости и компромиссы архитектурных решений.
Основные вопросы раздела
Материалы раздела должны помогать отвечать на следующие вопросы:
- Почему отказ одного компонента распределённой системы трудно отличить от сетевой задержки?
- Когда следует масштабировать компонент вертикально, а когда горизонтально?
- Как выбрать модель репликации и требуемый уровень согласованности?
- Какие компромиссы описывают CAP и PACELC?
- Как выбрать ключ разделения и избежать hot shard?
- Чем очередь задач отличается от журнала событий?
- Какие гарантии доставки и порядка необходимы конкретному процессу?
- Как сделать повторное выполнение операции безопасным?
- Когда нужна координация, лидер или распределённая транзакция?
- Как ограничить распространение частичного отказа по системе?
- Какие механизмы позволяют системе деградировать контролируемо?
- Как определить целевые показатели доступности и требования к восстановлению?
- Как проверить поведение системы при отказах, задержках и перегрузке?
Границы раздела
Раздел посвящён общим принципам распределённых вычислений, масштабирования, согласованности и устойчивости к частичным отказам.
Сетевые протоколы рассматриваются в разделе сетей и протоколов. Устройство баз данных, репликации и физического хранения относится к разделу данных и хранилищ. Размещение приложений в облаках и Kubernetes рассматривается в разделе инфраструктуры и платформ. Практики мониторинга и диагностики относятся к разделу наблюдаемости и диагностики, а процессы восстановления и реагирования — к разделу доставки и эксплуатации.