아카이브 스토어 및 서비스 실행하기
The Archival Store and Service are part of the Sui data access infrastructure. The stack provides long-term storage and low-latency point lookups of historical onchain data through a gRPC service backed by Google Cloud Bigtable. This stack is optimized for operators and data providers who need to serve historical transactions, checkpoints, objects, and epoch data beyond the retention horizon of full nodes or indexer databases.
The Archival Service exposes the same gRPC LedgerService API as a Sui full node, so existing gRPC clients can query it by changing the endpoint. The service is powered by an indexer (sui-kvstore-alt) that reads checkpoints from the remote checkpoint store and writes processed data to Bigtable, and a gRPC server (sui-kv-rpc) that reads from Bigtable to serve client requests.
스택에 대한 자세한 내용은 아카이브 스토어 및 서비스를 참조하라.
아키텍처 개요
이 스택은 세 가지 구성 요소로 이루어진다:
- Google Cloud Bigtable: 11개 테이블에 걸쳐 모든 과거 chain 데이터를 저장하는 백엔드 스토어이다.
sui-kvstore-alt(인덱서): remote 체크포인트 store에서 체크포인트를 읽고 처리된 데이터를 Bigtable에 기록한다.sui-kv-rpc(아카이브 서비스): Bigtable에서 데이터를 읽고 클라이언트에LedgerServiceAPI를 노출하는 gRPC 서버이다.
- Prerequisites
- Bigtable API가 활성화된 Google Cloud Platform(GCP) 프로젝트.
- 두 개의 GCP 서비스 계정:
- 인덱서용 읽기/쓰기 계정.
roles/bigtable.user가 필요하다(인덱서는 파이프라인 데이터를 기록하고 자체 워터마크도 읽는다). - gRPC 서비스용 읽기 전용 계정.
roles/bigtable.reader가 필요하다.
- 인덱서용 읽기/쓰기 계정.
- 대상 네트워크용 Sui 체크포인트 bucket 접근:
- Mainnet fallback endpoint: 최근 30일 전용
https://checkpoints.mainnet.sui.io. - Mainnet full-history backfill bucket:
--remote-store-gcs mysten-mainnet-checkpoints-use4를 통한gs://mysten-mainnet-checkpoints-use4. 이 bucket은 Requester Pays가 활성화되어 있다. - Testnet endpoint: 전체 이력을 제공하는
https://checkpoints.testnet.sui.io.
- Mainnet fallback endpoint: 최근 30일 전용
- gRPC가 활성화된 풀 노드. 설정 방법은 Sui 풀 노드 구성을 참조하라. 초기 백필 이후에는 더 낮은 지연 시간을 위해 bucket을 폴링하는 대신 풀 노드에서 체크포인트를 스트리밍할 수 있다. Steady-state operation을 참조하라.
인증
인덱서와 gRPC 서비스는 모두 Application Default Credentials (ADC)를 사용해 GCP에 인증한다. 동일한 자격 증명을 Bigtable 접근과 Google Cloud 스토리지(GCS) 체크포인트 bucket 읽기에 함께 사용한다.
Google Kubernetes Engine(GKE)에서: Workload Identity를 사용해 pod의 Kubernetes 서비스 계정을 GCP 서비스 계정에 바인딩하라. 키나 환경 변수는 필요 없으며, SDK가 metadata server에서 토큰을 자동으로 가져온다.
GKE 외부에서: GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 JSON 키 파일 경로로 설정하라.
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
공개 HTTPS checkpoint endpoint는 최근 30일 checkpoint만 보존한다. Mainnet에서 30일보다 오래된 backfill에는 --remote-store-gcs mysten-mainnet-checkpoints-use4를 사용한다. 이 bucket은 Requester Pays가 활성화되어 있다. 유효한 credential과 billing project로 --remote-store-gcs를 사용하면 throttling을 피할 수 있으며, 전체 이력 backfill에 지원되는 경로이다.
Bigtable 설정
Bigtable instance 생성
GCP 프로젝트에 Bigtable instance를 생성하라. 자세한 절차는 Bigtable documentation을 참조하라.
주요 결정 사항은 다음과 같다:
| 설정 | 권장 사항 |
|---|---|
| 스토리지 유형 | SSD가 필요하다. HDD는 테스트되지 않았으며 권장하지 않는다. |
| 노드 수 | Mysten Labs는 현재 Mainnet에서 5개, Testnet에서 2개 노드를 시작점으로 운영한다. 백필에는 15개 노드까지 scale up하라. 정상 상태에서 필요한 노드 수는 read traffic에 따라 달라진다. autoscaling을 활성화하거나 CPU utilization을 모니터링하면서 수동으로 scale하라. |
복제: 단일 클러스터 instance를 기본값으로 권장한다. 여러 리전에 read traffic을 제공해야 한다면 다른 zone에 클러스터를 추가할 수 있다. Bigtable은 클러스터 간에 데이터를 자동으로 복제하므로, 각 리전마다 별도의 indexing stack을 운영하지 않아도 추가 리전에서 저지연 읽기를 제공할 수 있다. 대신 스토리지 비용은 클러스터 수에 비례해 증가한다(데이터가 각 클러스터에 전체 복제되기 때문이다). 단일 클러스터 instance에는 app profile에서 single-클러스터 routing을 사용하고, multi-클러스터 routing이 필요한 경우에는 Bigtable이 가장 가까운 클러스터로 요청을 라우팅하도록 설정하라.
테이블 생성
다음 11개 테이블을 생성하라. 각 테이블은 sui라는 단일 column family를 가지며, 최신 cell version만 유지하는 GC policy를 사용한다:
| 테이블 | 설명 |
|---|---|
checkpoints | 체크포인트 요약, 서명, 내용 |
checkpoints_by_digest | digest 기준 체크포인트 조회 |
transactions | 트랜잭션 데이터, effects, 이벤트, balance changes |
objects | 객체 ID와 version을 키로 하는 객체 데이터 |
epochs | system state를 포함한 에포크 시작 및 종료 데이터 |
watermark_alt | 내부 인덱서 워터마크 추적 |
protocol_configs | 에포크별 프로토콜 구성 |
packages | 원본 ID와 version을 키로 하는 패키지 메타데이터 |
packages_by_id | ID 기준 패키지 조회 |
packages_by_checkpoint | 체크포인트 기준 패키지 조회 |
system_packages | system 패키지 데이터 |
cbt CLI 사용 예시는 다음과 같다:
for table in checkpoints checkpoints_by_digest transactions objects epochs \
watermark_alt protocol_configs packages packages_by_id \
packages_by_checkpoint system_packages; do
cbt -project <GCP_PROJECT> -instance <INSTANCE_ID> createtable "$table"
cbt -project <GCP_PROJECT> -instance <INSTANCE_ID> createfamily "$table" sui
cbt -project <GCP_PROJECT> -instance <INSTANCE_ID> setgcpolicy "$table" sui maxversions=1
done
스토리지 요구 사항
아래 스토리지 footprint 추정치는 2026년 3월 초 기준 네트워크를 바탕으로 한 값이다. 이 수치는 방향성을 보여 주는 참고치이며, 네트워크 활동이 증가하면 함께 커진다.
Mainnet(Genesis부터 전체 이력):
| 테이블 | 크기 |
|---|---|
transactions | 8.1 TB |
objects | 4.4 TB |
checkpoints | 832 GB |
checkpoints_by_digest | 15 GB |
watermark_alt | 1.5 GB |
epochs | 83 MB |
packages | TBD (아직 백필되지 않음) |
packages_by_id | TBD (아직 백필되지 않음) |
packages_by_checkpoint | TBD (아직 백필되지 않음) |
protocol_configs | TBD (아직 백필되지 않음) |
system_packages | TBD (아직 백필되지 않음) |
| 합계 | ~13.3 TB |
Testnet(Genesis부터 전체 이력):
| 테이블 | 크기 |
|---|---|
transactions | 2.5 TB |
objects | 1.2 TB |
checkpoints | 514 GB |
checkpoints_by_digest | 18 GB |
watermark_alt | 12 MB |
epochs | 97 MB |
packages | TBD (아직 백필되지 않음) |
packages_by_id | TBD (아직 백필되지 않음) |
packages_by_checkpoint | TBD (아직 백필되지 않음) |
protocol_configs | TBD (아직 백필되지 않음) |
system_packages | TBD (아직 백필되지 않음) |
| 합계 | ~4.3 TB |
스토리지의 대부분은 transactions와 objects 테이블이 차지한다. packages, packages_by_id, packages_by_checkpoint, protocol_configs, system_packages 파이프라인은 새로 추가되었고 아직 백필되지 않았다. 백필이 완료되면 이들이 차지하는 스토리지 비중도 증가한다. 증가율은 네트워크 트랜잭션 volume에 따라 달라진다.
확장
Bigtable은 수동과 자동 node scaling을 모두 지원한다. Mysten Labs는 더 나은 운영 제어를 위해 CPU 모니터링과 함께 수동 scaling을 사용하지만, 운영 개입을 줄이고 싶다면 autoscaling도 합리적인 선택이다.
모니터링할 핵심 임계값은 다음과 같다:
- CPU utilization: 60%(혼합 read/write) 또는 90%(write-only)를 지속적으로 넘으면 scale up하라.
- 스토리지 utilization: 각 SSD 노드는 최대 5 TB를 지원하지만, Google은 급증 상황을 수용하기 위해 70%(node당 3.5 TB) 미만 유지를 권장한다. 클러스터가 compute와 스토리지 요구 사항을 모두 충족할 만큼 충분한 노드를 갖추도록 하라.
백업 정책
재해 복구를 위해 자동 백업을 구성하라. 일일 백업과 7일 보존 기간이 합리적인 기본값이다. 설정 방법은 Bigtable backup documentation을 참조하라.
인덱서 설정
인덱서(sui-kvstore-alt)는 remote 체크포인트 store에서 체크포인트를 읽고 12개의 병렬 파이프라인을 통해 데이터를 Bigtable에 기록한다.
하드웨어 요구 사항
정상 상태(네트워크 tip 기준):
- CPU: instance당 1 core(보수적 수치이며, 관측된 사용량은 약 0.1-0.2 cores이다)
- Memory: instance당 1 GB(보수적 수치이며, 관측된 사용량은 약 50 MB이다)
백필:
- CPU: 16 cores
- Memory: 32 GB
sui-kvstore-alt 실행
sui-kvstore-alt \
--config <CONFIG_FILE> \
--chain <CHAIN> \
<INSTANCE_ID> \
--remote-store-gcs <REMOTE_STORE_GCS_BUCKET>
| CLI parameter | 필수 | 설명 |
|---|---|---|
--config | 아니오 | TOML 구성 파일 경로이다. 생략하면 프레임워크 기본값을 사용한다. Indexer 구성을 참조하라. |
<INSTANCE_ID> | 예 | Bigtable instance ID이다. |
--chain | 예 | chain 식별자이다. mainnet, testnet, unknown 중 하나이다. |
--remote-store-gcs | 소스 1개 필수 | 체크포인트를 가져올 GCS bucket 이름이다(백필 권장). 다른 소스 플래그와 상호 배타적이다. |
--remote-store-url | 소스 1개 필수 | remote 체크포인트 store의 HTTPS URL이다(--remote-store-gcs의 대안). 다른 소스 플래그와 상호 배타적이다. |
--rpc-api-url | 소스 1개 필수 | 체크포인트를 가져올 풀 노드 gRPC URL이다(정상 상태용). 다른 소스 플래그와 상호 배타적이다. |
--streaming-url | 아니오 | live 체크포인트 스트리밍용 풀 노드 gRPC URL이다. 네트워크 tip에서 가장 낮은 지연 시간을 위해 --rpc-api-url과 함께 사용한다. |
--bigtable-project | 아니오 | GCP 프로젝트 ID이다. 기본값은 서비스 계정 자격 증명과 연결된 프로젝트이다. |
--app-profile-id | 아니오 | 라우팅용 Bigtable app profile ID이다. |
--write-legacy-data | 아니오 |