LabHub
배우기 러닝패스 코스

자본시장과 결제 · 장애 뒤 재처리에서 주문을 두 번 내지 않기 · 실습

재시작한 프로세스가 같은 주문을 다시 냈다

LabHub 에서 이어서 보기

목표

죽었다 살아난 전송 프로세스의 체크포인트와 전송 로그에서 재처리 구간을 찾고, 거래소 접수 확인과 대조해 실제로 두 번 접수된 주문만 골라낸 뒤, 결정적 주문 id 와 중복 제거 창 길이를 자료에서 구해 복구 절차서를 남깁니다.

왜 중요한가

재처리는 없앨 수 없습니다. 체크포인트를 보낸 뒤에 저장하면 죽었을 때 그 구간이 다시 나가고, 보내기 전에 저장하면 그 구간이 빠집니다. 둘 사이에 안전한 지점이 없기 때문에, 전송 경로는 대개 다시 보내는 쪽을 고르고 중복은 받는 쪽에서 거릅니다. 거르려면 같은 신호가 몇 번을 다시 읽혀도 같은 주문 id 를 내야 하는데, 실행마다 새로 매기는 일련번호나 시각을 섞은 id 는 그 조건을 깨뜨립니다. 그리고 정정과 취소는 이전 id 를 가리키므로, id 규칙이 흔들리면 사슬까지 끊어져 취소하려던 주문이 남습니다.

단계

1. python3/root/cap/replay/data 에 여섯 개 자료 파일을 만듭니다. 생성 스크립트를 그대로 쓰세요.
2. 체크포인트와 전송 로그를 견줘 재처리 구간을 /root/cap/replay/crash.txt 에 적습니다.
3. 그 구간에서 다시 나갈 주문을 /root/cap/replay/replay.csv/root/cap/replay/replay.txt 에 적습니다.
4. 신호의 안정된 필드만으로 주문 id 를 만들어 /root/cap/replay/clordid.csv/root/cap/replay/idcheck.txt 에 적습니다.
5. 접수 확인과 대조해 두 번 받아들여진 주문을 /root/cap/replay/dup.csv/root/cap/replay/dup.txt 에 적습니다.
6. 체크포인트 저장 시점 두 가지를 각각 계산해 /root/cap/replay/modes.csv 에 한 줄씩 적습니다.
7. 원주문을 가리키지 못하는 취소와 정정을 /root/cap/replay/broken.csv/root/cap/replay/broken.txt 에 적습니다.
8. 중복 제거 창 길이를 /root/cap/replay/window.txt 에, 복구 절차서를 /root/cap/replay/runbook.md 에 남깁니다.

참고

단계 8개

  1. 장애가 남긴 자료 만들기
  2. 어디부터 다시 읽었는지 찾기
  3. 그대로 재시작하면 무엇이 다시 나가는지 세기
  4. 다시 읽어도 같은 주문 id 만들기
  5. 정말 두 번 받아들여진 주문만 남기기
  6. 체크포인트를 언제 저장하느냐로 갈리는 것
  7. 취소가 가리키던 주문이 사라졌다
  8. 중복 제거 창을 자료에서 구하고 절차서 쓰기