배포 순서, 그리고 그게 순서인 이유
배선 계약이 바뀌면 배포가 한 순서로 돌아. 필드의 어휘든, 응답 봉투든, 라우트 모양이든. 소유 서비스 먼저, 그다음 공용 층, 그다음 소비자 엔진들, 그다음 전부를 같은 창에서 재시작.
순서는 의존 방향을 따르고, 사람들이 건너뛰는 건 마지막 단계야. 전부 디스크에 있어도 여전히 틀릴 수 있어. 도는 프로세스는 시작할 때 임포트한 코드를 쥐고 있으니까. 재시작 없는 배포는 파일이 하나를 말하고 동작이 다른 걸 말하는 시스템을 만들고, 그게 있을 수 있는 제일 헷갈리는 상태야.
버전 섞인 유예 기간이 없는 이유
버전 붙은 API 는 정확히 이 창을 위해 설계돼. 옛것과 새것이 계약으로 공존하고, 소비자는 자기 일정으로 올리고, 섞인 상태가 지원돼.
이 가족엔 그게 하나도 없고 원하지도 않아. 버전 어긋남이 공용 저장소가 없애려고 존재하는 결함이야. 여기서 버전 고정은 어긋남을 버그가 아니라 지원되는 기능으로 만들어. 결과는 섞인 창이 지원되는 상태가 아니라는 거야. 그동안 부품마다 시스템 절반이 아직 안 채택한 계약에 대고 올바르게 굴어.
그게 깨진 창보다 나빠. 깨진 창은 스스로 알리거든. 절반 배포된 창에선 대체로 돌아가. 요청은 통과하고, 응답은 파싱되고, 필드 하나가 받는 쪽 가정이랑 살짝 다른 뜻일 뿐이야. 그 창에서 테스트하면 결과는 몇 분 뒤엔 존재하지 않을 구성을 묘사해.
실무적 결과 둘
첫째, 창을 짧고 스크립트로 유지해. 순서를 길게 만드는 건 뭐든 시스템이 지원 안 되는 상태에 있는 간격을 늘려. 손으로 하는 단계든, 확인이든, 재시작하기 전에 찾아야 하는 서비스든. 그 순서는 전부를 하는 명령 하나여야 해.
둘째, 내려앉은 변경이 배포된 변경은 아냐. 레지스트리든 라우트 표든 정책 지도든, 모듈 수준 데이터를 바꾸는 커밋은 오래 도는 프로세스한텐 그 프로세스가 재시작할 때에야 닿아. 전부 커밋되고 푸시되고 디스크에서 맞는 채로, 도는 시스템은 무기한 옛날 방식으로 굴 수 있어. 그다음 오는 실패는 방향 감각을 잃게 해. 코드를 읽으면 관찰하고 있는 것의 반대를 말해주고, 다들 믿는 게 코드거든.