동일한 입력에 대한 Azure Functions 디자인
이벤트 기반 및 메시지 기반 아키텍처의 현실에서는 데이터 무결성 및 시스템 안정성을 유지하면서 동일한 요청을 수락해야 합니다.
설명하려면 엘리베이터 호출 단추를 고려합니다. 버튼을 누르면 불이 켜지고 엘리베이터가 바닥으로 전송됩니다. 잠시 후 다른 사람이 로비에 합류합니다. 이 사람은 당신을 미소 짓고 조명 버튼을 두 번째로 누릅니다. 엘리베이터를 호출하는 명령이 멱등하다는 것을 상기시키면서 미소를 지으며 웃습니다.
엘리베이터 호출 단추를 두 번째, 세 번째 또는 네 번째로 누르면 최종 결과에 아무런 영향을 주지 않습니다. 단추를 누르면 횟수에 관계없이 엘리베이터가 바닥으로 전송됩니다. 엘리베이터와 같은 Idempotent 시스템은 동일한 명령이 실행된 횟수에 관계없이 동일한 결과를 생성합니다.
애플리케이션을 빌드하는 경우 다음 시나리오를 고려하세요.
- 인벤토리 제어 애플리케이션에서 동일한 제품을 두 번 이상 삭제하려고 하면 어떻게 되나요?
- 동일한 사람에 대한 직원 레코드를 만드는 요청이 두 개 이상 있을 경우 인사 관리 애플리케이션이 어떻게 동작하나요?
- 은행 앱이 동일한 인출을 위해 100개의 요청을 받으면 돈은 어디로 이동하나요?
함수에 대한 요청이 동일한 명령을 받을 수 있는 많은 컨텍스트가 있습니다. 예를 들어 다음과 같은 경우입니다.
- 동일한 요청을 여러 번 보내는 정책을 재시도합니다.
- 애플리케이션에 재생된 캐시된 명령.
- 동일한 요청을 여러 개 보내는 애플리케이션 오류.
데이터 무결성 및 시스템 상태를 보호하기 위해 idempotent 애플리케이션에는 다음 동작을 포함할 수 있는 논리가 포함됩니다.
- 삭제를 실행하기 전에 데이터가 있는지 확인.
- 만들기 작업을 실행하기 전에 데이터가 이미 있는지 확인.
- 데이터의 최종 일관성을 만드는 논리 조정.
- 동시성 제어.
- 중복 검색.
- 데이터 새로 고침 유효성 검사.
- 입력 데이터를 확인하기 위한 가드 논리.
궁극적으로 멱등성은 지정된 작업이 가능하고 한 번만 실행되도록 하여 달성됩니다.