За последние пять лет Viaduct прошел путь от внутреннего инструмента Airbnb до зрелой и высокопроизводительной сервисной сетки, ориентированной на данные. Разработанный как масштабируемая среда для интеграции бизнес-логики и управления сложными взаимосвязанными данными, Viaduct стал центральным звеном в технической инфраструктуре компании, обеспечивая стабильность, гибкость и развитую архитектуру с акцентом на модульность и производительность. В данной статье подробно рассматриваем эволюцию Viaduct, ключевые принципы, современные архитектурные решения и причины открытого релиза этого сложного решения. Viaduct изначально задумывался как единая точка доступа к централизованной схеме данных Airbnb, объединяющей различные бизнес-домены компании. Эта схема, являющаяся гибридом децентрализованной разработки и интеграции, обеспечивает высокую связанность данных внутри организации.
За годами эксплуатации выстроилась экосистема, в которой более 75% обращений - это внутренние запросы, свидетельствующие о глубокой интеграции Viaduct в рабочие процессы и сервисы Airbnb. Важным аспектом стало предоставление возможности разным командам размещать свой бизнес-код непосредственно в Viaduct, что значительно упростило разработку и снизило операционные издержки. Одной из центральных особенностей Viaduct стал принцип реентрантности: бизнес-логика, размещенная в рамках платформы, способна взаимодействовать с другой логикой через GraphQL-запросы и фрагменты. Такой подход обеспечил модульность даже при комплексном и объемном коде, позволив избегать проблем монолитных решений, где ранние изменения могут разрушить архитектуру и вызвать многочисленные инциденты. Благодаря этому, Airbnb удалось масштабировать проект при неизменных уровнях операционной нагрузки и при этом сократить время простоя и вмешательства в систему.
Однако оперативное развитие Viaduct до 2024 года сопровождалось сложностями. Реактивное добавление функций и сервисов без строгой архитектурной концепции привело к размытым границам между слоями и неоднородным пользовательским опытом для разработчиков, загружавших платформу с новым и немного непредсказуемым API. Работа над исправлением этих проблем привела к инициативе Viaduct Modern, стартовавшей более года назад. Эта модернизация предусматривала переработку базового программного интерфейса и внутреннего движка, чтобы сделать систему проще, модульнее и более функциональной. Главное изменение Viaduct Modern - это упрощение API, называемого Tenant API, который взаимодействует с разработчиками.
До модернизации API предлагал множество излишне сложных вариантов реализации, запутывая новых команд. Новый подход сведён к использованию только двух типов резолверов: node resolvers и field resolvers. Выбор зависит от структуры схемы, а не от непредсказуемых факторов, связанных с поведением функций. Унификация API делает процесс разработки более комфортным и сокращает кривую обучения. Повышение модульности стало ключевым для устойчивости Viaduct.
Теперь каждый модуль представляет собой единицу схемы с сопутствующим кодом, принадлежащую одной команде. Связи между модулями происходят средствами запросов GraphQL, что исключает прямые зависимости кода и стимулирует декларативное выражение запросов к функциям и данным. Такой подход повышает уровень абстракции и облегчает поддержку большого кодового базиса. Архитектура самого фреймворка Viaduct также была усилена. Главное улучшение - чёткое разделение между движком выполнения GraphQL и Tenant API.
Ранее границы между слоями отсутствовали или были слабыми, что осложняло внесение улучшений и усовершенствований. Сейчас движок работает с динамически типизированными значениями, а API, напротив, использует статически типизированные Kotlin-классы, обернутые вокруг динамической модели. Это разделение существенно повышает устойчивость к изменениям и позволяет развивать каждую часть платформы без срочных и взаимопротиворечащих корректировок. Одним из важных аспектов Viaduct Modern стала плавная миграция. Вместо того чтобы требовать "большой взрыв" в обновлении миллионов строк кода, Airbnb реализовал режим, при котором обе версии API - новая и классическая - функционируют одновременно на одном движке.
Такой подход позволяет постепенно переводить команды на новую архитектуру, сохраняя при этом стабильность и снижая риски. Помимо технических изменений, в Viaduct внедрены серьёзные улучшения в области наблюдаемости и отслеживания кода, что стало критично для управления сотнями команд. Чёткое разграничение между пользовательским и фреймворковым кодом устранило прежние неоднозначности в инструментации и позволило точно определять зоны ответственности и источники возможных ошибок. Работа над сборкой и временем генерации кода также получила значительные инвестиции. Ранние этапы развития Viaduct испытывали трудности с длительными циклами компиляции, что снижало оперативность разработки.
Использование прямой генерации байт-кода вместо промежуточных этапов помогло снизить это время и увеличить скорость итераций, что особенно важно для крупных сервисов с миллионами строк кода. Архитектура оркестрации и диспетчеризации запросов внутри Viaduct сделана масштабируемой и устойчивой благодаря применению Kubernetes и шахматному шардированию (shuffle sharding), что уменьшает риски широкомасштабных сбоев и помогает изолировать трафик в зависимости от состояний системы. Хотя данный компонент пока не планируется к открытию, вероятно, в будущем Airbnb поделится стратегиями по управлению доступностью на больших нагрузках. В конце 2025 года Airbnb открыла исходные коды Viaduct, включая новый движок и часть Tenant API, что создает уникальные возможности для сообщества разработчиков. Несмотря на то, что новый API пока находится на альфа-этапе, этот шаг призван ускорить развитие Viaduct за счет совместных усилий и привлечь новые идеи в архитектуру сервиса.
Открытость к внешним предложениям обещает повысить качество, гибкость и адаптивность системы при работе в разнообразных условиях. Viaduct - пример успешной реализации GraphQL-сервера, который не только показывает отличные технические результаты при работе с огромными данными, но и предлагает комфортные условия для разработчиков за счет эргономичного API и продуманной модульности. Это делает его привлекательным как для крупных компаний с огромными системами, так и для стартапов или групп, которые только начинают строить комплексные сервисы. Подводя итог, можно сказать, что пятилетняя история Viaduct - это история о том, как продуманная архитектура, адаптация к требованиям бизнеса и стремление к качеству создания продуктов приводят к появлению масштабируемого и надежного инструмента, который продолжает развиваться и открывается для сообщества. Airbnb продемонстрировал, что построение современной сервисной сетки - это не просто технология, а комплексный процесс, включающий дизайн API, модульность, наблюдаемость и устойчивость к изменениям, что и отражено в текущей версии Viaduct и его дальнейших перспективах.
.