Основы архитектурных стилей
Сегодня разберем основы архитектурных стилей и заодно самые частые заблуждения о распределенных системах.
Стили и паттерны - в чем разница
Архитектурный стиль - это то, как в целом организован исходный код и как система взаимодействует с хранилищами данных.
Архитектурный паттерн - это уже более низкоуровневая структура проектирования, которая помогает принимать конкретные решения внутри выбранного стиля.
Кстати, один из базовых «антипаттернов» - большой ком грязи: когда чёткой распознаваемой структуры попросту нет.
Какие бывают стили
Все стили можно поделить на две группы.
Монолитные: - многоуровневая архитектура - конвейерная - микроядерная
Распределенные: - на основе сервисов - управляемая событиями - на уровне пространства - сервис-ориентированная - микросервисная
Распределенные стили мощнее монолитных по производительности, масштабируемости и доступности. Но за это приходится платить ощутимыми компромиссами.
Заблуждения о распределённых системах
Есть классический список ложных допущений, из-за которых команды попадают впросак.
1. Сеть надежна. На самом деле — чем сильнее система зависит от сети, тем она менее надежна. Запрос можно не отправить или не получить ответ.
2. Задержка нулевая. В любой распределенной системе задержка не равна нулю. Всегда нужно знать среднее время задержки, а объединение множества сервисов ради одной бизнес-задачи это время только увеличивает.
3. Пропускная способность бесконечна. Как только систему дробят на мелкие сервисы, обмен данными между ними резко растет. Это перегружает сеть и бьет по задержке и надежности.
4. Сеть безопасна. При переходе от монолита к распределенке площадь для атак увеличивается в разы.
5. Топология неизменна. На деле она меняется постоянно. Нужно держать связь с операторами и админами сети, чтобы вовремя узнавать об изменениях и вносить корректировки.
6. Сетью занимается один админ. Обычно их десятки. Это заблуждение хорошо показывает, сколько координации требует распределённая архитектура. Монолиту с его единым развертыванием такого уровня взаимодействия не нужно.
7. Передача данных бесплатна. Речь не про время, а про реальные деньги. Распределкнная система дороже монолита - прежде всего из-за дополнительного оборудования: серверов, шлюзов, брандмауэров, подсетей и так далее. Перед переходом стоит проанализировать текущую топологию по емкости и пропускной способности.
8. Сеть однородна. В инфраструктуре большинства компаний намешано оборудование разных поставщиков, и оно не всегда хорошо работает вместе.
Другие минусы распределенной архитектуры
Помимо заблуждений, есть и объективные сложности: - Распределенное журналирование - логи разбросаны по многим сервисам. - Распределенные транзакции. Здесь всплывает главный компромисс - высокая масштабируемость, производительность и доступность даются в ущерб согласованности и целостности данных. - Сопровождение контрактов и версионирование. Контракт - это поведение и данные, о которых договорились клиент и сервис. Их нужно поддерживать и аккуратно версионировать.
Итог
Распределенная архитектура - не «улучшенный монолит», а другой набор компромиссов. Она дает мощь и гибкость, но требует зрелой сети, серьезной координации и готовности платить — и деньгами, и сложностью.
#архитектура #microservices #it #разработка #distributedsystems #backend
· 11.08
Как раз вчера на одном распределенном проекте словил тайм-аут ответа от системы поиска и пользователь заметил описание ошибки пусть и читаемое и специально созданную. Обработка ошибок и логирование с последующим сбором статистики важный этап архитектуры. (:
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён