Skipper, Airbnb의 내장 워크플로우 엔진, 이제 오픈 소스
Skipper는 서비스 내에서 직접 실행되는 오픈 소스 임베디드 워크플로우 엔진으로, 별도의 오케스트레이션 클러스터가 필요 없습니다. 개발자는 Java 또는 Kotlin 클래스로 다단계 비즈니스 프로세스를 정의할 수 있습니다. Skipper는 워크플로우 진행 상황을 지속시켜, 기존 서비스 종속성을 재사용하여 충돌 및 일시적인 실패로부터 복구할 수 있도록 합니다. 이 엔진의 설계는 Airbnb가 공유 오케스트레이션 인프라에 의존하지 않고 서비스가 자체 워크플로우를 소유하기를 원했던 점에서 비롯되었습니다.Skipper의 아키텍처에서 서비스 복제본은 워크플로우 런타임 및 스케줄러를 호스팅하며, 워크플로우 상태를 위해 데이터베이스를 공유합니다. 복제본이 실패하면 다른 복제본이 해당 작업을 이어받을 수 있으며, 이어받는 시점은 스케줄링 및 리스 설정에 의해 결정됩니다. 이러한 통합 접근 방식은 배포된 시스템을 줄이고 워크플로우 실행 책임을 서비스 팀에 부여합니다. 워크플로우는 클래스로 표현되며, "액션"은 특정 작업을 수행하고 복구를 위해 결과를 기록합니다.이 엔진은 타임아웃 정의 기능과 함께 신호를 통해 외부 이벤트를 기다리는 것과 같은 기능을 지원합니다. Skipper는 다운스트림 시스템에 대한 트랜잭션 호출을 수행하지 않으므로, 멱등성은 액션 자체에서 처리해야 합니다. 복구는 체크포인트 및 재생을 통해 이루어지며, 중단된 워크플로우는 저장된 액션 결과를 활용하여 처음부터 다시 실행됩니다. 결정론적 워크플로우 코드는 이 재생 메커니즘에 중요하며, I/O 및 무작위성은 액션에 국한됩니다. 개발자는 충돌 후 완료된 액션의 재실행을 최소화하기 위해 즉시 체크포인팅을 선택할 수 있습니다.Skipper는 기존 배포 내에서 내구성 있는 실행이 필요한 다단계 프로세스를 관리하는 Java 또는 Kotlin 서비스에 적합합니다. 오픈 소스 릴리스에는 핵심 엔진, 데이터베이스 어댑터, 테스트 유틸리티 및 관리 UI가 포함됩니다. 향후 계획에는 스토리지 플러그인 지원 확장 및 워크플로우 진화 및 디버깅을 위한 도구 개선이 포함됩니다. 자동화된 호환성 검사 및 재생 시각화를 위한 기여를 환영합니다.