Closed leesungbin closed 1 year ago
제가 이해한 것이 맞다면 현재 setInterval을 통해 runBatch를 주기적으로 실행하고, Batcher라는 클래스에 내부적으로 blocked와 실행 여부를 변수로 관리하는 듯 합니다.
이를 통해 실행할 때마다 blocked와 running 여부를 체크 하고 실행을 하는 것으로 보입니다. (blocked와 running 이 true이면 return) 이는 큐에서 전의 요청이 정상적으로 response를 받고 Too Many Request를 피하기 위한 방법으로 이해를 했는데 blocked와 running 여부를 매번 확인하는 것이 아니라 그냥 외부 api를 요청하고 await 후 response를 받은 후에 해당 response의 유효성을 검증하는 방식을 적용할 수 없나요?
가끔씩 crossref가 응답을 빠르게 해주는 경우가 있어서요, 이 친구가 빠른 속도로 응답해버릴 때, 응답이 올 때마다 다음 요청을 보내는 식으로 하면 rate limit이 걸릴 수 있겠더라구요. (ex doi로 검색할 때) 물론 대부분의 경우 응답속도가 매우 느리기 때문에 말씀하신대로 할 수 있을 것 같습니다. crossref에 찌르는 최소한의 시간 단위를 지정하기 위해 이렇게 구현했습니다!
개요
작업사항
Dockerfile
BE / FE 수정 (npm i -> npm ci) #87TIME_INTERVAL
을 3초에서 1초로 줄이고, batch 한 단위가 끝나야만 다음 batch를 실행할 수 있도록 함RESTART_INTERVAL
만큼 요청을 보내지 않음 (Batcher 내부에 block 변수를 static하게 선언)/search/stat
에서 서버의 batch queue 상태와, elasticsearch db 상태를 확인할 수 있음 (debug 용)리뷰 요청사항