クイズ: リリース切り替えとロールバック
한국어 원문으로 표시합니다.
새 판 배포 뒤 /health 가 200 이었지만 주문이 저장되지 않았다. 이 사고를 배포 단계에서 잡으려면 무엇을 더해야 하는가?
- 헬스체크 간격을 줄여 더 자주 확인한다
- 주문 한 건을 넣고 되읽는 스모크 시험을 배포 성공 조건에 넣는다
- /health 가 200 대신 204 를 돌려주게 바꾼다
- 프로세스 CPU 사용률이 0 보다 큰지 함께 본다
current 가 releases/1.4.0 을 가리킨다. ln -sf releases/1.5.0 current 를 실행했더니 명령은 성공했다. 실측에서 일어난 일은?
- current 가 releases/1.5.0 을 가리키도록 원자적으로 바뀌었다
- current 가 지워지고 새 링크 만들기에 실패해 current 가 없어졌다
- current 는 그대로이고 releases/1.4.0 안에 1.5.0 이라는 링크가 생겼다
- 심링크를 덮어쓸 수 없다는 오류로 종료 코드 1 이 났다
임시 링크를 만들어 current 위로 rename 하는 방식을 쓸 때, 임시 링크를 current 와 같은 디렉터리에 두는 이유는?
- 서로 다른 마운트 사이의 rename 은 EXDEV 로 실패해 원자 교체를 쓸 수 없기 때문에
- 심링크는 만든 디렉터리 밖으로 옮기면 가리키는 대상이 사라지기 때문에
- 같은 디렉터리여야 rename 이 기존 current 를 백업해 주기 때문에
- 다른 디렉터리의 링크는 readlink 가 절대 경로를 돌려주기 때문에
배포 스크립트가 옛 프로세스를 내리지 못한 채 새 판을 띄웠고, 새 판은 포트 충돌로 곧바로 죽었다. 헬스체크가 초록으로 나오는 것을 막는 방법은?
- 헬스체크를 두 번 연속 성공해야 통과로 본다
- 헬스체크 전에 3초를 기다려 새 판이 뜰 시간을 준다
- 헬스체크 주소를 localhost 대신 127.0.0.1 로 바꾼다
- 헬스체크 응답의 version 이 새 판인지 확인한다
releases 에 여섯 판이 있고, 되돌림 때문에 current 는 두 번째로 오래된 판이다. prune 을 '최신 3개만 남기기' 로 구현하면 생기는 문제는?
- 최신 3개가 모두 실패한 판이라 되돌릴 곳이 늘어난다
- 지금 돌고 있는 current 의 판과 돌아갈 직전 판이 삭제될 수 있다
- mtime 이 같은 판이 있으면 정리 순서가 달라져 한 판이 더 남는다
- 심링크가 가리키는 디렉터리는 rm -rf 로 지워지지 않아 정리가 실패한다
coreutils 9.4 가 깔린 실습 이미지에서 ln -sfn 과 임시 링크+mv -T 를 번갈아 수천 번 실행하며 다른 프로세스가 readlink 했을 때의 실측 결과와 그 해석으로 알맞은 것은?
- ln -sfn 쪽에서만 current 가 없는 순간이 보였고, ln 은 판과 무관하게 먼저 지운다
- mv -T 쪽에서만 없는 순간이 보였고, rename 보다 ln 이 원자성 보장이 강하다
- 둘 다 보이지 않았고, ln 의 이 보장은 8.27 부터라 판을 모르면 rename 이 무난하다
- 둘 다 보였으므로 심링크 전환을 버리고 디렉터리를 통째로 복사하는 편이 낫다