Klaytn Node 에서 최대 몇 건의 JSON-RPC 요청까지 동시에 처리가 가능한지 문의 드립니다

안녕하세요!

과거 블록부터 최근 블록까지 Token Transfer 와 관련된 Event Logs 를 수집해서 분석하는 서버를 제작 중에 있습니다.

Klaytn Node 에서 최대 몇 건의 JSON-RPC 요청까지 동시에 처리가 가능한지를 알 수 있는 것인지에 대해 문의 드립니다(Baobab, Cypress).

개별 노드로 구성해서도 사용을 하고 있습니다. 별도의 설정 방법이나 솔루션이 있는지 가이드도 부탁드립니다.!

혹시라도 대량건의 과거 블록 데이터를 빠르게 수집하는 방법에 대한 베스트 프랙티스가 있는지도 여쭤봅니다.

[제가 테스트해 본 환경입니다.]

  • endpoint: https://api.baobab.klaytn.net:8651
  • 블록넘버 전체 구간: 108,303,993 ~ 90,691,819
  • 1,700만건의 블록넘버 구간을 100건씩 나눠서 17만건의 고루틴으로 요청
  • 사용한 API: client.FilterLogs(context.Background(), query)

→ query timeout error 가 발생이 되었습니다.
→ Post “https://api.baobab.klaytn.net:8651/”: http2: Transport: cannot retry err [http2: Transport received Server’s graceful shutdown GOAWAY] after Request.Body was written; define Request.GetBody to avoid this error 도 발생이 되었습니다.

감사합니다.

우선 public node의 경우, rps의 제한이 링크와 같이 설정되어있습니다.

개별 노드 설정시, rpc.concurrencylimit flag를 설정하여(default 3k), json-rpc 요청에 대한 리소스를 올릴 수 있습니다.

2 Likes

설명 감사드립니다.!
RPS 를 고려하여 동시에 client.FilterLogs(context.Background(), query) 요청 수를 조절해 보도록 하겠습니다.

1 Like

안녕하세요~ filterLogs 의 경우 리턴값이 큰, 부하가 큰 api에 속하기 때문에 concurrency limit을 설정하실때 너무 큰 값을 설정하지 않도록 주의하시면 될 것 같습니다.

또한, 만약 sync가 끝났다면 --state.trie-cache-limit 값을 낮게 설정하면 rpc serving을 위한 메모리 확보에 도움이 될 것 같습니다. 예를들어, 30기가 메모리를 가진 머신의 경우 13기가 정도가 sync를 위한 fastcache 메모리로 사용하는데, 이보다 낮게 설정하면 될것 같습니다.

3 Likes