The Airbnb Tech Blog | Medium на русском
Подписаться
Skipper, встроенный движок рабочих процессов Airbnb, теперь с открытым исходным кодом
Skipper — это встраиваемый движок рабочих процессов с открытым исходным кодом, который работает непосредственно внутри сервиса, устраняя необходимость в отдельном кластере оркестрации. Он позволяет разработчикам определять многошаговые бизнес-процессы в виде классов Java или Kotlin. Skipper сохраняет прогресс рабочего процесса, позволяя восстанавливаться после сбоев и временных отказов путем повторного использования существующих зависимостей сервиса. Дизайн движка был обусловлен желанием Airbnb, чтобы сервисы владели своими рабочими процессами, не полагаясь на общую инфраструктуру оркестрации.В архитектуре Skipper реплики сервисов размещают среду выполнения рабочего процесса и планировщик, совместно используя базу данных для состояния рабочего процесса. Если реплика начинает сбой, другая может взять на себя ее работу, причем время переключения определяется настройками планирования и аренды. Такой интегрированный подход сокращает количество развернутых систем и возлагает ответственность за выполнение рабочего процесса на команду сервиса. Рабочие процессы представлены в виде классов, где "действия" выполняют конкретные задачи и записывают свои результаты для целей восстановления.Движок поддерживает такие функции, как ожидание внешних событий через сигналы, с возможностью определения тайм-аутов. Идемпотентность должна обрабатываться самими действиями, поскольку Skipper не выполняет транзакционные вызовы к нижестоящим системам. Восстановление происходит через контрольные точки и повторное выполнение, когда прерванные рабочие процессы повторно выполняются с начала, используя сохраненные результаты действий. Детерминированный код рабочего процесса имеет решающее значение для этого механизма повторного выполнения, при этом ввод-вывод и случайность ограничены действиями. Разработчики могут выбрать немедленное создание контрольных точек, чтобы минимизировать повторное выполнение завершенных действий после сбоя.Skipper хорошо подходит для сервисов Java или Kotlin, управляющих многошаговыми процессами, которые требуют надежного выполнения в рамках их существующих развертываний. Релиз с открытым исходным кодом включает в себя основной движок, адаптеры баз данных, утилиты для тестирования и административный пользовательский интерфейс. Будущие планы включают расширение поддержки плагинов хранения данных и улучшение инструментов для эволюции и отладки рабочих процессов. Приветствуются предложения по автоматизированным проверкам совместимости и визуализации повторного выполнения.