Akka 문서 - 메시지 전달의 신뢰성 (일반 규칙)

Ada·2023년 9월 18일

Akka

목록 보기
18/32

Akka는 단일 기계 내의 여러 프로세서 코어를 사용하거나 ("스케일링 업")
컴퓨터 네트워크 전반에 걸쳐 분산 (스케일링 아웃) 하여 신뢰할 수 있는 애플리케이션을 구축하는 데 도움을 준다.

이를 가능하게 하는 핵심 추상화는 코드 유닛(액터) 간의 모든 상호 작용이 메시지 전달을 통해 이루어진다는 것이며,
이로 인해 액터 간에 어떻게 메시지가 전달되는지에 대한 정확한 의미가 중요해진다.

일반 규칙

메시지 전송(즉, tell 또는 ! 메서드, ask 패턴 또한 포함)에 대한 규칙 :

  • 최대 한 번 전달, 즉 보장된 전달이 없음

  • 발신자-수신자 쌍 당 메시지 순서

"최대 한 번"이 무엇을 의미하는가?

전달 메커니즘의 의미를 설명할 때 기본적으로 세 가지 카테고리가 있다 :

  • "최대 한 번" 전달은 메커니즘에 전달된 각 메시지가 한 번 또는 전혀 전달되지 않는다는 것을 의미한다.

  • "최소 한 번" 전달은 각 메시지에 대해 여러 번 전달 시도가 있어서 적어도 하나는 성공한다는 것을 의미한다.

  • "정확히 한 번" 전달은 각 메시지에 대해 수신자에게 정확히 한 번 전달이 이루어진다는 것을 의미한다.

보장된 전달이 없는 이유는 무엇인가?

문제의 핵심은 이 보장이 정확히 무엇을 의미하는지에 있다.

메시지가 네트워크에 전송되었는지, 다른 호스트에서 수신되었는지, 대상 액터의 메일박스에 넣어졌는지, 대상 액터에 의해 처리가 시작되었는지, 성공적으로 처리되었는지 등 다양한 단계와 도전이 있다.

메시지 순서

발신자와 수신자 사이에 직접 전송된 메시지는 순서대로 받을 것이라는 것이 보장된다.

이것은 액터 A1이 메시지 M1, M2, M3를 액터 A2에게 보내고, 액터 A3이 메시지 M4, M5, M6를 액터 A2에게 보낼 때, 각 액터의 메시지가 순서대로 전달될 것이라는 것을 의미한다.

액터 생성은 부모로부터 자식에게 보낸 메시지로 취급되며, 위에서 논의한 것과 동일한 의미이다.

실패의 통신

액터 간의 사용자 메시지에 대해서만 위의 순서 보장이 적용된다.

자식 액터의 실패는 일반 사용자 메시지와 관련이 없는 특별한 시스템 메시지를 통해 전달되며, 이 메시지는 순서가 보장되지 않는다.

profile
백엔드 프로그래머

0개의 댓글