Durable Task는 Microsoft가 구현한 내구성 실행 방식으로, 일반적인 코드를 자동으로 지속시켜 내결함성을 갖추는 산업 전반의 접근법입니다. 이는 일반 코드처럼 내결함성 워크플로우와 오케스트레이션을 구축하는 프레임워크입니다. 복잡한 재시도 논리, 상태 머신, 메시지 큐 대신 비즈니스 로직을 단순한 함수로 작성하고, Durable Task가 상태 지속, 자동 복구, 분산 조정을 대신 처리합니다.
지속성 작업 워크플로는 크래시, 다시 시작 또는 재배포 후 마지막으로 완료된 단계에서 안정적으로 다시 시작하여 몇 시간, 일 또는 몇 달 동안 실행할 수 있습니다. 일반적인 사용 사례에는 분산 트랜잭션, 다중 에이전트 AI 오케스트레이션, 데이터 처리 파이프라인 및 인프라 관리가 포함됩니다.
이 글의 나머지 부분에서는 Durable Task가 어디에 위치하는지, 지원하는 언어와 호스팅 모델, 구조 구조를 설명하여, 내결함성 애플리케이션을 어떻게 구축할지 결정할 수 있도록 합니다.
내구적 과제가 포함하는 것들
내구성 작업에는 다음이 포함됩니다:
- 자체 호스팅 애플리케이션에 대한 지속성 작업 SDK 입니다.
- Azure Functions에서 서버리스 호스팅을 위한 Durable Functions.
- 지속성 작업 스케줄러는 지속성 워크로드를 위해 특별히 빌드된 완전 관리형 백 엔드 서비스입니다.
주요 지속성 작업 사용 사례
애플리케이션에 분산 서비스 간에 신뢰할 수 있는 장기 실행 워크플로 오케스트레이션이 필요한 경우 Durable Task를 사용합니다. 일반적인 시나리오는 다음과 같습니다.
- 장기 실행 프로세스: Durable Task는 중단이나 오류가 있더라도 장시간 실행되는 프로세스의 상태와 진행 상황을 관리할 수 있습니다. 예를 들어 주문 처리, 데이터 파이프라인, 기계 학습 모델 학습 및 장기 실행 시뮬레이션이 있습니다.
- 병렬 및 팬아웃/팬인 시나리오: Durable Task는 여러 작업자가 서로 다른 기계에서 병렬로 작업하는 작업을 조정하고, 그 결과를 집계할 수 있습니다. 예를 들어 이미지 처리, 맵 감소 작업 및 ETL 워크플로가 있습니다.
- 마이크로 서비스 및 API 오케스트레이션: 지속성 작업은 복잡한 제어 흐름 및 오류 처리를 사용하여 분산 서비스, API 및 컴퓨터에서 작업을 조정할 수 있습니다. Durable Task는 또한 각 단계가 후속 단계가 실패할 경우 자동으로 작동하는 보상 논리를 가진 사가 패턴을 사용하는 분산 트랜잭션도 지원합니다.
- 비즈니스 프로세스 자동화: Durable Task는 여러 단계, 의존성, 인간 개입, 오류 처리가 장기간에 걸쳐 이루어지는 복잡하고 결정론적인 비즈니스 프로세스를 자동화할 수 있습니다. 예를 들어 공급망 관리, 문서 검토, 고객 온보딩 및 ID 확인이 있습니다.
- 인프라 자동화: 지속성 작업은 복잡한 종속성 및 오류 처리로 인프라 프로비전, 구성 및 배포를 관리할 수 있습니다. 예를 들어 클라우드 리소스 관리 및 CI/CD 파이프라인이 있습니다.
- 다중 에이전트 오케스트레이션: Durable Task는 여러 AI 에이전트의 작업을 조율하여 장기간에 걸쳐 신뢰할 수 있는 작업 준수와 복잡하고 다단계 AI 프로세스에 대한 효율적인 토큰 사용을 보장합니다. 예를 들어 심층 연구, 코딩 및 고객 지원을 위한 AI 에이전트가 있습니다.
이 시나리오들에서 공통적으로 나타나는 주제는 너무 복잡하고, 너무 오래 지속되며, 너무 분산되어 임시 코드로 신뢰성 있게 관리하기 어려운 작업이라는 점입니다. Durable Task는 지속성, 내결함성, 상태 기반 조정 같은 기본 보장을 제공하여 그 작업을 단순한 코드로 표현할 수 있습니다.
지원되는 언어 및 지속성 작업 호스팅 모델
Durable Task는 두 가지 호스팅 모델에서 여러 프로그래밍 언어를 지원합니다: Azure Functions(Durable Functions 확장 기능을 통해)와 셀프 호스팅(독립형 Durable Task SDK를 통해)입니다. Azure Functions 호스팅 모델은 내장된 확장 및 오케스트레이션 기능을 갖춘 완전 관리형 서버리스 컴퓨트 환경을 제공하며, 자체 호스팅 모델은 Azure Container Apps, Azure Kubernetes Service 등 모든 컴퓨팅 플랫폼에서 내구성 있는 애플리케이션을 실행할 수 있도록 지원합니다. Azure App Service, or virtual machines.
| 언어 | Azure Functions | 자체 호스팅 |
|---|---|---|
| .NET(C#/F#) | 예 | 예 |
| 자바스크립트/타입스크립트 | 예 | 예 |
| Python | 예 | 예 |
| Java | 예 | 예 |
| PowerShell | 예 | No |
메모
Durable Task Go SDK 는 자체 호스팅 시나리오를 위한 커뮤니티 지원 오픈 소스 옵션으로도 제공되지만, 아직 실험 단계에 있으며 운영 환경에서는 권장되지 않습니다.
Azure Functions 자체 호스팅 중에서 선택하는 방법에 대한 지침은 호스팅 모델 선택을 참조하세요.
내구성 작업 아키텍처: SDK 및 상태 저장소 백엔드
지속성 작업에는 애플리케이션 코드에서 사용하는 SDK 와 상태를 관리하는 상태 스토리지 백 엔드 의 두 가지 기본 계층이 있습니다.
지속성 작업 SDK
Durable Task SDK를 사용해 애플리케이션 코드에서 오케스트레이션, 활동, 엔터티를 작성합니다. 내부적으로 내구성 실행의 메커니즘을 처리하며, 오케스트레이터 함수 재생, 로컬 실행 컨텍스트 관리, 상태 저장소 백엔드와의 통신 등을 수행합니다. Durable Task는 지원되는 언어와 두 가지 호스팅 모델인 Azure Functions와 셀프 호스팅 모델에서 여러 SDK 옵션을 제공합니다.
이러한 옵션 중에서 선택하는 방법에 대한 지침은 호스팅 모델 선택을 참조하세요.
상태 스토리지 백엔드
상태 저장소 백엔드는 오케스트레이션 상태를 유지하고, 실행 이력을 유지하며, 컴퓨트 인스턴스 간 분산 스케일아웃을 조정합니다.
권장되는 상태 저장 옵션은 Durable Task Scheduler로, Durable Task 작업에 최적화된 완전 관리 Azure 서비스입니다. Durable Functions 및 독립 실행형 Durable Task SDK 모두에서 작동하고, 따라서 관리할 스토리지 인프라 없이 가장 다양한 기능을 제공합니다.
Durable Functions는 여러 BYO(bring-your-own) 스토리지 옵션을 지원합니다. 이 옵션들은 상태를 저장하는 위치에 더 많은 제어권을 주지만, 기본 인프라는 직접 프로비저딩하고 관리해야 합니다. BYO 스토리지 백 엔드는 현재 Durable Functions만 사용할 수 있습니다.
스토리지 옵션에 대한 자세한 내용은 스토리지 공급자를 참조하세요.
추가 지속성 작업 리소스
연구 간행물
Microsoft는 Microsoft Research와 협력하여 Durable Task를 개발합니다. 그 결과, 팀은 다음과 같은 연구 논문과 산물을 생산합니다:
- Durable Functions: 상태 저장 서버리스의 의미 체계(OOPSLA'21)
- Durable Functions 및 Netherite를 사용하는 서버리스 워크플로(사전 인쇄)
비디오 개요
다음 영상은 Durable Functions의 장점을 강조합니다: