스터디/Etc

CloudFlare Worker Cron Tip.

Dalmangyi 2023. 11. 28.

가격에선 최고

디버깅 빢심

 

 

worker cron 사용문제점

 

1. 초단위 불가

cron command에서 일반적으로 * * * * * 이렇게 

* 별 5개를 사용하고, 첫 별 부터 끝 별까지 분,시,일,월,년 단위를 표현하곤하는데

리눅스계열에선 별을 6개까지 늘려서 초 단위로 쪼갤 수도 있다.

하지만 worker에선 불가함.

 

 

 

2. cpu 최대 시간 제한.......

1일마다 실행되며, 그 시간은 언제 끝나든 상관없게 짜고 싶지만

worker에서는 기본적으로 50ms만큼 실행되고,

최대로 늘리고 싶어도 30000ms(30초)만큼만 실행이 가능함. 

더 이상 실행하게 되면 

내부에서 exception이 발생하며, 아래와 같은 멘트가 뜬다.

{
\"message\":\"Error: Too many subrequests.\",
\"details\":\"Error: Too many subrequests.\\n    at index.js:5378:23\\n    at index.js:5399:12\\n    at Generator.next (<anonymous>)\\n    at fulfilled (index.js:5351:24)\",
\"hint\":\"\",\"code\":\"\"
}"

 

 

3. 매우 정확하게 실행이 안됨.

cron의 경우 cold start 400ms정도가 소요되며

매 분 마다 실행시켜도, 로컬에서 테스트 하면

1분 0초 10ms, 2분 0초 20ms.. 이런식으로 오차가 적게 실행되는반면

worker는 rest api 방식으로 호출되서 그런지 

1분이 다 흐르기 막바지에 간신히 실행되는 느낌이다.

그래서 실행되는 시간이 1분 49초, 1분 52초 이런식으로 실행된다.

 

=> 결제하면 콜드스타트가 거의 없어짐...

 

 

 

4. SubRequest한계

1번의 cron 안에서 http 호출 한도가 있음.

한도 (50회)를 초과할 경우. 'too many requests'라는 메세지가 뜨면서 cron이 종료됨.

 

에러 메세지

 {
      "name": "Error",
      "message": "Too many subrequests.",
      "timestamp": 1701107340313
    }

 

 

=>  결제하면 subrequests 50개에서 1000개로 늘려줌...

댓글