본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

target 별로 이어하기

~9 min · resumable, sleeping-is-not-failure, systemic-vs-isolated, no-fake-rollback

Level 0Lone Machine
0 XP0/37 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"campaign 은 다 되거나 다 안 되는 transaction 이 아냐. 여러 갈래고, 각 갈래는 멈춘 데서 이어할 수 있어."

transaction 하나가 아니라 이어할 수 있는 여러 갈래

fleet campaign 을 다 되거나 다 안 되는 큰 덩어리 하나로 생각하기 쉬워. 그 틀은 틀렸고 위험해. campaign 은 target 별 갈래의 묶음이야. 갈래마다 자기 상태가 있고, 멈춘 데서 이어할 수 있어. target 하나 놓치는 게 끝난 일곱을 다시 하는 걸 뜻하면 절대 안 돼.

자는 Mac 은 이어할 일

예상된 reboot disconnect, 가방 속 자는 랩탑. 이건 target 상태 지 failure 가 아냐. campaign 은 걔들을 정직하게 적어. 고장이 아니라 pending 으로. 그리고 호스트가 돌아오는 순간 이어해. 일부러 자리 비운 걸 failure 로 다루면, 차분하게 이어가면 될 rollout 이 진짜 경보까지 무시하게 만드는 오경보로 변해.

고립된 실패 vs systemic 실패

target 이 진짜 실패하면 물어야 해. 이게 문제야, 문제야? 고립된 실패, 그러니까 호스트 하나가 자기 이유로 실패한 건 수리 작업이 되고, 건강한 peer 는 계속 끝내. systemic 실패, 그러니까 원인을 나눠서 남은 target 을 죄다 똑같이 깰 종류는 좁은 정지를 불러. 시작 안 한 target 을 멈춰서 같은 고장을 아홉 번 반복 안 해. 하나는 수리, 다른 하나는 정지.

무거운 rollback 을 기본으로 달진 않아

high-risk campaign 은 명시적 예외 처리랑 그 좁은 systemic-failure 규칙을 받아. 근데 기본으로 full rollback pipeline 을 요구하진 않아. 그리고 어떤 건 그냥 안 되돌려져. major OS downgrade 는 자동 rollback 인 척 절대 안 해. 못 되돌리는 것에 대한 정직함이, 거짓말하는 rollback 버튼보다 안전해.

target 별로 이어하고, failure 를 나누는 것만 멈춰. 자는 기계는 끝낼 일, 고립된 고장은 수리, 원인을 나눈 것만 정지를 벌어. 여기 어느 것도 다 되거나 다 안 되기가 아냐.

Code

각 target 은 멈춘 데서 이어함·python
for host in campaign.targets:
    state = campaign.state_of(host)
    if state == "succeeded": continue            # 끝남. 안 건드려
    if state == "pending":   resume(host)         # 자거나 끊김 -> 나중에 이어함
    if state == "failed":    repair_task(host)    # 고립: 이 하나만 고침. peer 는 굴러가

# SHARED 원인만 나머지를 멈춰:
if systemic_failure(campaign):
    pause_unstarted(campaign)   # 좁은 정지. 남은 target 을 똑같이 안 깨

# '전체 campaign 자동 undo' 는 없어. 어떤 step(OS downgrade)은
# 안 되돌려지고, 시스템은 절대 그런 척 안 해.

External links

Exercise

언제든 중단될 수 있는 열 항목짜리 batch job 을 설계해. 랩탑이 자거나 프로세스가 kill 되거나. 각 항목이 자기 상태를 어떻게 기록해서 재실행이 안 끝난 것만 끝내는지 써. 그다음 정해봐. 어떤 단일 failure 가 전체 batch 를 멈추고, 어떤 건 그냥 log 하고 지나갈래?
Hint
'전체 batch 멈춤' failure 는 systemic 이야. 남은 항목을 죄다 똑같이 칠 공유 원인이지. API 다운, 디스크 참 같은 거. 나머지는 다 항목별이야. log 하고, 계속 가고, 재실행이 정확히 남은 것만 집게 해.

Progress

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

댓글 0

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

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