15. 죽어버린 데이터 관리 작업
죽어버린
백업 및 데이터 관리
서비스
데이터가 별로 없던 초기에 타이머작업을 구현하기 쉬워 Azure Functions로 구현
작업이 점점 길어져
타임 아웃
16. Azure Functions의 여러 제약
Azure Functions을 Azure Functions답게 사용할 수 있는 Consumption Plan은 여러 제약이 있음
기본 실행시간에 대한 제약
함수는 최대 10분 이상 실행시킬 수 없음
사용할 수 있는 컴퓨팅 자원에 대한 제약
하나의 함수 인스턴스는 1.5GB 이상의 램과 하나를 초과한 CPU를 사용할 수 없음
17. 이를 해결하기 위해 생각했던 두 가지의 방안
1. Function으로 Queue를 생성해서 다시 Function에서 병렬처리, 취합
취합
2. 새로운 Azure Web App을 생성해 Web Job을 돌리거나 Function에서 주기적으로 로직을 실행
18. 이를 해결하기 위해 생각했던 두 가지의 방안
1. Function으로 Queue를 생성해서 다시 Function에서 병렬처리, 취합
취합
2. 새로운 Azure Web App을 생성해 Web Job을 돌리거나 Function에서 주기적으로 로직을 실행
하지만..
할 수 있지만 번거롭고 Queue에 대한 처리를 해야 함
하루 중 한 시간 이내의 작업인데 전체 시간에 대한 요금 지불
데이터가 많아지면 결국엔 Web App도 스케일링 이슈가 생기게 됨
데이터를 스캐닝 하는 작업은 짧은 시간 동안 많은 자원이 필요하기 때문에 최대로
필요한 자원을 할당해 놓아야 작업이 죽지 않음. 이를 기준으로 요금 지불
20. Durable Functions의 필요성
Azure Functions을 Functions답게 사용할 수 있는 Consumption Plan은 여러 제약이 있음
현실적으로 쉽지 않은 서버리스 프로그래밍 모델
함수 앱의 기본 개념과 맞게 프로그래밍을 하면 오래 실행하는 함수는 발생하지 않지만 여기에는 높은 추상화 수준이 필요
타이머로 하고 싶은 주기적인 작업, 하지만 Azure Functions의 한계
쉽게 실행할 수 있고 관리할 수 있는 Functions의 타이머는 오랫동안 전체 데이터를 가지고 실행되는 작업을 하고 싶은 욕구를
불러 일으킴. Azure Durable Functions는 상태를 가지고 오래 실행하는 함수를 가능하도록 함.
여러 함수와 함께 작업
여러 복잡한 함수들을 단순하게 조율하고 다른 함수에서 함수를 쉽게 코드로 호출
21. Durable Functions?
코드로 해버리는 서버리스 오케스트레이션
오랫동안 돌아가는 함수를 하나의 C# 함수로
하나의 C# 함수로 오랫동안 돌아가는 오케스트레이션을 코딩. No JSON 스키마, No Designer.
새로운 Orchestrator Functions
Orchestrator Functions는 동기 혹은 비동기로 다른 함수를 호출할 수 있음
그리고
자동으로 함수를 체크해 장기간 실행되는 함수를 가능하도록 함
서버리스 앱에서 복잡하고 상호작용해야 하는 곳에서 발생할 수 있는 다양한 문제들을 해결
Azure의 오픈소스인 Durable Task Framework를 기반으로 만들어짐
22. Durable Functions?
코드로 해버리는 서버리스 오케스트레이션
오랫동안 돌아가는 함수를 하나의 C# 함수로
하나의 C# 함수로 오랫동안 돌아가는 오케스트레이션을 코딩. No JSON 스키마, No Designer.
새로운 Orchestrator Functions
Orchestrator Functions는 동기 혹은 비동기로 다른 함수를 호출할 수 있음
그리고
자동으로 함수를 체크해 장기간 실행되는 함수를 가능하도록 함
서버리스 앱에서 복잡하고 상호작용해야 하는 곳에서 발생할 수 있는 다양한 문제들을 해결
Azure의 오픈소스인 Durable Task Framework를 기반으로 만들어짐
23. Durable Functions이 돌아가는 방법
Worker
Worker
Worker
Worker
Worker
Stateful/Partitioned
Stateless
Control Queue(s)
Triggers orchestrator
function execution
Work Item Queue
Triggers activity function execution
History & Instance Tables
25. 패턴 #1 : Function Chaining
F1 F2 F3 F4
문제:
• 함수와 큐 사이의 관계를 보여줄 수 있는 시각적인 요소가 없음
• 중간 큐는 함수에서 의도한 바가 아님 – 개념적으로 오버헤드
• 오류를 처리하는 것은 정말 복잡함
26. 패턴 #1 : Function Chaining
// calls functions in sequence
public static async Task<object> Run(DurableOrchestrationContext ctx)
{
try
{
var x = await ctx.CallFunctionAsync("F1");
var y = await ctx.CallFunctionAsync("F2", x);
var z = await ctx.CallFunctionAsync("F3", y);
return await ctx.CallFunctionAsync("F4", z);
}
catch (Exception)
{
// global error handling/compensation goes here
}
}
28. 패턴 #2 : Fan-out/Fan-in
문제:
- Fanning-out은 쉬움, 하지만 fanning-in은 매우 복잡함
- 함수는 이 시나리오에 대한 지원을 하지 않음
- 패턴#1에 있는 모든 문제가 있음
F1
F2
F3
29. 패턴 #2 : Fan-out/Fan-in
public static async Task Run(DurableOrchestrationContext ctx)
{
var parallelTasks = new List<Task<int>>();
// get a list of N work items to process in parallel
object[] workBatch = await ctx.CallFunctionAsync<object[]>("F1");
for (int i = 0; i < workBatch.Length; i++)
{
Task<int> task = ctx.CallFunctionAsync<int>("F2", workBatch[i]);
parallelTasks.Add(task);
}
await Task.WhenAll(parallelTasks);
// aggregate all N outputs and send result to F3
int sum = parallelTasks.Sum(t => t.Result);
await ctx.CallFunctionAsync("F3", sum);
}
33. 패턴 #4 : Actors
문제:
• 함수는 상태가 없고(Stateless) 짧은 시간동안만 살아있음
• 외부 상태에 대한 읽기/쓰기 작업은 신중하게 동기화되어야 함
• 함수는 Singleton 패턴을 지원하지 않음
34. 패턴 #4 : Actors (Eternal Orchestrations)
public static async Task Run(DurableOrchestrationContext ctx)
{
int counterState = ctx.GetInput<int>();
string operation = await ctx.WaitForExternalEvent<string>("operation");
if (operation == "incr")
{
counterState++;
}
else if (operation == "decr")
{
counterState--;
}
ctx.ContinueAsNew(counterState);
}
35. 패턴 #5 : Human Interaction w/Timeout
RequestApproval
Escalate
ProcessApproval
문제:
- 승인 요청 알림이 올 때의 타임아웃 문제를 쉽게 제어할 수 없음
- 승인 처리 또는 시간 초과를 확실하게 처리할 수 있는 메커니즘이 필요
37. 백업 및 데이터 관리 작업을
Azure Durable Functions으로
바꾸고 나서
38. Azure Durable Functions을 통해 다시 구현
백업, 데이터 관리 프로세스를 Azure Durable Functions을 통해 다시 구현하고 작업 시작 종료 시 팀즈로
메시지를 보내 관리자가 확인
39. Azure Durable Functions으로 변경하고 나서
데이터 관리 프로세스를 Azure Durable Functions을 통해 다시 구현
적은 노력으로 빠르게 개발 빠른 작업 속도
데이터 양의 변화에 상관 없이 매우 저렴
40. Azure Durable Functions의 계속되는 진화
계속해서 좋아지고 있는 Azure Durable Functions
Aggregator (프리뷰)
Durable Function 2.0
Entity Functions
Durable HTTP
…
현재 Azure Durable Functions에서 새로 준비 중인 기능