В статье будет дан краткий обзор подхода к построению архитектуры, основанной на клетках - Cell-Based Architecture
Cell-Based Architecture - это подход к построению сервисной архитектуры, в котором один сервис и его инфраструктурные потребности объеденены в единое целое - клетки. Каждая клетка может содержать логически-связанные микросервесы, хранилеще данных, системы обсервабилити (мониторинг, логирование, трейсинг). Таким образом формируется сплочённая (cohesive) и самодостаточная единица деплоя. Каждая такая клетка живёт автономно. Причём, она может взаимодействовать с другими клетками вокруг путём таких механизмов как события, прямой вызов и т.д. Для этого в оболочке клетки существуют точки взаимодействия - строго определённые интерфейсы. Сервисы внутри клетки взаимодействуют только друг с другом.
Плюсы Cell-Based Architecture:
Масштабируемость. Благодаря максмимальной изоляции клетки легко можно добавлять или удалять по мере необходимости.
Производительность. CBA позволяет наращивать производительность всей системы за счёт простоты масштабирования и распределения задач по новым клеткам.
Устойчивость к сбоям. За счёт независимости клеток друг от друга любой сбой в одной из клеток не затронет остальные клетки.
Безопасность. CBA может быть использована для повышения безопасности: благодаря изоляции сервисов в клетках можно реализовать дополнительные политики безопасности для доступа к чувствительным данным.
Ограничения CBA:
Сложность. CBA намного сложнее делать и поддерживать - следствие изоляции: кроме того, что клетки должны быть спроектированы и сконфигурированы независимо ещё нужно определить и реализовать контракты интерфейсов.
Накладные расходы. Опять же, по причине максимальной изоляции содержание клеток влечёт за собой дополнительные расходы на память, CPU и т.д. Кроме этого, нужны будут ресурсы на вспомогательные сервисы такие как мониториг, логирование и всё такое.
Компании, которые уже используют CBA:
Slack. После частичных перебоев в работе из-за сбоев в сети AWS в зоне доступности компания Slack перевела большинство своих критически важных для пользователей сервисов на сотовый подход. Этот переход был направлен на повышение отказоустойчивости и обеспечение высокой доступности платформы обмена сообщениями.
DoorDash. Компания реализовала стратегию маршрутизации с учетом зон в своей сетке сервисов на базе Envoy, перейдя на архитектуру ячеек на основе зон доступности (они называют это Avalability Zone (AZ)-based cell architecture). Этот шаг позволил снизить затраты на передачу данных между зонами доступности и повысить надежность системы в периоды пикового спроса.
Roblox. Продолжая расширяться, компания Roblox реорганизует свою инфраструктуру в ячейки для повышения эффективности и отказоустойчивости. Этот архитектурный сдвиг направлен на то, чтобы лучше управлять растущей сложностью и требованиями к платформе.
Amazon Web Services (AWS). Компания AWS уже давно выступает за архитектуру на основе ячеек, представляя ее на своей ежегодной конференции re:Invent. В сентябре 2023 года они опубликовали технический документ, в котором подробно описали свой подход к CBA как к средству повышения надежности и масштабируемости облачных платформ.
Amazon Prime Video: Сервис использует архитектуру на основе ячеек для эффективного управления доставкой видео. Настраивая маршрутизацию ячеек, Amazon может обеспечить балансировку нагрузки, создавать новые ячейки при высоком спросе и изолировать неработающие ячейки, не влияя на работу сервиса в целом.
Когда имеет смысл имплементировать Cell-Based Architecture:
Требования высокой доступности. Если сервис-приложение должен быть доступен на уровне 99.999 или выше, т.е допустимый простой не больше 5 минут в год (https://uptime.is/99.999)
Нужна гибкая масштабируемость. Если есть нерегулярные всплески нагрузки, под которые хочется масштабироваться. Дополнительно, можно подобрать размер клеток таким образом, чтобы масштабироваться было проще или эффективнее с точки зрения ресурсов.
Критические рабочие нагрузки. Приложения, критически важные для ведения бизнеса, например, в сфере финансовых услуг или сверхмасштабные системы, выигрывают от способности CBA изолировать сбои и гарантировать, что проблемы затронут только подмножество клиентов.
Низкий целевой уровень восстановления (Low Recovery Objectives): Если вашей системе требуется время восстановления (RTO) менее 30 секунд и точка восстановления (RPO) менее 5 секунд, CBA поможет удовлетворить эти строгие требования, обеспечив ускоренное восстановление за счет изолированных компонентов.
Многопользовательские услуги. Для приложений, обслуживающих несколько разных клиентов, некоторым из которых требуются выделенные ресурсы, CBA позволяет создавать выделенные ячейки для конкретных арендаторов, повышая безопасность и производительность и изолируя проблемы, связанные с конкретными арендаторами.
Сложные системы с большим количеством микросервисов. В больших средах микросервисов организация связанных сервисов в ячейки может снизить когнитивную нагрузку на инженерные команды и повысить эффективность работы. Этот подход хорошо согласуется с границами доменов и организационными структурами
Гибкость при тестировании и развертывании. Если организации необходимо часто проводить тестирование и развертывание, CBA позволяет независимо развертывать клетки. Это снижает потребность в обширном регрессионном тестировании всей системы и позволяет делать канареечный деплой для снижения рисков во время обновлений.
Дополнительную информацию по Cell-Based Architecture можно получить из следующих источников:
https://www.infoq.com/articles/cell-based-architecture-distributed-systems/
https://newsletter.systemdesign.one/p/cell-based-architecture
https://www.techtarget.com/searchapparchitecture/tip/The-basics-benefits-and-risks-of-cell-based-architecture
https://www.linkedin.com/pulse/cell-based-architecture-pattern-pratik-pandey/
Комментарии (10)
3ongleip
17.10.2024 06:49Мне не понятно, чем новое понятие “клетка” отличается от уже существующего понятия “архитектурный квант”, введенного Нилом Фордом. В чем заключается принципиальная разница между ними?
AVF_613
17.10.2024 06:49"Ты что-дальтоник, скрипач? Зелёный цвет от оранжевого отличить не можешь? Турист!"
AAnisimov
17.10.2024 06:49Я-бы предложил приравнять клетку к домену! :-)
И тогда, мы получаем чудесное описание DDD.
mpaytishev Автор
17.10.2024 06:49Позвольте ответить сразу всем )
Конечно, вы абсолютно правы - можно заменить термин клетка на любое другое слово, если это не меняет суть. Суть клетки - это единый элемент деплоя, которой объединяет в себе сразу и микросервис, и базу данных, и его инфраструктурные вещи такие как средства логирования, мониторинги и пр. Причём, если bounded context достаточно сложный, то микросервисов в одной клетке может быть больше одного.
Рекомендую ещё посмотреть это доклад: https://www.youtube.com/watch?v=kJECSpVwM7QAAnisimov
17.10.2024 06:49Ну, то есть, в каждой клетке свой независимый экземпляр observability стека?
stone_evil
17.10.2024 06:49Автоматически разворачиваются отдельные экземпляры ELK, Victoria Metrics, Jaeger, в отдел безопасности летит очередной алерт о невозможности централизованного сбора данных, а в отдел HR отправляется заявка на набор новой команды сопровождения и поддержки этой "клетки" ))
AAnisimov
17.10.2024 06:49Перед этим главный SRE покусает всю команду, которая предложила этот чудесный подход.
KonstantinID
а что будет если слово "клетка" заменить на "модуль"
pda0
Скорее на "инстанс". Модуль обычно не самодостаточная единица.