Перейти к основному содержимому

Распределенные системы: архитектурные паттерны и стили

В распределенной системе различные компоненты работают вместе, при этом физически разнесены.

Характеристики

  • Нет центрального управляющего узла
  • Узлы взаимодействуют через сеть
  • Параллельное выполнение задач на разных узлах
  • Отказоустойчивость: работа при отказах отдельных узлов
  • Масштабирование: добавление узлов для увеличения мощности
  • Автоматическое перераспределение ресурсов в зависимости от нагрузки
  • Адаптация к разным архитектурам и технологиям

Виды распределенных систем

  • Вычислительные системы: распределенные ресурсы для вычислительных задач
    Пример: кластеры для обработки больших данных.
  • Хранилища данных: распределение данных между несколькими узлами
    Пример: 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. Лекция 1: Введение в распределенные системы
  2. Централизованные vs децентрализованные vs распределенные системы
  3. Основы Распределенных Систем
  4. Консистентность и ACID-гарантии в распределенных системах хранения данных
  5. Как обнаружить мертвый узел в распределенной системе
  6. Топ-5 архитектурных паттернов для распределённых систем
  7. Архитектура больших данных: 5 шаблонов проектирования распределенных систем
  8. Замечания о распределенных системах для начинающих

Видео

  1. Распределенные системы. Часть 1. Паттерны распределенных систем
    Часть 2
  2. Архитектура распределенных систем
  3. Распределенные транзакции в условиях микросервисной архитектуры
  4. Распределенные системы: начало

Книги

  1. Распределенные системы. Паттерны проектирования
  2. Распределенные данные. Алгоритмы работы современных систем хранения информации — Алекс Петров