새벽 배치 하나가 실패했는데 앞 배치가 아직 끝나지 않은 상태에서 시작했기 때문이었다. 두 배치가 각각 정해진 시각에 뜨도록 걸려 있었고 그 간격이 이날 모자랐다.
Table of contents
Open Table of contents
시간으로 맞춰 둔 배치
시간으로 맞추면 앞 배치가 평소보다 오래 걸리는 날에 바로 깨진다. 자료가 늘어나면 앞 배치의 소요 시간도 늘어나므로 언젠가는 반드시 겹친다.
간격을 늘리는 것으로 그날은 넘길 수 있지만 그것은 다음 한계를 미루는 것뿐이다. 근본은 순서를 시간으로 표현하고 있다는 데 있었다.
의존을 적고 이어 부르기
먼저 어느 배치가 어느 배치의 결과를 쓰는지를 적었다. 적어 보니 서로 관계없는 것들까지 시간으로 줄 세워져 있어서 불필요한 대기가 있었다.
의존이 있는 것들은 앞 배치가 끝날 때 다음을 부르게 바꿨다. 그러면 앞이 오래 걸려도 어긋나지 않고 앞이 실패하면 뒤가 아예 안 돈다.
각 단계가 스스로 확인한다
이어서 부르는 구조여도 사람이 손으로 하나만 돌리는 경우가 있으므로 각 단계가 앞 단계의 완료를 스스로 확인하게 했다. 확인해서 안 끝났으면 진행하지 않고 알린다.
이렇게 하면 어떤 경로로 불려도 잘못된 순서로는 안 돈다. 부르는 쪽과 불리는 쪽 양쪽에서 순서를 지키는 셈이다.
중간부터 다시 돌리기
전체가 이어져 있으면 중간에서 실패했을 때 처음부터 다시 돌리게 되기 쉽다. 앞부분을 다시 도는 시간이 아깝고 처리에 따라서는 두 번 돌면 안 되는 것도 있다.
그래서 어느 단계부터 다시 시작할지를 지정할 수 있게 했다. 실패한 단계를 고치고 거기서부터 이어 붙이는 것이 실제 운영에서 가장 자주 쓰였다.
걸린 시간 남기기
각 단계가 얼마나 걸렸는지를 매번 남기게 했는데 이 값이 늘어나는 것이 보여야 미리 손을 쓸 수 있다. 겹치고 나서 알면 이미 실패한 뒤다.
기록을 보다가 한 단계가 자원을 오래 잡고 있는 것도 발견해서 그것을 나누어 병렬로 돌렸다. 다만 동시에 도는 개수에 제한을 두어서 한꺼번에 몰리지 않게 했다.
정리
- 배치끼리 의존이 있으면 시간으로 맞추지 않는다
- 앞 배치가 길어지는 날 반드시 겹친다
- 무엇이 무엇을 필요로 하는지 적는다
- 끝나면 다음을 부르게 한다
- 각 단계가 앞 단계의 완료를 스스로 확인하게 한다
- 중간부터 다시 돌릴 수 있게 한다
- 오래 걸리는 것을 나누되 동시 개수를 제한한다
- 단계별 걸린 시간을 남긴다