Spot과 Actor
스펙 목차 · 다음: 01. Spot 모델
Message가 SpotId나 ActorId 하나로 출발해 현재 owner를 찾고, 그 Actor의 queue에
닿기까지 — 이 주제는 Spot 세 종류(Entry·User·Instance)와 그 위에 사는 Actor의
identity·membership·relocation, 그리고 message가 실제로 도달하는 경로를 다룬다.
1. 무엇을 다루는가
Actor와 handler가 실행되는 단위인 Spot에는 세 종류가
있다 — node마다 하나씩 있는 Entry Spot, 명시적으로 만드는 User Spot, 첫 호출이
도착할 때 만들어지는 Instance Spot이다. Spot은 MeshNode
위에 배치되고, Actor는 Spot에 join해서 identity와 queue를
얻는다. Application이 global SpotId나 ActorId로 message를 보내면 Framework가 현재
owner를 찾아 그 Actor의 queue에 넣는다 — 매 message마다 위치를 다시 조회하는 대신
최근 조회 결과를 잠시 재사용하고, Actor나 Spot이 다른 node로 이동하면 그 경로를
갱신한다. 이 주제는 이 전체 흐름 — Spot의 종류와 차이, 메시지가 Spot까지 도달하는
경로, MeshNode의 identity와 배치, Actor의 identity와 lifecycle, Spot·Actor
membership과 relocation, global 주소로 Spot을 만들고 부르는 방법, Spot 위에 상위
모델을 얹는 경계, 위치 조회와 routing, 객체 종류의 내부 구현 — 을 아홉 개 문서로
나눠 설명한다.
2. 누가 무엇을 결정하는가
| 주체 |
결정·소유하는 것 |
| Application |
Actor·Spot 생성 의도(Instance intent), global ID로 보내는 message target, Session bind에 쓰는 특정 ActorRef를 정한다. Actor나 Spot을 실제로 실행하는 MeshNode인 Owner의 주소나 route를 직접 지정하지 않는다. |
| Framework(source runtime) |
Global ID를 owner route로 바꾸고, positive route cache를 관리하며, relocation 뒤 Message Follow로 이전 route에 도착한 message를 우회시킨다. |
| Framework(target runtime) |
자신이 current owner인지, object가 Ready인지, local admission이 가능한지 확인한 뒤 application queue에 넣는다. |
| Location Store |
각 Spot의 현재 owner와 상태를 여러 node가 함께 확인하도록 보관하는 저장소로서, Spot·Actor마다 current owner, incarnation, owner generation과 lease를 authority로 기록한다. |
| MeshNode/relocation runtime |
Object 배치 후보를 고르고, join·relocation의 target 선택과 준비 판정을 수행한다. |
3. 한 흐름으로 보기
%%{init: {'flowchart': {'nodeSpacing': 32, 'rankSpacing': 40, 'padding': 8, 'wrappingWidth': 180}, 'themeVariables': {'fontSize': '18px'}}}%%
flowchart TB
A["Application이 global SpotId 또는 ActorId로 message를 보낸다"] --> B{"Positive route<br/>cache에 최근 Ready<br/>route가 있는가"}
B -- "있다" --> D["cache의 owner route를 사용한다"]
B -- "없다" --> C["Location Store에서<br/>current owner를 조회한다"]
C --> D
D --> E{"target node가<br/>현재 owner이고<br/>object가 Ready인가"}
E -- "아니다(이동했다)" --> F["Message Follow가 새 owner로<br/>relay하고 source cache를 무효화한다"]
F --> G["Actor queue에 넣는다"]
E -- "그렇다" --> G["Actor queue에 넣는다"]
이 그림은 global ID로 보낸 message가 owner를 찾아 queue에 닿는 논리적 경로 하나만
보여준다. Session에 bind된 Actor로 가는 경로와 request reply가 돌아가는 경로는
08. routing §1이, Actor가 Spot에 join하는 순서는
05. spot-actor-membership이 각각 정의한다.
4. 이 주제의 문서
| 문서 |
다루는 것 |
| 01. Spot 모델 |
Entry·User·Instance Spot이 언제 만들어지고, 무엇이 같고 다른지, lifecycle callback은 무엇인지 정의한다. |
| 02. Spot 메시징 |
global SpotId 하나를 지정해 message를 보내는 Spot direct, Channel 범위 Logical Multicast와 Subscription으로 message가 Spot까지 가는 경로와 queue 규칙을 정의한다. |
| 03. MeshNode |
MeshNode의 identity, object 배치 조건과 startup·peer admission 순서를 정의한다. |
| 04. Actor 모델 |
Actor의 identity, queue, control과 Create/GetOrCreate/Find/destroy lifecycle을 정의한다. |
| 05. Spot·Actor membership |
Actor가 현재 어느 Entry Spot 또는 User Spot에 속하는지를 나타내는 Actor membership 관계, Actor join/commit 순서와 relocation policy를 정의한다. |
| 06. Spot 주소와 메시징 |
Spot identity·reference, User Spot Create/GetOrCreate, route cache와 close를 정의한다. |
| 07. Stage wrapper on Spot |
Spot 계약 위에 room·stage 같은 상위 실행 모델을 얹는 경계를 정의한다. |
| 08. Spot·Actor routing |
Global ID routing, bound-session relay와 reply route, positive route cache와 relocation 뒤 우회 경로를 정의한다. |
| 09. 객체 종류와 활성화 |
객체 종류를 코드에서 구분하는 방법, cold activation, 정리 대상과 memory 회계를 다루는 구현 스펙이다. |
| 10. Spot timer |
Spot이 등록하는 반복·지연 callback의 계약 — timer generation과 cancel, 밀렸을 때의 overrun policy, 등록 수가 늘어도 자원이 비례해 늘지 않는 구현을 정의한다. |
5. 질문으로 찾기
6. 읽는 순서
- 01. Spot 모델 — Spot 세 종류가 무엇인지 먼저 안다.
- 02. Spot 메시징 — 그 Spot에 메시지가 어떻게 도달하는지 안다(direct·multicast·subscription).
- 03. MeshNode — 메시지가 타는 물리 layer(RID, role, placement)를 안다.
- 04. Actor 모델 — Spot 위에 사는 Actor의 identity·queue·lifecycle을 안다.
- 05. Spot·Actor membership — Actor가 Spot에 join·commit되는 정확한 순서와 relocation policy를 안다.
- 06. Spot 주소와 메시징 — global SpotId로 User/Instance Spot을 만들고 부르는 방법을 안다.
- 07. Stage wrapper on Spot — Spot 계약 위에 상위 모델을 얹는 경계를 안다(짧고 응용적이므로 뒤로 둔다).
- 08. Spot·Actor routing — 지금까지 나온 모든 대상(Spot·Actor·session-bound Actor)에 실제로 message를 보낼 때 어떤 route를 쓰고 언제 위치를 다시 조회하는지 하나로 모아 안다.
- 09. 객체 종류와 활성화 — 구현자 전용: 객체 종류를 코드에서 어떻게 구분하고 언제 만들고 정리하는지 안다(구현 스펙이므로 마지막에 읽는다).
- 10. Spot timer — Spot에 반복 작업을 걸 때 언제 실행되고 밀리면 무엇을 받는지 안다.
7. 이 주제가 정의하지 않는 것
스펙 목차 · 다음: 01. Spot 모델