C.W.K.
Stream
Lesson 01 of 04 · published

control plane vs executor

~11 min · control-plane, executor, distributed-systems, topology

Level 0Empty Shelf
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"한 호스트는 결정해. 한 호스트는 실행해. 일부러 같은 호스트가 아냐."

네 개의 역할, 네 개의 동료가 아니라

Recall 의 일은 기계들에 퍼져 있지만, 그 분리는 '속도 위해 컴퓨터 더' 가 아냐. 각 역할은 뭘 소유하도록 허락받았는지로 정의돼:

  • control plane — 항상 켜진 호스트 하나. 데이터베이스, job queue, 받아들인 증거, 그리고 모든 상태 전이를 소유해. 단일 진실의 원천이야. 얘가 job 끝났다고 하면, 끝난 거야.
  • executor — 또 다른 항상 켜진 호스트. 아카이브를 스캔하고, 오디오를 트랜스코딩하고, 유료 전사 API 를 불러. canonical 상태는 하나도 소유 안 해. 로컬 파일은 캐시야: 재구축 가능, 버릴 수 있음, 절대 진실 아님.
  • 스토리지(NAS) — 원본 영상 바이트를 소유해. 아무도 그걸 DB 로 복사 안 해.
  • 개발 client(노트북) — 코드 편집하고, 작은 테스트 돌리고, git 에 push 해. job 을 소유한 적도 없고 무거운 아카이브 일을 돌린 적도 없어.

이것들이 교체 가능한 동료가 아니라는 걸 봐. 다른 권리를 가진 역할들이고, 그 권리가 곧 아키텍처야.

왜 결정과 실행을 분리해

executor 의 일은 느리고, 비싸고, 실패하기 쉬운 전부야: hang 걸릴 수 있는 네트워크 파일시스템, 트랜스코딩할 몇 기가짜리 영상, 타임아웃 날 수 있는 유료 API 호출. 그건 정확히 진실의 원천에 융합하고 싶지 않은 종류의 일이야. 융합하면 멈춘 네트워크 마운트 하나가 DB 를 얼리고, 트랜스코딩 중 크래시 하나가 queue 를 오염시켜.

분리하면 blast radius 가 줄어. executor 는 job 중에 크래시하거나, hang 걸리거나, 죽어도 돼 — control plane 의 진실은 멀쩡해, executor 는 애초에 진실을 쓸 권한이 없었으니까. 결과를 제안만 할 수 있고, control plane 이 받거나 거절해. 두뇌랑 손을 생각해: 손이 위험한 일을 하지만, 뭐가 실제로 일어났는지는 두뇌가 정해.

executor 는 진실이 아니라 lease 를 쥐어

구체적으로: executor 는 파일을 소유하듯 job 을 '가진' 게 아냐. control plane 에서 하나 claim 하고, 시간 제한 lease 아래 작업하고, 결과를 수락받으려고 도로 제출해. 죽으면 lease 가 만료되고 control plane 이 job 을 딴 애한테 넘겨. 아무것도 안 잃어, executor 는 중요한 걸 쥔 적이 없으니까. 트랙 6 전체가 그 lease 가 어떻게 도는지야. 지금은 모양만 붙잡아: 무거운 일은 아무것도 소유 안 하는 호스트에 살아.

Code

역할과 권리 (분리가 곧 아키텍처)·text
CONTROL PLANE (호스트 1)       EXECUTOR (호스트 1)
  소유: 데이터베이스              소유: canonical 상태 없음
  소유: job queue + lease         함: 아카이브 스캔
  소유: 받아들인 증거             함: 오디오 트랜스코딩
  소유: 모든 상태 변화           함: 유료 API 호출
  = 단일 진실의 원천             캐시: 재구축 가능, 버릴 수 있음

스토리지(NAS)       원본 영상 바이트 소유
개발 client(노트북)  코드 편집, git push, job 소유 안 함

executor 는 job 중 크래시해도 돼 — 진실은 멀쩡,
애초에 진실을 쓸 권한이 없었으니까.

External links

Exercise

느린 백그라운드 일을 하는, 네가 만들었거나 쓴 시스템을 봐(빌드 서버, 영상 export, 데이터 import). 물어: 느린 일을 하는 그것이 뭐가 진실인지의 기록도 소유해? 그렇다면 일 중에 크래시하면 어떻게 되는지 추적해 — 진실이 살아남아? 진실을 소유하는 control plane 이랑 안전하게 크래시할 수 있는 stateless executor 로 어떻게 쪼갤지 스케치해봐.
Hint
냄새는 비싼 결과를 계산하면서 권위 있는 '완료' 기록도 쓰는 단일 프로세스야. 그걸 떼어놔: worker 는 계산하고 제안하게, 별도 소유자는 수락하게. 좋은 분리의 테스트는 'job 중에 worker 를 죽여 — 뭐가 오염돼?' 야. 답은 '아니' 여야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.