
Paradigm, 블록체인 노드 부하 테스트를 위한 강력한 도구 '플러드(Flood)' 도입
저자: Storm Slivkoff, Georgios Konstantopoulos
번역: TechFlow

소개
부하 테스트는 탄력성 있고 고성능의 데이터 시스템을 개발하는 데 핵심적인 단계입니다. 그러나 부하 테스트는 암호화폐 인프라 개발에서 널리 사용되지 않고 있습니다. 우리는 이러한 공백을 메우기 위해 RPC 엔드포인트 성능 분석에 특화된 벤치마킹 도구인 Flood를 소개하게 되어 기쁩니다.
처음에 우리는 Reth를 최적화하고 다양한 부하 하에서 지연 시간과 처리량 간의 트레이드오프를 이해하기 위한 도구로 Flood를 사용했습니다. 이후 우리는 Reth 외에도 Flood가 다양한 종류의 암호화폐 인프라 성능 최적화에 중요한 실용적 가치가 있음을 알게 되었습니다.
함께 살펴보겠습니다.
부하 테스트란 무엇이며 왜 중요한가?
부하 테스트는 시스템이 다양한 작업 부하를 받을 때 성능 특성이 어떻게 변화하는지를 측정하는 것입니다. 이 방법의 핵심 통찰은 시스템이 점점 더 많은 부하를 받을수록 처리량, 지연 시간, 오류율 등의 성능 지표가 일반적으로 저하된다는 점입니다. 따라서 제어된 다양한 부하 하에서 시스템의 동작을 관찰하면 시스템 병목 현상, 장애 모드 및 궁극적인 성능 한계를 파악할 수 있습니다.
부하 테스트를 통해 얻은 정보는 여러 방면에서 활용될 수 있습니다. 시스템 개발 중에는 부하 테스트를 통해 우선적으로 개선해야 할 시스템 병목 지점을 드러낼 수 있습니다. 두 시스템을 비교할 때는 어느 쪽이 더 나은 성능이나 신뢰성을 가지는지 밝혀낼 수 있습니다. 이 경우의 특수한 예로, 동일한 시스템의 서로 다른 하드웨어 또는 소프트웨어 구성 두 가지를 비교할 수도 있습니다. 모든 경우에 부하 테스트는 고도로 최적화된 시스템 개발을 가능하게 합니다.
블록체인 노드의 부하 테스트는 어떻게 수행하는가?
우리는 일반적으로 블록체인 노드에서 데이터를 추출하는 데 사용되는 통신 프로토콜인 RPC에 초점을 맞춥니다.
현재 RPC 성능을 측정하는 가장 일반적인 방법은 부하 테스트가 아닌 지연 시간 테스트입니다. 즉, RPC 노드에 요청을 보내고 응답을 받는 데 걸리는 시간을 측정합니다. 다양한 RPC 제공업체의 지연 시간 테스트 결과는 여러 웹사이트에서 확인할 수 있습니다. 안타깝게도 이러한 테스트는 시스템이 부하를 받을 때의 행동을 거의 보여주지 않기 때문에 노드 성능에 대한 제한된 시야만 제공합니다.
블록체인에서는 작업 부하가 두 가지 중요한 방식으로 달라질 수 있습니다. 전통적인 변수는 크기입니다. 초당 10,000건의 요청은 초당 100건의 요청보다 시스템에 더 큰 부담을 줍니다. 또 다른 부하 변수는 RPC 메서드입니다. 블록체인 노드에서 추출하는 데이터 유형마다 다른 RPC 메서드가 존재합니다. 예를 들어 블록, 트랜잭션, 로그, 트레이스 등입니다. 각 RPC 메서드는 시스템에 서로 다른 유형의 부하를 가합니다. 일부 RPC 메서드는 스토리지 I/O에 의해 제한되는 반면, 다른 것들은 CPU에 의해 제한됩니다.
Flood란 무엇인가?
우리는 이러한 원칙을 바탕으로 Flood라는 부하 테스트 도구를 개발했습니다. 지연 시간 테스트와 달리, Flood는 부하 테스트를 통해 RPC 엔드포인트의 성능 특성을 이전에 없던 수준으로 조망하며, 테스트 범위를 관련된 모든 RPC 메서드로 확장합니다.

Flood는 세 가지 기본 구성 요소로 이루어져 있습니다:
-
호출 생성 엔진: Flood는 다양한 블록체인 작업 부하에 유사한 분포를 무작위 샘플링하여 매개변수화된 대규모 RPC 호출 집합을 생성합니다. Flood는 Paradigm Data Portal 데이터셋을 활용해 블록체인 역사 전체를 완전히 커버합니다.
-
부하 테스트 엔진: Flood는 Go로 작성된 고성능 부하 테스트 도구 Vegeta를 조정하여 생성된 호출들을 이용해 RPC 엔드포인트에 대한 부하 테스트를 수행합니다.
-
보고 엔진: Flood는 테스트 실행 후 다양한 차트, 표, 보고서를 통해 결과를 요약합니다. 이러한 요약은 스크립트와 데이터에 쉽게 통합될 수 있습니다.
각 구성 요소는 고도로 설정 가능하여 Flood가 광범위한 테스트 시나리오와 환경을 다룰 수 있습니다.
Flood는 무엇을 할 수 있는가?
Flood의 정상 작동 과정에서 사용자는 테스트할 RPC 메서드와 RPC 엔드포인트 목록을 지정합니다. 예를 들어, Reth의 두 버전에서 eth_getLogs의 성능을 테스트하고 싶을 수 있습니다. Flood는 이러한 RPC 엔드포인트를 테스트하기 위해 다양한 제어 부하를 실행합니다. 예를 들어, 초당 1,000건, 2,000건, 4,000건, 8,000건의 요청 속도로 eth_getLogs를 실행할 수 있습니다. 그 후 Flood는 성능 지표가 부하에 따라 어떻게 변화하는지 요약한 표와 차트를 표시합니다. 출력 결과는 다음과 같습니다:

특정 방식으로 부하 하에서 성능 지표가 저하되는 양상은 시스템 병목과 궁극적인 성능 용량을 밝혀내는 풍부한 통찰을 제공합니다.
또한 Flood는 다양한 고급 사용자 유형을 위해 고급 기능도 제공합니다:
-
Flood는 "스트레스 테스트"(시간이 지남에 따라 점진적으로 부하를 증가), "피크 테스트"(대량의 갑작스러운 부하 후 소량의 부하), "소킹 테스트"(장시간 지속되는 부하) 등 다양한 부하 테스트 계획을 사용할 수 있습니다.
-
Flood는 네트워크 병목으로 인한 잡음을 제거하기 위해 각 RPC 노드에서 네이티브 모드로 부하 테스트를 조정할 수 있습니다.
-
Flood는 각 RPC 엔드포인트가 동일한 응답을 반환하는지 확인하는 "등가성(equality)" 테스트 모드를 갖추고 있습니다.
왜 Flood를 개발했는가?
Paradigm에서는 성능을 주요 목표 중 하나로 삼은 새로운 노드 구현체인 Reth를 개발하고 있습니다. 우리는 Reth의 성능 특성을 상세히 설명하기 위해 Flood를 개발했습니다. 우리는 이미 Flood를 사용하여 다양한 작업 부하와 시스템 구성 하에서 발생하는 여러 Reth 성능 병목을 발견하고 이를 해결했습니다. 이를 통해 코드베이스의 변경 사항이 최종 시스템 성능에 어떻게 영향을 미치는지를 명확히 볼 수 있는 긴밀한 피드백 루프를 만들었습니다.
Reth 외에도, 우리는 Flood가 RPC 노드와 관련된 많은 미해결 질문들을 해결하는 데 도움이 될 수 있다고 생각합니다:
-
노드를 운영할 때 어떤 하드웨어 사양이 가장 중요한가? 스토리지 I/O가 RAM 속도, RAM 용량, CPU 속도에 비해 얼마나 중요한가? RAID는 가치가 있는가?
-
제3자 RPC 제공업체마다 각 RPC 메서드의 실제 속도 제한(레이트 리밋)은 얼마인가?
-
어떤 노드 클라이언트가 다양한 유형의 작업 부하에 대해 최고의 성능을 제공하는가?
결론
본문에서는 블록체인 노드의 성능 특성에 대해 이전에 없던 시야를 제공하는 부하 테스트 도구인 Flood를 소개했습니다. Flood는 처음에 Reth의 개발 최적화를 위해 구축되었지만, 우리는 이것이 다른 유형의 고성능 암호화폐 인프라 개발에도 중요한 도구가 될 것이라고 생각합니다. 다른 사람들이 Flood를 활용해 자신만의 고성능이고 신뢰할 수 있는 시스템을 구축하는 방식을 기대하고 있습니다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














