Распределенные системы: архитектурные паттерны и стили
В распределенной системе различные компоненты работают вместе, при этом физически разнесены.
Характеристики
- Нет центрального управляющего узла
- Узлы взаимодействуют через сеть
- Параллельное выполнение задач на разных узлах
- Отказоустойчивость: работа при отказах отдельных узлов
- Масштабирование: добавление узлов для увеличения мощности
- Автоматическое перераспределение ресурсов в зависимости от нагрузки
- Адаптация к разным архитектурам и технологиям
Виды распределенных систем
- Вычислительные системы: распределенные ресурсы для вычислительных задач
Пример: кластеры для обработки больших данных. - Хранилища данных: распределение данных между несколькими узлами
Пример: Cassandra, Яндекс.Cloud. - Файловые системы: доступ к файлам через распределенную сеть
Пример: Virtuozzo Storage, HDFS. - Базы данных (БД): хранение данных на нескольких узлах для согласованности и доступности
Пример: Tarantool, CockroachDB. - Очереди сообщений: упрощение асинхронного взаимодействия
Пример: Kafka, RabbitMQ. - Системы управления: управление контейнерами, оркестрация
Пример: Kubernetes.
Архитектурные стили распределенных систем
-
Клиент-сервер: центральный сервер обслуживает запросы клиентов
Пример: веб-приложения, где браузер взаимодействует с веб-сервером. -
Микросервисы: система делится на независимые сервисы, которые взаимодействуют через API
Пример: платформа для доставки еды, где микросервисы управляют заказами, платежами и профилем клиента. -
Одноранговая (P2P): все узлы равноправны
Пример: торрент-сети, где файлы передаются без центрального сервера. -
Многоуровневая: разделение системы на слои (представление, логика, данные)
Пример: веб-приложения с фронтендом, бекендом и БД на разных серверах. -
Событийно-ориентированная архитектура (EDA): система реагирует на события
Пример: онлайн-магазин, где событие "новый заказ" инициирует действия служб (упаковка товара, отправка уведомлений). -
Сервис-ориентированная архитектура (SOA): взаимодействие между независимыми сервисами
Пример: корпоративные системы с отдельными сервисами для учета, CRM и логистики.
Архитектурные паттерны распределенных систем
-
CQRS: разделение операций чтения и записи для повышения производительности
Пример: интернет-магазин, где обработка заказов и поиск товаров работают независимо. -
Service Mesh: управление взаимодействиями микросервисов
Пример: Istio, Linkerd для маршрутизации и мониторинга. -
Сага: разделение транзакций на шаги с компенсационными действиями
Пример: бронирование путешествия, где каждый шаг может быть отменен. -
Двухфазная фиксация (2PC): протокол для атомарности транзакций
Пример: банковская система, где перевод средств требует согласования изменений в нескольких БД. -
Реплицированные сервисы с распределением нагрузки (RLBS): балансировка запросов между репликами
Пример: веб-сайт с несколькими серверами, которые обрабатывают запросы через балансировщик.
Недостатки распределенных систем
- Сложное управление и мониторинг
- Сетевые задержки влияют на производительность
- Проблемы с согласованностью данных при частых изменениях
- Риски из-за множества точек доступа
Связь с CAP-теоремой
CAP-теорема применима только к распределенным системам и утверждает, что система может гарантировать только две из трех характеристик:
- Консистентность
- Доступность
- Устойчивость к разделению
Подборка материалов
- Лекция 1: Введение в распределенные системы
- Централизованные vs децентрализованные vs распределенные системы
- Основы Распределенных Систем
- Консистентность и ACID-гарантии в распределенных системах хранения данных
- Как обнаружить мертвый узел в распределенной системе
- Топ-5 архитектурных паттернов для распределённых систем
- Архитектура больших данных: 5 шаблонов проектирования распределенных систем
- Замечания о распределенных системах для начинающих
Видео
- Распределенные системы. Часть 1. Паттерны распределенных систем
Часть 2 - Архитектура распределенных систем
- Распределенные транзакции в условиях микросервисной архитектуры
- Распределенные системы: начало