Основы архитектурных стилей

Сегодня разберем основы архитектурных стилей и заодно самые частые заблуждения о распределенных системах.

Стили и паттерны - в чем разница

Архитектурный стиль - это то, как в целом организован исходный код и как система взаимодействует с хранилищами данных.

Архитектурный паттерн - это уже более низкоуровневая структура проектирования, которая помогает принимать конкретные решения внутри выбранного стиля.

Кстати, один из базовых «антипаттернов» - большой ком грязи: когда чёткой распознаваемой структуры попросту нет.

Какие бывают стили

Все стили можно поделить на две группы.

Монолитные: - многоуровневая архитектура - конвейерная - микроядерная

Распределенные: - на основе сервисов - управляемая событиями - на уровне пространства - сервис-ориентированная - микросервисная

Распределенные стили мощнее монолитных по производительности, масштабируемости и доступности. Но за это приходится платить ощутимыми компромиссами.

Заблуждения о распределённых системах

Есть классический список ложных допущений, из-за которых команды попадают впросак.

1. Сеть надежна.  На самом деле — чем сильнее система зависит от сети, тем она менее надежна. Запрос можно не отправить или не получить ответ.

2. Задержка нулевая.  В любой распределенной системе задержка не равна нулю. Всегда нужно знать среднее время задержки, а объединение множества сервисов ради одной бизнес-задачи это время только увеличивает.

3. Пропускная способность бесконечна.  Как только систему дробят на мелкие сервисы, обмен данными между ними резко растет. Это перегружает сеть и бьет по задержке и надежности.

4. Сеть безопасна.  При переходе от монолита к распределенке площадь для атак увеличивается в разы.

5. Топология неизменна.  На деле она меняется постоянно. Нужно держать связь с операторами и админами сети, чтобы вовремя узнавать об изменениях и вносить корректировки.

6. Сетью занимается один админ.  Обычно их десятки. Это заблуждение хорошо показывает, сколько координации требует распределённая архитектура. Монолиту с его единым развертыванием такого уровня взаимодействия не нужно.

7. Передача данных бесплатна.  Речь не про время, а про реальные деньги. Распределкнная система дороже монолита - прежде всего из-за дополнительного оборудования: серверов, шлюзов, брандмауэров, подсетей и так далее. Перед переходом стоит проанализировать текущую топологию по емкости и пропускной способности.

8. Сеть однородна.  В инфраструктуре большинства компаний намешано оборудование разных поставщиков, и оно не всегда хорошо работает вместе.

Другие минусы распределенной архитектуры

Помимо заблуждений, есть и объективные сложности: - Распределенное журналирование - логи разбросаны по многим сервисам. - Распределенные транзакции. Здесь всплывает главный компромисс - высокая масштабируемость, производительность и доступность даются в ущерб согласованности и целостности данных. - Сопровождение контрактов и версионирование. Контракт - это поведение и данные, о которых договорились клиент и сервис. Их нужно поддерживать и аккуратно версионировать.

Итог

Распределенная архитектура - не «улучшенный монолит», а другой набор компромиссов. Она дает мощь и гибкость, но требует зрелой сети, серьезной координации и готовности платить — и деньгами, и сложностью.

#архитектура #microservices #it #разработка #distributedsystems #backend

Основы архитектурных стилей | Сетка — социальная сеть от hh.ru