Здравствуйте. Меня зовут Сергей Трегуб. Я руковожу бэкенд-разработкой продуктовых сервисов Яндекс 3060.
Каждый разработчик, когда слышит слово «архитектура», в первую очередь представляет себе картину из блоков, соединенных стрелочками, которая показывает структуру системы и связи между ее частями. Крупноблочная архитектура — это модель системы, по которой мы понимаем, из каких ключевых компонентов она состоит. Как компоненты связаны между собой? Как взаимодействуют? Какие данные хранить система? И как ими обменивается? Однако все это без погружения в детали бизнес-логики.
Компоненты обычно представляют собой верхнеуровневые строительные блоки, такие как хранилища данных, очереди сообщений и кластера воркеров, балансировщики нагрузки, микросервисы и многое другое. Такую моделью удобно пользоваться для эффективной коммуникации с различными командами разработки, вовлеченными в проект. При обсуждении развития продукта мы используем эту модель, чтобы решить, в каком компоненте стоит разместить новую бизнес-логику или какие новые компоненты для этой логики нам необходимо добавить. При планировании, масштабировании системы на такой модели мы с легкостью можем найти узкие места и продумать стратегию их расширения. Для описания такой модели нам достаточно прямоугольников и стрелочек. Главное, чтобы она была понятна нашей команде. Чем проще, тем лучше. Но можно использовать и формальные нотации, такие как UML или C4. Это позволит легче находить общий язык с командами, слабосвязанными между собой и взаимодействующими от случая к случаю на разных проектах.
Путь к такой картине лежит, как правило, через определение требований, функциональных и нефункциональных, и внешних API, о которых мы говорили в предыдущих сериях. Давайте представим, что требования определены, внешние интерфейсы системы прописаны. И мы с вами погружаемся в крупноблочную архитектуру одного из старейших сервисов Яндекс 360 — Календаря.
Яндекс Календарь представляет собой типичное веб-приложение. Набор компонентов, из которых он состоит, мы можем встретить практически в любом облачном сервисе. Первое, с чем мы сталкиваемся, когда начинаем работать с календарем, это веб-приложение. Оно работает в браузере и представляет собой HTML-разметку, JavaScript- и CSS-код. Статика подгружается из распределенного CDN. JavaScript-код взаимодействит с пользователем, ходит в бэкенд за данными и отображает их в интерфейсе.