본문 바로가기
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 가 중요한 걸 쥐고 있었던 적이 없으니까. 그 lease 가 어떻게 도는지는 트랙 6 전체가 다뤄. 지금은 모양만 기억해 두면 돼. 무거운 일은 아무것도 소유하지 않는 호스트에서 돈다.

Code

역할과 권리 (분리가 곧 아키텍처)·text
CONTROL PLANE (호스트 1)       EXECUTOR (호스트 2)
  소유: 데이터베이스              소유: 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

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

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