Durable Functions 구현
- 서버리스 컴퓨팅 환경에서 상태 저장 함수를 작성할 수 있는 Azure Functions의 확장
- 서버리스 컴퓨팅 환경 : 프로비저닝 할 서버가 존재하지 않음
Azure Functions 프로그래밍 모델 → 오케스트레이터 함수 작성 → 상태 저장 워크플로 정의 → 엔터티 함수 작성 → 상태 저장 엔터티 정의
지원되는 언어
C#,JavaScript,Python,F#,PowerShell
애플리케이션 패턴
함수 체이닝
- 특정 순서대로 실행됨
try/catch/finally : 오류 처리 논리가 포함됨
팬아웃/팬인
- 여러 함수를 병렬 실행 → 모든 함수가 완료될 때까지 기다림
비동기 HTTP API
- 외부 클라이언트와 장기 실행 작업의 상태를 조정하는 문제 해결
- HTTP 엔드포인트에서 장기 실행 작업을 트리거 → 클라이언트를 클라이언트에서 폴링하는 상태 엔드포인트로 리디렉션 → 작업 완료 시점을 알아봄
모니터
- 워크플로에서 유연한 되풀이 프로세스를 나타냄
- 일반 타이머 트리거 : 정기적인 정리 작업과 같은 기본 시나리오 처리가 가능하지만 간격이 정적이고 인스턴스 수명 관리가 복잡해짐
- Durable Functions을 사용하여 유연한 되풀이 간격을 만들고 작업 수명 관리, 단일 오케스트레이션에서 여러 모니터 프로세스 만들 수 있음
- 임의의 엔드포인트를 관찰하는 여러 모니터를 만들 수 있음
- 조건 충족시 → 모니터에서 실행 종료 or 다른 함수에서 지속성 오케스트레이션 클라이언트를 사용하여 모니터를 종료할 수 있음
사용자 개입
- 시간 제한 및 보정 논리를 사용하여 이 상호작용을 허용할 수 있음
- 지속성 타이머를 사용하여 승인을 요청
- 시간 초과 → 오케스트레이터가 에스컬레이션됨
- 에스컬레이션 : 상승
- 오케스트레이터 → 사용자 개입으로 생성된 알림과 같은 외부 이벤트를 기다림
함수 유형
오케스트레이터 함수
- 작업이 실행되는 방법 및 작업이 실행되는 순서를 설명
- 코드의 오케스트레이션
- 활동 함수, 하위 오케스트레이션, 외부 이벤트 대기, HTTP 및 타이머를 비롯한 다양한 유형의 작업이 포함됨
- 엔터티 함수, 상호작용 가능
- 일반 코드를 사용하여 작성되지만 코드를 작성하는 방법에 대한 엄격한 요구 사항이 존재
활동 함수
- 지속성 함수 오케스트레이션의 기본 작업 단위
- ex) 인벤토리 확인, 고객 요금 청구 및 배송물 생성 작업이 포함됨
- 각 작업은 별도의 활동 함수이며 직렬, 병렬 또는 둘의 조합으로 실행할 수 있음
- 수행할 수 있는 작업 형식에 제한 되지 않음
- 작업 트리거 : 작업 함수를 정의하는데 사용됨
엔터티 함수
- 작은 상태 부분을 읽고 업데이트하는 작업을 정의
- 지속성 엔터티로 자주 참조함
- 엔터티 함수는 특수 트리거 유형인 엔터티 트리거를 사용하는 함수
- 클라이언트 함수 or 오케스트레이터 함수에서 호출 할 수 있음
- 오케스트레이터 함수와 달리 엔터티 함수는 특정 코드 제약 조건을 포함하지 않음
- 제어 흐름을 통해 상태를 암시적으로 나타내지 않고 명시적으로 관리함
유의사항
- 고유 식별자인 엔터티 ID를 통해 액세스 됨
- 엔터티 ID는 단순히 엔터티 인스턴스를 고유하게 식별하는 문자열 쌍
- 대상 엔터티의 엔터티 ID와 수행할 작업을 지정하는 문자열인 작업 이름을 지정 해야 함
클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → 바인딩에 의해 트리거됨 → 작업 허브의 큐에 있는 메시지에 반응하여 작동함
- 클라이언트 함수 내에서 오케스트레이터 클라이언트 바인딩 or 엔터티 클라이언트 바인딩 사용
- 오케스트레이터가 아닌 함수 → 클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → Azure portal 단추를 사용해서 직접 트리거할 수 없음
작업 허브
- 오케스트레이션 및 엔터티에 사용되는 지속형 스토리지 리소스에 대한 논리적 컨테이너
- 오케스트레이터, 작업, 엔터티 함수는 동일한 작업 허브에 속하는 경우에만 직접 상호 작용할 수 있음
- 여러 함수 앱이 한 스토리지 계정을 공유하는 경우, 반드시 function App마다 별도의 작업 허브 이름으로 구성해야함, 한 스토리지 계정에 여러 작업 허브가 포함될 수 있으며 이 제한(별도의 작업 허브 이름으로 구성) 다른 스토리지 공급자에도 적용됨
Azure Storage 리소스
- 하나 이상의 제어 큐
- 하나의 작업 항목 큐
- 하나의 기록 테이블
- 하나의 인스턴스 테이블
- 하나 이상의 스토리지 Blob을 포함하는 하나의 스토리지 컨테이너
- 큰 메시지 페이로드가 포함된 스토리지 컨테이너
작업 허브 이름
Azure Storage의 작업 허브는 다음 규칙을 준수하는 이름으로 식별됨
- 영 숫자만 포함
- 문자로 시작
- 최소 길이는 3자, 최대 길이는 45자
- host.json에 선언됨
지속성 오케스트레이션
- 함수 앱 내에서 다른 지속성 함수의 실행을 오케스트레이션 할 수 있음
특징
- 절차적 코드를 사용하여 함수 워크플로를 정의함
- 선언적 스키마, 디자이너 필요 x
다른 지속성 함수를 동기적, 비 동기적으로 호출할 수 있음
- 지속적이고 신뢰할 수 있음
- “대기” , “생성” 할 때 실행 진행률 검사점이 자동으로 설정됨
- 프로세스 재활용 or VM이 다시 부팅 되더라도 로컬 상태가 손실 되지 않음
- 장기 실행될 수 있으며 인스턴스의 총 수명은 초, 일, 월 또는 무한대일 수 있음
오케스트레이션 ID
- 각 인스턴스에는 인스턴스 식별자가 있으며 각 인스턴스 ID는 자동으로 생성된 GUID
- 인스턴스 ID는 사용자가 생성한 문자열 값일 수 있음
- 오케스트레이션 인스턴스 ID 는 작업 허브 내에서 고유해야 함
- 일반적으로 가능한 경우 자동으로 생성된 인스턴스 ID를 사용하는 것이 좋음
- 사용자 생성 인스턴스 ID는 오케스트레이션 인스턴스와 일부 외부 애플리케이션 관련 엔터티 간에 일대일 매핑이 있는 시나리오를 위한 것임
- 인스턴스 ID : 대부분의 인스턴스 관리 작업에 필요한 매개 변수
안정성
- 오케스트레이터 함수 : 이벤트 소싱 디자인 패턴을 사용하여 실행 상태를 안정적으로 유지함
- 지속성 작업 프레임워크 : 오케스트레이션의 현재 상태를 직접 저장하는 대신 추가 전용 저장소를 사용하여 함수 오케스트레이션에서 수행하는 일련의 작업 전체를 기록함
- Durable Functions은 이벤트 소싱을 투명하게 사용함
- await, yield 연산자 → 내부적으로 오케스트레이터 스레드 제어를 지속성 작업 프레임워크 디스패처에 다시 생성함 → 오케스트레이터에서 예약한 새 작업을 스토리지에 커밋 → 오케스트레이션 인스턴스의 실행 기록에 추가됨, 기록은 스토리지 테이블에 저장되며 실제 작업을 예약하는 큐에 메시지를 추가함
- 오케스트레이션 함수에 많은 작업이 부여되면 오케스트레이터가 절전 모드에서 깨어나 전제 함수를 처음부터 다시 실행해서 로컬 상태를 다시 작성함
- 재생 중에 코드에서 함수를 호출하거나 다른 비동기 작업을 수행하려고 하는 경우, 지속성 작업 프레임워크는 현재 오케스트레이션의 실행 기록을 참조함
- 할동 함수가 이미 실행되어 결과를 생성하는 경우 해당 함수의 결과를 재생하고 오케스트레이터 코드가 계속 실행됨
- 함수 코드가 완료되거나 새 비동기 작업이 예약될 때까지 재생이 계속됨
Durable Function에서 타이밍 제어
- 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공함
- 오케스트레이터 함수에서 사용해야됨
- 메서드를 호출해서 지속성 타이머를 만든다.
- 지정된 날짜와 시간에 완료되는 작업을 반환함
타이머 제한 사항
이벤트 보내기 및 대기
- 외부 이벤트를 대기 하거나 수신 대기하는 기능
- 인간 상호 작용, 다른 외부 트리거를 처리하는데 유용
이벤트 대기
- 오케스트레이터 함수가 외부 이벤트를 비 동기적으로 대기하고 수신 대기할 수 있음
- 수신 오케스트레이터→ 이벤트 이름과 수신할 것으로 예상되는 데이터의 shape를 선언함
이벤트 보내기
- 서버리스 컴퓨팅 환경에서 상태 저장 함수를 작성할 수 있는 Azure Functions의 확장
- 서버리스 컴퓨팅 환경 : 프로비저닝 할 서버가 존재하지 않음
Azure Functions 프로그래밍 모델 → 오케스트레이터 함수 작성 → 상태 저장 워크플로 정의 → 엔터티 함수 작성 → 상태 저장 엔터티 정의
지원되는 언어
C#,JavaScript,Python,F#,PowerShell
애플리케이션 패턴
함수 체이닝
- 특정 순서대로 실행됨
try/catch/finally : 오류 처리 논리가 포함됨
팬아웃/팬인
- 여러 함수를 병렬 실행 → 모든 함수가 완료될 때까지 기다림
비동기 HTTP API
- 외부 클라이언트와 장기 실행 작업의 상태를 조정하는 문제 해결
- HTTP 엔드포인트에서 장기 실행 작업을 트리거 → 클라이언트를 클라이언트에서 폴링하는 상태 엔드포인트로 리디렉션 → 작업 완료 시점을 알아봄
모니터
- 워크플로에서 유연한 되풀이 프로세스를 나타냄
- 일반 타이머 트리거 : 정기적인 정리 작업과 같은 기본 시나리오 처리가 가능하지만 간격이 정적이고 인스턴스 수명 관리가 복잡해짐
- Durable Functions을 사용하여 유연한 되풀이 간격을 만들고 작업 수명 관리, 단일 오케스트레이션에서 여러 모니터 프로세스 만들 수 있음
- 임의의 엔드포인트를 관찰하는 여러 모니터를 만들 수 있음
- 조건 충족시 → 모니터에서 실행 종료 or 다른 함수에서 지속성 오케스트레이션 클라이언트를 사용하여 모니터를 종료할 수 있음
사용자 개입
- 시간 제한 및 보정 논리를 사용하여 이 상호작용을 허용할 수 있음
- 지속성 타이머를 사용하여 승인을 요청
- 시간 초과 → 오케스트레이터가 에스컬레이션됨
- 에스컬레이션 : 상승
- 오케스트레이터 → 사용자 개입으로 생성된 알림과 같은 외부 이벤트를 기다림
함수 유형
오케스트레이터 함수
- 작업이 실행되는 방법 및 작업이 실행되는 순서를 설명
- 코드의 오케스트레이션
- 활동 함수, 하위 오케스트레이션, 외부 이벤트 대기, HTTP 및 타이머를 비롯한 다양한 유형의 작업이 포함됨
- 엔터티 함수, 상호작용 가능
- 일반 코드를 사용하여 작성되지만 코드를 작성하는 방법에 대한 엄격한 요구 사항이 존재
활동 함수
- 지속성 함수 오케스트레이션의 기본 작업 단위
- ex) 인벤토리 확인, 고객 요금 청구 및 배송물 생성 작업이 포함됨
- 각 작업은 별도의 활동 함수이며 직렬, 병렬 또는 둘의 조합으로 실행할 수 있음
- 수행할 수 있는 작업 형식에 제한 되지 않음
- 작업 트리거 : 작업 함수를 정의하는데 사용됨
엔터티 함수
- 작은 상태 부분을 읽고 업데이트하는 작업을 정의
- 지속성 엔터티로 자주 참조함
- 엔터티 함수는 특수 트리거 유형인 엔터티 트리거를 사용하는 함수
- 클라이언트 함수 or 오케스트레이터 함수에서 호출 할 수 있음
- 오케스트레이터 함수와 달리 엔터티 함수는 특정 코드 제약 조건을 포함하지 않음
- 제어 흐름을 통해 상태를 암시적으로 나타내지 않고 명시적으로 관리함
유의사항
- 고유 식별자인 엔터티 ID를 통해 액세스 됨
- 엔터티 ID는 단순히 엔터티 인스턴스를 고유하게 식별하는 문자열 쌍
- 대상 엔터티의 엔터티 ID와 수행할 작업을 지정하는 문자열인 작업 이름을 지정 해야 함
클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → 바인딩에 의해 트리거됨 → 작업 허브의 큐에 있는 메시지에 반응하여 작동함
- 클라이언트 함수 내에서 오케스트레이터 클라이언트 바인딩 or 엔터티 클라이언트 바인딩 사용
- 오케스트레이터가 아닌 함수 → 클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → Azure portal 단추를 사용해서 직접 트리거할 수 없음
작업 허브?
- 오케스트레이션 및 엔터티에 사용되는 지속형 스토리지 리소스에 대한 논리적 컨테이너
- 오케스트레이터, 작업, 엔터티 함수는 동일한 작업 허브에 속하는 경우에만 직접 상호 작용할 수 있음
- 여러 함수 앱이 한 스토리지 계정을 공유하는 경우, 반드시 function App마다 별도의 작업 허브 이름으로 구성해야함, 한 스토리지 계정에 여러 작업 허브가 포함될 수 있으며 이 제한(별도의 작업 허브 이름으로 구성) 다른 스토리지 공급자에도 적용됨
Azure Storage 리소스
- 하나 이상의 제어 큐
- 하나의 작업 항목 큐
- 하나의 기록 테이블
- 하나의 인스턴스 테이블
- 하나 이상의 스토리지 Blob을 포함하는 하나의 스토리지 컨테이너
- 큰 메시지 페이로드가 포함된 스토리지 컨테이너
작업 허브 이름
Azure Storage의 작업 허브는 다음 규칙을 준수하는 이름으로 식별됨
- 영 숫자만 포함
- 문자로 시작
- 최소 길이는 3자, 최대 길이는 45자
- host.json에 선언됨
지속성 오케스트레이션
- 함수 앱 내에서 다른 지속성 함수의 실행을 오케스트레이션 할 수 있음
특징
- 절차적 코드를 사용하여 함수 워크플로를 정의함
- 선언적 스키마, 디자이너 필요 x
다른 지속성 함수를 동기적, 비 동기적으로 호출할 수 있음
- 지속적이고 신뢰할 수 있음
- “대기” , “생성” 할 때 실행 진행률 검사점이 자동으로 설정됨
- 프로세스 재활용 or VM이 다시 부팅 되더라도 로컬 상태가 손실 되지 않음
- 장기 실행될 수 있으며 인스턴스의 총 수명은 초, 일, 월 또는 무한대일 수 있음
오케스트레이션 ID
- 각 인스턴스에는 인스턴스 식별자가 있으며 각 인스턴스 ID는 자동으로 생성된 GUID
- 인스턴스 ID는 사용자가 생성한 문자열 값일 수 있음
- 오케스트레이션 인스턴스 ID 는 작업 허브 내에서 고유해야 함
- 일반적으로 가능한 경우 자동으로 생성된 인스턴스 ID를 사용하는 것이 좋음
- 사용자 생성 인스턴스 ID는 오케스트레이션 인스턴스와 일부 외부 애플리케이션 관련 엔터티 간에 일대일 매핑이 있는 시나리오를 위한 것임
- 인스턴스 ID : 대부분의 인스턴스 관리 작업에 필요한 매개 변수
안정성
- 오케스트레이터 함수 : 이벤트 소싱 디자인 패턴을 사용하여 실행 상태를 안정적으로 유지함
- 지속성 작업 프레임워크 : 오케스트레이션의 현재 상태를 직접 저장하는 대신 추가 전용 저장소를 사용하여 함수 오케스트레이션에서 수행하는 일련의 작업 전체를 기록함
- Durable Functions은 이벤트 소싱을 투명하게 사용함
- await, yield 연산자 → 내부적으로 오케스트레이터 스레드 제어를 지속성 작업 프레임워크 디스패처에 다시 생성함 → 오케스트레이터에서 예약한 새 작업을 스토리지에 커밋 → 오케스트레이션 인스턴스의 실행 기록에 추가됨, 기록은 스토리지 테이블에 저장되며 실제 작업을 예약하는 큐에 메시지를 추가함
- 오케스트레이션 함수에 많은 작업이 부여되면 오케스트레이터가 절전 모드에서 깨어나 전제 함수를 처음부터 다시 실행해서 로컬 상태를 다시 작성함
- 재생 중에 코드에서 함수를 호출하거나 다른 비동기 작업을 수행하려고 하는 경우, 지속성 작업 프레임워크는 현재 오케스트레이션의 실행 기록을 참조함
- 할동 함수가 이미 실행되어 결과를 생성하는 경우 해당 함수의 결과를 재생하고 오케스트레이터 코드가 계속 실행됨
- 함수 코드가 완료되거나 새 비동기 작업이 예약될 때까지 재생이 계속됨
Durable Function에서 타이밍 제어
- 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공함
- 오케스트레이터 함수에서 사용해야됨
- 메서드를 호출해서 지속성 타이머를 만든다.
- 지정된 날짜와 시간에 완료되는 작업을 반환함
타이머 제한 사항
이벤트 보내기 및 대기
- 외부 이벤트를 대기 하거나 수신 대기하는 기능
- 인간 상호 작용, 다른 외부 트리거를 처리하는데 유용
이벤트 대기
- 오케스트레이터 함수가 외부 이벤트를 비 동기적으로 대기하고 수신 대기할 수 있음
- 수신 오케스트레이터→ 이벤트 이름과 수신할 것으로 예상되는 데이터의 shape를 선언함
이벤트 보내기
- 서버리스 컴퓨팅 환경에서 상태 저장 함수를 작성할 수 있는 Azure Functions의 확장
- 서버리스 컴퓨팅 환경 : 프로비저닝 할 서버가 존재하지 않음
Azure Functions 프로그래밍 모델 → 오케스트레이터 함수 작성 → 상태 저장 워크플로 정의 → 엔터티 함수 작성 → 상태 저장 엔터티 정의
지원되는 언어
C#,JavaScript,Python,F#,PowerShell
애플리케이션 패턴
함수 체이닝
- 특정 순서대로 실행됨
try/catch/finally : 오류 처리 논리가 포함됨
팬아웃/팬인
- 여러 함수를 병렬 실행 → 모든 함수가 완료될 때까지 기다림
비동기 HTTP API
- 외부 클라이언트와 장기 실행 작업의 상태를 조정하는 문제 해결
- HTTP 엔드포인트에서 장기 실행 작업을 트리거 → 클라이언트를 클라이언트에서 폴링하는 상태 엔드포인트로 리디렉션 → 작업 완료 시점을 알아봄
모니터
- 워크플로에서 유연한 되풀이 프로세스를 나타냄
- 일반 타이머 트리거 : 정기적인 정리 작업과 같은 기본 시나리오 처리가 가능하지만 간격이 정적이고 인스턴스 수명 관리가 복잡해짐
- Durable Functions을 사용하여 유연한 되풀이 간격을 만들고 작업 수명 관리, 단일 오케스트레이션에서 여러 모니터 프로세스 만들 수 있음
- 임의의 엔드포인트를 관찰하는 여러 모니터를 만들 수 있음
- 조건 충족시 → 모니터에서 실행 종료 or 다른 함수에서 지속성 오케스트레이션 클라이언트를 사용하여 모니터를 종료할 수 있음
사용자 개입
- 시간 제한 및 보정 논리를 사용하여 이 상호작용을 허용할 수 있음
- 지속성 타이머를 사용하여 승인을 요청
- 시간 초과 → 오케스트레이터가 에스컬레이션됨
- 에스컬레이션 : 상승
- 오케스트레이터 → 사용자 개입으로 생성된 알림과 같은 외부 이벤트를 기다림
함수 유형
오케스트레이터 함수
- 작업이 실행되는 방법 및 작업이 실행되는 순서를 설명
- 코드의 오케스트레이션
- 활동 함수, 하위 오케스트레이션, 외부 이벤트 대기, HTTP 및 타이머를 비롯한 다양한 유형의 작업이 포함됨
- 엔터티 함수, 상호작용 가능
- 일반 코드를 사용하여 작성되지만 코드를 작성하는 방법에 대한 엄격한 요구 사항이 존재
활동 함수
- 지속성 함수 오케스트레이션의 기본 작업 단위
- ex) 인벤토리 확인, 고객 요금 청구 및 배송물 생성 작업이 포함됨
- 각 작업은 별도의 활동 함수이며 직렬, 병렬 또는 둘의 조합으로 실행할 수 있음
- 수행할 수 있는 작업 형식에 제한 되지 않음
- 작업 트리거 : 작업 함수를 정의하는데 사용됨
엔터티 함수
- 작은 상태 부분을 읽고 업데이트하는 작업을 정의
- 지속성 엔터티로 자주 참조함
- 엔터티 함수는 특수 트리거 유형인 엔터티 트리거를 사용하는 함수
- 클라이언트 함수 or 오케스트레이터 함수에서 호출 할 수 있음
- 오케스트레이터 함수와 달리 엔터티 함수는 특정 코드 제약 조건을 포함하지 않음
- 제어 흐름을 통해 상태를 암시적으로 나타내지 않고 명시적으로 관리함
유의사항
- 고유 식별자인 엔터티 ID를 통해 액세스 됨
- 엔터티 ID는 단순히 엔터티 인스턴스를 고유하게 식별하는 문자열 쌍
- 대상 엔터티의 엔터티 ID와 수행할 작업을 지정하는 문자열인 작업 이름을 지정 해야 함
클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → 바인딩에 의해 트리거됨 → 작업 허브의 큐에 있는 메시지에 반응하여 작동함
- 클라이언트 함수 내에서 오케스트레이터 클라이언트 바인딩 or 엔터티 클라이언트 바인딩 사용
- 오케스트레이터가 아닌 함수 → 클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → Azure portal 단추를 사용해서 직접 트리거할 수 없음
작업 허브?
- 오케스트레이션 및 엔터티에 사용되는 지속형 스토리지 리소스에 대한 논리적 컨테이너
- 오케스트레이터, 작업, 엔터티 함수는 동일한 작업 허브에 속하는 경우에만 직접 상호 작용할 수 있음
- 여러 함수 앱이 한 스토리지 계정을 공유하는 경우, 반드시 function App마다 별도의 작업 허브 이름으로 구성해야함, 한 스토리지 계정에 여러 작업 허브가 포함될 수 있으며 이 제한(별도의 작업 허브 이름으로 구성) 다른 스토리지 공급자에도 적용됨
Azure Storage 리소스
- 하나 이상의 제어 큐
- 하나의 작업 항목 큐
- 하나의 기록 테이블
- 하나의 인스턴스 테이블
- 하나 이상의 스토리지 Blob을 포함하는 하나의 스토리지 컨테이너
- 큰 메시지 페이로드가 포함된 스토리지 컨테이너
작업 허브 이름
Azure Storage의 작업 허브는 다음 규칙을 준수하는 이름으로 식별됨
- 영 숫자만 포함
- 문자로 시작
- 최소 길이는 3자, 최대 길이는 45자
- host.json에 선언됨
지속성 오케스트레이션
- 함수 앱 내에서 다른 지속성 함수의 실행을 오케스트레이션 할 수 있음
특징
- 절차적 코드를 사용하여 함수 워크플로를 정의함
- 선언적 스키마, 디자이너 필요 x
다른 지속성 함수를 동기적, 비 동기적으로 호출할 수 있음
- 지속적이고 신뢰할 수 있음
- “대기” , “생성” 할 때 실행 진행률 검사점이 자동으로 설정됨
- 프로세스 재활용 or VM이 다시 부팅 되더라도 로컬 상태가 손실 되지 않음
- 장기 실행될 수 있으며 인스턴스의 총 수명은 초, 일, 월 또는 무한대일 수 있음
오케스트레이션 ID
- 각 인스턴스에는 인스턴스 식별자가 있으며 각 인스턴스 ID는 자동으로 생성된 GUID
- 인스턴스 ID는 사용자가 생성한 문자열 값일 수 있음
- 오케스트레이션 인스턴스 ID 는 작업 허브 내에서 고유해야 함
- 일반적으로 가능한 경우 자동으로 생성된 인스턴스 ID를 사용하는 것이 좋음
- 사용자 생성 인스턴스 ID는 오케스트레이션 인스턴스와 일부 외부 애플리케이션 관련 엔터티 간에 일대일 매핑이 있는 시나리오를 위한 것임
- 인스턴스 ID : 대부분의 인스턴스 관리 작업에 필요한 매개 변수
안정성
- 오케스트레이터 함수 : 이벤트 소싱 디자인 패턴을 사용하여 실행 상태를 안정적으로 유지함
- 지속성 작업 프레임워크 : 오케스트레이션의 현재 상태를 직접 저장하는 대신 추가 전용 저장소를 사용하여 함수 오케스트레이션에서 수행하는 일련의 작업 전체를 기록함
- Durable Functions은 이벤트 소싱을 투명하게 사용함
- await, yield 연산자 → 내부적으로 오케스트레이터 스레드 제어를 지속성 작업 프레임워크 디스패처에 다시 생성함 → 오케스트레이터에서 예약한 새 작업을 스토리지에 커밋 → 오케스트레이션 인스턴스의 실행 기록에 추가됨, 기록은 스토리지 테이블에 저장되며 실제 작업을 예약하는 큐에 메시지를 추가함
- 오케스트레이션 함수에 많은 작업이 부여되면 오케스트레이터가 절전 모드에서 깨어나 전제 함수를 처음부터 다시 실행해서 로컬 상태를 다시 작성함
- 재생 중에 코드에서 함수를 호출하거나 다른 비동기 작업을 수행하려고 하는 경우, 지속성 작업 프레임워크는 현재 오케스트레이션의 실행 기록을 참조함
- 할동 함수가 이미 실행되어 결과를 생성하는 경우 해당 함수의 결과를 재생하고 오케스트레이터 코드가 계속 실행됨
- 함수 코드가 완료되거나 새 비동기 작업이 예약될 때까지 재생이 계속됨
Durable Function에서 타이밍 제어
- 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공함
- 오케스트레이터 함수에서 사용해야됨
- 메서드를 호출해서 지속성 타이머를 만든다.
- 지정된 날짜와 시간에 완료되는 작업을 반환함
타이머 제한 사항
이벤트 보내기 및 대기
- 외부 이벤트를 대기 하거나 수신 대기하는 기능
- 인간 상호 작용, 다른 외부 트리거를 처리하는데 유용
이벤트 대기
- 오케스트레이터 함수가 외부 이벤트를 비 동기적으로 대기하고 수신 대기할 수 있음
- 수신 오케스트레이터→ 이벤트 이름과 수신할 것으로 예상되는 데이터의 shape를 선언함
이벤트 보내기
- 서버리스 컴퓨팅 환경에서 상태 저장 함수를 작성할 수 있는 Azure Functions의 확장
- 서버리스 컴퓨팅 환경 : 프로비저닝 할 서버가 존재하지 않음
Azure Functions 프로그래밍 모델 → 오케스트레이터 함수 작성 → 상태 저장 워크플로 정의 → 엔터티 함수 작성 → 상태 저장 엔터티 정의
지원되는 언어
C#,JavaScript,Python,F#,PowerShell
애플리케이션 패턴
함수 체이닝
- 특정 순서대로 실행됨
try/catch/finally : 오류 처리 논리가 포함됨
팬아웃/팬인
- 여러 함수를 병렬 실행 → 모든 함수가 완료될 때까지 기다림
비동기 HTTP API
- 외부 클라이언트와 장기 실행 작업의 상태를 조정하는 문제 해결
- HTTP 엔드포인트에서 장기 실행 작업을 트리거 → 클라이언트를 클라이언트에서 폴링하는 상태 엔드포인트로 리디렉션 → 작업 완료 시점을 알아봄
모니터
- 워크플로에서 유연한 되풀이 프로세스를 나타냄
- 일반 타이머 트리거 : 정기적인 정리 작업과 같은 기본 시나리오 처리가 가능하지만 간격이 정적이고 인스턴스 수명 관리가 복잡해짐
- Durable Functions을 사용하여 유연한 되풀이 간격을 만들고 작업 수명 관리, 단일 오케스트레이션에서 여러 모니터 프로세스 만들 수 있음
- 임의의 엔드포인트를 관찰하는 여러 모니터를 만들 수 있음
- 조건 충족시 → 모니터에서 실행 종료 or 다른 함수에서 지속성 오케스트레이션 클라이언트를 사용하여 모니터를 종료할 수 있음
사용자 개입
- 시간 제한 및 보정 논리를 사용하여 이 상호작용을 허용할 수 있음
- 지속성 타이머를 사용하여 승인을 요청
- 시간 초과 → 오케스트레이터가 에스컬레이션됨
- 에스컬레이션 : 상승
- 오케스트레이터 → 사용자 개입으로 생성된 알림과 같은 외부 이벤트를 기다림
함수 유형
오케스트레이터 함수
- 작업이 실행되는 방법 및 작업이 실행되는 순서를 설명
- 코드의 오케스트레이션
- 활동 함수, 하위 오케스트레이션, 외부 이벤트 대기, HTTP 및 타이머를 비롯한 다양한 유형의 작업이 포함됨
- 엔터티 함수, 상호작용 가능
- 일반 코드를 사용하여 작성되지만 코드를 작성하는 방법에 대한 엄격한 요구 사항이 존재
활동 함수
- 지속성 함수 오케스트레이션의 기본 작업 단위
- ex) 인벤토리 확인, 고객 요금 청구 및 배송물 생성 작업이 포함됨
- 각 작업은 별도의 활동 함수이며 직렬, 병렬 또는 둘의 조합으로 실행할 수 있음
- 수행할 수 있는 작업 형식에 제한 되지 않음
- 작업 트리거 : 작업 함수를 정의하는데 사용됨
엔터티 함수
- 작은 상태 부분을 읽고 업데이트하는 작업을 정의
- 지속성 엔터티로 자주 참조함
- 엔터티 함수는 특수 트리거 유형인 엔터티 트리거를 사용하는 함수
- 클라이언트 함수 or 오케스트레이터 함수에서 호출 할 수 있음
- 오케스트레이터 함수와 달리 엔터티 함수는 특정 코드 제약 조건을 포함하지 않음
- 제어 흐름을 통해 상태를 암시적으로 나타내지 않고 명시적으로 관리함
유의사항
- 고유 식별자인 엔터티 ID를 통해 액세스 됨
- 엔터티 ID는 단순히 엔터티 인스턴스를 고유하게 식별하는 문자열 쌍
- 대상 엔터티의 엔터티 ID와 수행할 작업을 지정하는 문자열인 작업 이름을 지정 해야 함
클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → 바인딩에 의해 트리거됨 → 작업 허브의 큐에 있는 메시지에 반응하여 작동함
- 클라이언트 함수 내에서 오케스트레이터 클라이언트 바인딩 or 엔터티 클라이언트 바인딩 사용
- 오케스트레이터가 아닌 함수 → 클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → Azure portal 단추를 사용해서 직접 트리거할 수 없음
작업 허브?
- 오케스트레이션 및 엔터티에 사용되는 지속형 스토리지 리소스에 대한 논리적 컨테이너
- 오케스트레이터, 작업, 엔터티 함수는 동일한 작업 허브에 속하는 경우에만 직접 상호 작용할 수 있음
- 여러 함수 앱이 한 스토리지 계정을 공유하는 경우, 반드시 function App마다 별도의 작업 허브 이름으로 구성해야함, 한 스토리지 계정에 여러 작업 허브가 포함될 수 있으며 이 제한(별도의 작업 허브 이름으로 구성) 다른 스토리지 공급자에도 적용됨
Azure Storage 리소스
- 하나 이상의 제어 큐
- 하나의 작업 항목 큐
- 하나의 기록 테이블
- 하나의 인스턴스 테이블
- 하나 이상의 스토리지 Blob을 포함하는 하나의 스토리지 컨테이너
- 큰 메시지 페이로드가 포함된 스토리지 컨테이너
작업 허브 이름
Azure Storage의 작업 허브는 다음 규칙을 준수하는 이름으로 식별됨
- 영 숫자만 포함
- 문자로 시작
- 최소 길이는 3자, 최대 길이는 45자
- host.json에 선언됨
지속성 오케스트레이션
- 함수 앱 내에서 다른 지속성 함수의 실행을 오케스트레이션 할 수 있음
특징
- 절차적 코드를 사용하여 함수 워크플로를 정의함
- 선언적 스키마, 디자이너 필요 x
다른 지속성 함수를 동기적, 비 동기적으로 호출할 수 있음
- 지속적이고 신뢰할 수 있음
- “대기” , “생성” 할 때 실행 진행률 검사점이 자동으로 설정됨
- 프로세스 재활용 or VM이 다시 부팅 되더라도 로컬 상태가 손실 되지 않음
- 장기 실행될 수 있으며 인스턴스의 총 수명은 초, 일, 월 또는 무한대일 수 있음
오케스트레이션 ID
- 각 인스턴스에는 인스턴스 식별자가 있으며 각 인스턴스 ID는 자동으로 생성된 GUID
- 인스턴스 ID는 사용자가 생성한 문자열 값일 수 있음
- 오케스트레이션 인스턴스 ID 는 작업 허브 내에서 고유해야 함
- 일반적으로 가능한 경우 자동으로 생성된 인스턴스 ID를 사용하는 것이 좋음
- 사용자 생성 인스턴스 ID는 오케스트레이션 인스턴스와 일부 외부 애플리케이션 관련 엔터티 간에 일대일 매핑이 있는 시나리오를 위한 것임
- 인스턴스 ID : 대부분의 인스턴스 관리 작업에 필요한 매개 변수
안정성
- 오케스트레이터 함수 : 이벤트 소싱 디자인 패턴을 사용하여 실행 상태를 안정적으로 유지함
- 지속성 작업 프레임워크 : 오케스트레이션의 현재 상태를 직접 저장하는 대신 추가 전용 저장소를 사용하여 함수 오케스트레이션에서 수행하는 일련의 작업 전체를 기록함
- Durable Functions은 이벤트 소싱을 투명하게 사용함
- await, yield 연산자 → 내부적으로 오케스트레이터 스레드 제어를 지속성 작업 프레임워크 디스패처에 다시 생성함 → 오케스트레이터에서 예약한 새 작업을 스토리지에 커밋 → 오케스트레이션 인스턴스의 실행 기록에 추가됨, 기록은 스토리지 테이블에 저장되며 실제 작업을 예약하는 큐에 메시지를 추가함
- 오케스트레이션 함수에 많은 작업이 부여되면 오케스트레이터가 절전 모드에서 깨어나 전제 함수를 처음부터 다시 실행해서 로컬 상태를 다시 작성함
- 재생 중에 코드에서 함수를 호출하거나 다른 비동기 작업을 수행하려고 하는 경우, 지속성 작업 프레임워크는 현재 오케스트레이션의 실행 기록을 참조함
- 할동 함수가 이미 실행되어 결과를 생성하는 경우 해당 함수의 결과를 재생하고 오케스트레이터 코드가 계속 실행됨
- 함수 코드가 완료되거나 새 비동기 작업이 예약될 때까지 재생이 계속됨
Durable Function에서 타이밍 제어
- 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공함
- 오케스트레이터 함수에서 사용해야됨
- 메서드를 호출해서 지속성 타이머를 만든다.
- 지정된 날짜와 시간에 완료되는 작업을 반환함
타이머 제한 사항
이벤트 보내기 및 대기
- 외부 이벤트를 대기 하거나 수신 대기하는 기능
- 인간 상호 작용, 다른 외부 트리거를 처리하는데 유용
이벤트 대기
- 오케스트레이터 함수가 외부 이벤트를 비 동기적으로 대기하고 수신 대기할 수 있음
- 수신 오케스트레이터→ 이벤트 이름과 수신할 것으로 예상되는 데이터의 shape를 선언함
이벤트 보내기
- 서버리스 컴퓨팅 환경에서 상태 저장 함수를 작성할 수 있는 Azure Functions의 확장
- 서버리스 컴퓨팅 환경 : 프로비저닝 할 서버가 존재하지 않음
Azure Functions 프로그래밍 모델 → 오케스트레이터 함수 작성 → 상태 저장 워크플로 정의 → 엔터티 함수 작성 → 상태 저장 엔터티 정의
지원되는 언어
C#,JavaScript,Python,F#,PowerShell
애플리케이션 패턴
함수 체이닝
- 특정 순서대로 실행됨
try/catch/finally : 오류 처리 논리가 포함됨
팬아웃/팬인
- 여러 함수를 병렬 실행 → 모든 함수가 완료될 때까지 기다림
비동기 HTTP API
- 외부 클라이언트와 장기 실행 작업의 상태를 조정하는 문제 해결
- HTTP 엔드포인트에서 장기 실행 작업을 트리거 → 클라이언트를 클라이언트에서 폴링하는 상태 엔드포인트로 리디렉션 → 작업 완료 시점을 알아봄
모니터
- 워크플로에서 유연한 되풀이 프로세스를 나타냄
- 일반 타이머 트리거 : 정기적인 정리 작업과 같은 기본 시나리오 처리가 가능하지만 간격이 정적이고 인스턴스 수명 관리가 복잡해짐
- Durable Functions을 사용하여 유연한 되풀이 간격을 만들고 작업 수명 관리, 단일 오케스트레이션에서 여러 모니터 프로세스 만들 수 있음
- 임의의 엔드포인트를 관찰하는 여러 모니터를 만들 수 있음
- 조건 충족시 → 모니터에서 실행 종료 or 다른 함수에서 지속성 오케스트레이션 클라이언트를 사용하여 모니터를 종료할 수 있음
사용자 개입
- 시간 제한 및 보정 논리를 사용하여 이 상호작용을 허용할 수 있음
- 지속성 타이머를 사용하여 승인을 요청
- 시간 초과 → 오케스트레이터가 에스컬레이션됨
- 에스컬레이션 : 상승
- 오케스트레이터 → 사용자 개입으로 생성된 알림과 같은 외부 이벤트를 기다림
함수 유형
오케스트레이터 함수
- 작업이 실행되는 방법 및 작업이 실행되는 순서를 설명
- 코드의 오케스트레이션
- 활동 함수, 하위 오케스트레이션, 외부 이벤트 대기, HTTP 및 타이머를 비롯한 다양한 유형의 작업이 포함됨
- 엔터티 함수, 상호작용 가능
- 일반 코드를 사용하여 작성되지만 코드를 작성하는 방법에 대한 엄격한 요구 사항이 존재
활동 함수
- 지속성 함수 오케스트레이션의 기본 작업 단위
- ex) 인벤토리 확인, 고객 요금 청구 및 배송물 생성 작업이 포함됨
- 각 작업은 별도의 활동 함수이며 직렬, 병렬 또는 둘의 조합으로 실행할 수 있음
- 수행할 수 있는 작업 형식에 제한 되지 않음
- 작업 트리거 : 작업 함수를 정의하는데 사용됨
엔터티 함수
- 작은 상태 부분을 읽고 업데이트하는 작업을 정의
- 지속성 엔터티로 자주 참조함
- 엔터티 함수는 특수 트리거 유형인 엔터티 트리거를 사용하는 함수
- 클라이언트 함수 or 오케스트레이터 함수에서 호출 할 수 있음
- 오케스트레이터 함수와 달리 엔터티 함수는 특정 코드 제약 조건을 포함하지 않음
- 제어 흐름을 통해 상태를 암시적으로 나타내지 않고 명시적으로 관리함
유의사항
- 고유 식별자인 엔터티 ID를 통해 액세스 됨
- 엔터티 ID는 단순히 엔터티 인스턴스를 고유하게 식별하는 문자열 쌍
- 대상 엔터티의 엔터티 ID와 수행할 작업을 지정하는 문자열인 작업 이름을 지정 해야 함
클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → 바인딩에 의해 트리거됨 → 작업 허브의 큐에 있는 메시지에 반응하여 작동함
- 클라이언트 함수 내에서 오케스트레이터 클라이언트 바인딩 or 엔터티 클라이언트 바인딩 사용
- 오케스트레이터가 아닌 함수 → 클라이언트 함수
- 오케스트레이터 함수, 엔터티 함수 → Azure portal 단추를 사용해서 직접 트리거할 수 없음
작업 허브?
- 오케스트레이션 및 엔터티에 사용되는 지속형 스토리지 리소스에 대한 논리적 컨테이너
- 오케스트레이터, 작업, 엔터티 함수는 동일한 작업 허브에 속하는 경우에만 직접 상호 작용할 수 있음
- 여러 함수 앱이 한 스토리지 계정을 공유하는 경우, 반드시 function App마다 별도의 작업 허브 이름으로 구성해야함, 한 스토리지 계정에 여러 작업 허브가 포함될 수 있으며 이 제한(별도의 작업 허브 이름으로 구성) 다른 스토리지 공급자에도 적용됨
Azure Storage 리소스
- 하나 이상의 제어 큐
- 하나의 작업 항목 큐
- 하나의 기록 테이블
- 하나의 인스턴스 테이블
- 하나 이상의 스토리지 Blob을 포함하는 하나의 스토리지 컨테이너
- 큰 메시지 페이로드가 포함된 스토리지 컨테이너
작업 허브 이름
Azure Storage의 작업 허브는 다음 규칙을 준수하는 이름으로 식별됨
- 영 숫자만 포함
- 문자로 시작
- 최소 길이는 3자, 최대 길이는 45자
- host.json에 선언됨
지속성 오케스트레이션
- 함수 앱 내에서 다른 지속성 함수의 실행을 오케스트레이션 할 수 있음
특징
- 절차적 코드를 사용하여 함수 워크플로를 정의함
- 선언적 스키마, 디자이너 필요 x
다른 지속성 함수를 동기적, 비 동기적으로 호출할 수 있음
- 지속적이고 신뢰할 수 있음
- “대기” , “생성” 할 때 실행 진행률 검사점이 자동으로 설정됨
- 프로세스 재활용 or VM이 다시 부팅 되더라도 로컬 상태가 손실 되지 않음
- 장기 실행될 수 있으며 인스턴스의 총 수명은 초, 일, 월 또는 무한대일 수 있음
오케스트레이션 ID
- 각 인스턴스에는 인스턴스 식별자가 있으며 각 인스턴스 ID는 자동으로 생성된 GUID
- 인스턴스 ID는 사용자가 생성한 문자열 값일 수 있음
- 오케스트레이션 인스턴스 ID 는 작업 허브 내에서 고유해야 함
- 일반적으로 가능한 경우 자동으로 생성된 인스턴스 ID를 사용하는 것이 좋음
- 사용자 생성 인스턴스 ID는 오케스트레이션 인스턴스와 일부 외부 애플리케이션 관련 엔터티 간에 일대일 매핑이 있는 시나리오를 위한 것임
- 인스턴스 ID : 대부분의 인스턴스 관리 작업에 필요한 매개 변수
안정성
- 오케스트레이터 함수 : 이벤트 소싱 디자인 패턴을 사용하여 실행 상태를 안정적으로 유지함
- 지속성 작업 프레임워크 : 오케스트레이션의 현재 상태를 직접 저장하는 대신 추가 전용 저장소를 사용하여 함수 오케스트레이션에서 수행하는 일련의 작업 전체를 기록함
- Durable Functions은 이벤트 소싱을 투명하게 사용함
- await, yield 연산자 → 내부적으로 오케스트레이터 스레드 제어를 지속성 작업 프레임워크 디스패처에 다시 생성함 → 오케스트레이터에서 예약한 새 작업을 스토리지에 커밋 → 오케스트레이션 인스턴스의 실행 기록에 추가됨, 기록은 스토리지 테이블에 저장되며 실제 작업을 예약하는 큐에 메시지를 추가함
- 오케스트레이션 함수에 많은 작업이 부여되면 오케스트레이터가 절전 모드에서 깨어나 전제 함수를 처음부터 다시 실행해서 로컬 상태를 다시 작성함
- 재생 중에 코드에서 함수를 호출하거나 다른 비동기 작업을 수행하려고 하는 경우, 지속성 작업 프레임워크는 현재 오케스트레이션의 실행 기록을 참조함
- 할동 함수가 이미 실행되어 결과를 생성하는 경우 해당 함수의 결과를 재생하고 오케스트레이터 코드가 계속 실행됨
- 함수 코드가 완료되거나 새 비동기 작업이 예약될 때까지 재생이 계속됨
Durable Function에서 타이밍 제어
- 지연을 구현하거나 비동기 작업에 대한 시간 제한을 설정하기 위해 오케스트레이터 함수에 사용할 지속성 타이머를 제공함
- 오케스트레이터 함수에서 사용해야됨
- 메서드를 호출해서 지속성 타이머를 만든다.
- 지정된 날짜와 시간에 완료되는 작업을 반환함
타이머 제한 사항
이벤트 보내기 및 대기
- 외부 이벤트를 대기 하거나 수신 대기하는 기능
- 인간 상호 작용, 다른 외부 트리거를 처리하는데 유용
이벤트 대기
- 오케스트레이터 함수가 외부 이벤트를 비 동기적으로 대기하고 수신 대기할 수 있음
- 수신 오케스트레이터→ 이벤트 이름과 수신할 것으로 예상되는 데이터의 shape를 선언함