안녕하세요.
노드 싱크와 관련해서 글을 남기게 되었습니다.
상황
- 현재 클라우드 서비스에 EN 노드 1개를 띄워서 DAPP 서비스를 운영하고 있습니다.
- 메인넷의 경우 리소스를 vCPU 2와 메모리 8G 주고 띄우고 있습니다.
- 그리고 주기적으로 메인넷 open-api의 klay_blockNumber JSON-RPC를 통해서 내부적으로 관리하는 EN과 블럭 넘버를 비교하고 있습니다.
- 노드 버전은 v1.5.3입니다.
- https://packages.klaytn.net/cypress/chaindata/에서 데이터를 받아 싱크를 맞췄습니다.
문제
- 그런데 종종 open-api 노드와 블럭넘버 차이가 100개 이상 벌어질 때가 있습니다.
질문
-
처음에는 노드의 리소스가 부족하다 생각하여 리소스를 늘렸습니다. 하지만 그럼에도 불구하고 지속적으로 위의 문제가 계속 발생하고 있었습니다.
ken에서 지원되는 prometheus 메트릭을 통해서 살펴본 결과 disk write 작업이 많거나 block processing 시간이 길 때 싱크가 벌어지는 현상이 나타나고 있었습니다.
그런데 이것은 저의 관찰을 통한 단순한 추측에 불과하여 질문드립니다. 혹시 노드 사이에 싱크가 벌어지는 원인에는 어떤 것들이 있을까요? -
위의 문제를 해결하기 위해서 노드를 스케일링하고 싶습니다. 그런데 각 노드는 stateful한 상태라 단순 로드밸런싱을 통해서는 노드 스케일링이 불가능할 거 같습니다. 혹시 어떻게 하면 '데이터 일관성’을 깨뜨리지 않고 스케일링을 할 수 있을까요?
'데이터 일관성’이라는 단어는 예를 들어 한 클라이언트가 klay_blockNumber를 통해서 블럭 넘버를 조회할 때, 여러 노드의 싱크 상태에 관계없이 항상 증가하는 블럭 넘버를 받을 수 있는 등 사용자가 일관된 데이터를 받아볼 수 있는 특성을 나타내기 위해 썼습니다.