네트워크 노드 확장
(섹션: 생태계 및 네트워크)
1) 노드 역할 및 트래픽 루프
검증/생산 (컨센서스/블록/롤업 시퀀서): 마무리의 중요한 경로.
리더/인덱서 (읽기 전용/API/아카이브): 응용 프로그램 및 분석 요청을 제공합니다.
릴레이/브리지 (크로스 도메인): 도메인간에 메시지/자산 전송.
게이트웨이/에지 (ingress/gRPC/WebSocket/QUIC): 클라이언트 요청, 요율 제한, 캐시 수신.
Tele metric/Observacity: 메트릭/로그/추적, 합성 샘플 수집.
각 역할에는 자체 SLO, 오류 예산 및 스케일링 정책이 있습니다.
2) 스케일링 모델
2. 1 스케일 업
CPU/RAM/SSD/NIC를 증가시킵니다. 정점에 빠르지 만 철분으로 제한되며 트래픽 단위당 비용을 증가시킬 수 있습니다.
2. 2 스케일 아웃
밸런서/대기열 뒤에 복제본을 추가합니다. demotence, 끈적 끈적한 정책, 쿼럼 및 일관된 캐시 (또는 장애) 가 필요합니다.
2. 3 기능적 다양성
직무 분리: 합의 노드는 격리되어 있습니다. RPC/API - 별도로; 인덱서/아카이브-별도로; 다리/릴레이 어-별도로.
2. 4 지오 스케일
지역 클러스터 (EU/US/AP) + anycast/GeoDNA/Latency Aware LB; 마무리/대기 시간 및 로컬 캐시로 복제
2. 5 샤딩/파티션
대기열/인덱서 및 열 저장소에 대한 키 (체인, 샤드, 주제) 로 분리합니다.
3) 요청 경로: 밸런싱, 캐싱, QoS
L4/L7 밸런싱: 체력 검사, 토큰/추적 ID, 회로 차단기, 특이 치 배출.
캐시:- 에지 (RPC를 자주 읽는 경우 짧은 TTL);
- 프로세서 내부 (인덱스 읽기, 쓰기);
- 음의 캐시 (발견되지 않음).
- QoS 클래스: P0 (최종/브리지/결제), P1 (제품), P2 (벌크/아카이브).
- 배압: 토큰/크레딧, 동의 요청 제한, DLQ 대기열.
- 입학: 사전 필터 (방법, 한계, 지리/제재), "고가의" 요청의 조기 거부.
4) 상태 관리: 스냅 샷, 가지 치기, 보관
전체/가지 치기: RPC의 가지 치기 노드; 아카이브-별도의 풀에서 소급 쿼리.
스냅 샷/빠른 동기화: 일반 스냅 샷, 새로운 복제품의 빠른 부트 스트랩.
핫/웜/콜드 스토리지: NVMe의 핫 스테이트, 히스토리 블록-인덱스가있는 S3/오브젝트.
가바 지 수집/압축: 봉우리가 아닌 예정된 창문.
DA/배치 버퍼 (L2/브리지 용): 증명 영수증이있는 배송 보증 및 청소 기간.
5) 대기열 및 스트리밍
Ingress: Kafka/Pulsar/NATS 파티션-key = 'chainID' shard 'topic'.
소비자 그룹: 당사자 별 스케일링, dempotent 핸들러 (아웃 박스/받은 편지함).
DLQ 및 retrai: 지수 백오프, 독 메시지 검역.
합의 된 순서: 결정론을위한 당사자 내에서.
6) 전송 및 네트워크 최적화
QUIC/TH/2: 멀티플렉싱, 헤드 오브 라인 보정.
계정 조정: BBR/CUBIC, 증가 된 버퍼, 'SO _ REUSEPORT'.
커널/eBPF: 가속 네트워크 스택, 밸런싱을위한 일관된 해시.
NIC 오프로드 (NIC 오프로드)
gRPC: 유지/핑 매개 변수, 최대 기내 제약.
웹 소켓: 연결 풀, ping/pong, 클라이언트 당 구독 제한.
7) 신뢰성: 정족수, 열화, 혼돈 테스트
쿼럼 읽기/쓰기 (해당되는 경우), 리더 펜싱.
분해 모드: 재확인, "최종", 무거운 방법을 끄십시오.
혼돈 엔지니어링: 지연/손실, 재시작, 디스크/네트워크 오류, "고속 재구성" 시나리오.
8) SLI/SLO 및 대상
SLI (예):- 메소드 클래스 별 p95 RPC 대기 시간;
- 성공률; 큐 래그 p95;
- Time-to-finality p95 (레일/브리지의 경우);
- 스냅 샷 부트 스트랩 시간;
- 국가 성장/일; CPU/IO 채도.
- P0 RPC p95 λ400 ms; 가용성은 99 이상입니다. 95%;
- 최종 릴레이 p95 λ3 분;
- Queue-lag P0 p95
- 새로운 리더 부트 스트랩 (빠른 동기화 + 스냅 샷);
- 2 시간 창에서 예산 연소 오류
9) 관찰 및 경고
지표: 대기 시간 (히스토그램), RPS, 오류 (클래스 별), 대기열 지연, GC/heap, 디스크-io, p2p 피어, 가십 비율.
추적: 가장자리를 통한 엔드-투-엔드 'trace _ id' → RPC → indeksator → khraneniye → 대부분.
로그: '요청 _ id' 에 의한 구조화 된 상관 관계.
경고: 연소 속도 P0, 대기열 지연, 임계 값 미만의 피어 카운트, reorg-spikes, 스냅 샷 드리프트.
10) 자동 스케일 패턴
HPA/VPA (K8s): CPU/대기 시간/RPS/큐 지연; 장식의 길이에 따른 KEDA.
스텝 스케일링: 주간 피크 프로파일; ML/계절성에 의한 예측.
예비 예비: 트래픽이없는 워밍업 복제품 (우아한 프로모션).
안전한 출시: 카나리아 + 특이 치 배출 + SLO-
11) 안전과 격리
mSL/키 피닝; 방법 당 RBAC/ABAC; org/테넌트 당 QoS 제한.
속도 제한 및 DoS 쉴드: 토큰, 공용 RPC 용 캡처, 이상 감지.
비밀 관리: 수명이 짧은 토큰, 교체.
샌드 박스: 아카이브/공공 고객을위한 별도의 Poules.
12) 참조 구성
12. 1 K8: RPC 게이트웨이 (스케일 아웃)
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: rpc-gateway }
spec:
replicas: 6 strategy: { type: RollingUpdate, rollingUpdate: { maxSurge: 2, maxUnavailable: 0 } }
selector: { matchLabels: { app: rpc-gateway } }
template:
metadata: { labels: { app: rpc-gateway, qos: P0 } }
spec:
containers:
- name: gateway image: org/rpc-gateway:2. 4. 1 ports: [{ containerPort: 443 }]
resources:
requests: { cpu: "1", memory: "2Gi" }
limits: { cpu: "4", memory: "6Gi" }
env:
- { name: MAX_CONCURRENCY, value: "400" }
- { name: CACHE_TTL_MS, value: "200" }
readinessProbe: { httpGet: { path: /healthz, port: 443 }, initialDelaySeconds: 5, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez, port: 443 }, initialDelaySeconds: 10, periodSeconds: 10 }
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: rpc-gateway-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: rpc-gateway }
minReplicas: 6 maxReplicas: 36 metrics:
- type: Pods pods:
metric:
name: request_latency_p95_ms target:
type: AverageValue averageValue: 350m # 350 мс
12. 2 특사: 우선 순위 및 특이 치 배출
yaml clusters:
- name: readers type: EDS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 2s base_ejection_time: 30s circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 20000 max_pending_requests: 5000 max_requests: 20000 health_checks:
- timeout: 1s interval: 3s http_health_check: { path: /healthz }
route_config:
request_headers_to_add:
- header: { key: x-trace-id, value: "%REQ(X-TRACE-ID)%" }
weighted_clusters:
clusters:
- name: readers weight: 100
12. 3 카프카: 도메인 별 분할
yaml topic: "rpc. events"
partitions: 48 replicationFactor: 3 config:
retention. ms: 604800000 # 7 days max. message. bytes: 1048576 min. insync. replicas: 2 cleanup. policy: delete
12. 4 QoS 및 한계 정책
yaml qos:
P0:
rps_limit_per_org: 1500 queue_lag_p95_ms: 2000 retry: { attempts: 3, backoff_ms: [100,400,800] }
P1:
rps_limit_per_org: 800
P2:
rps_limit_per_org: 200 admissions:
denylist_methods: ["eth_getLogs(>10k blocks)"]
heavy_query_guard: { max_range_blocks: 5000, require_token: true }
13) 데이터 스키마 및 샘플 쿼리
13. 1 노드 메트릭 (디렉토리)
sql
CREATE TABLE node_metrics (
ts TIMESTAMPTZ,
node_id TEXT, role TEXT, region TEXT,
rps INT, latency_p95_ms INT, errors_5xx INT,
queue_lag_ms INT, cpu NUMERIC, mem NUMERIC, io_wait NUMERIC
);
13. 2 SLO 제어 및 연소율
sql
SELECT date_trunc('hour', ts) AS h, role,
AVG(latency_p95_ms) AS p95,
100. 0 SUM(CASE WHEN latency_p95_ms <= 400 THEN 1 ELSE 0 END)/COUNT() AS slo_hit_pct
FROM node_metrics
WHERE ts >= now() - INTERVAL '24 hours'
GROUP BY 1,2;
13. 3 로드 계획
sql
SELECT region, role,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY rps) AS rps_p95,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY queue_lag_ms) AS lag_p95
FROM node_metrics
WHERE ts >= now() - INTERVAL '7 days'
GROUP BY region, role;
14) 운영 규정
매일: SLO 보고서, 케이프시 델타, 스냅 샷 상태, 동료 건강.
주간: 한계/QoS, DR 테스트 (스냅 샷에서 부트 스트랩) 개정, 가지 치기 및 압축기 확인.
출시 전: 카나리아 출시, SLO 게이트 및 관찰 된 메트릭, 롤백 계획.
비용 회계: 1k 요청 당 CTS, TPS _ per _ $ (달러당 효율성).
15) 플레이 북 사건
A. RPC p95 대기 시간 폭발
1. P2 스로틀 및 더 낮은 샘플링 사용; 2) 게이트웨이/리더 복제본 증가;
2. 일부 트래픽을 캐시로만 전송하십시오. 4) 필요한 경우 핫 메소드 분석 (거부 규칙) 을 엽니 다.
B. Queue-lag on 버스> SLO
1. Autoscale 소비자 (KEDA), 2) 재분배 당사자, 3) 일시적으로 대량 작업을 중단합니다.
유효성 검사기/릴레이에서 C. Peer-count 드롭
1. p2p 모듈 다시 시작, 2) 좌석 변경, 3) 네트워크 ACL/NAT, 4) 스위치 보호.
D. Long bootstrap 새로운 복제본
1. 새로운 스냅 샷, 2) IO 대역폭 증가, 3) 아카이브 색인을 일시적으로 제거합니다.
E. Spike reorg/bridge 지연
1. 확장 K- 승인/창, 2) "최종 전용" 모드를 활성화하고 3) 소비자에게 알립니다.
16) 구현 점검표
1. 사이트 역할 및 SLO/오류 예산을 정의하십시오.
2. 컨센서스/RPC/인덱서/아카이브/브리지/엣지.
3. DLQ로 밸런싱, QoS, 역압 및 큐를 사용하십시오.
4. 스냅 샷/빠른 동기화, 가지 치기 및 계층 화를 설정하십시오.
5. 메트릭/트레일/로그, 대시 보드 및 번 레이트 경고를 연결하십시오.
6. 자동 스케일링 (HPA/KEDA) 및 카나리아 릴리스를 설정하십시오.
7. 혼돈 테스트 및 정기적 인 DR 연습을 수행하십시오.
8. 운영 규정 및 비용 관리를 소개합니다.
17) 용어집
역압-과부하 중에 입력 흐름을 제어하기위한 메커니즘.
DLQ- 문제 메시지에 대한 "데드 큐".
가지 치기-현재 창 밖에서 과거 상태를 삭제하십시오.
패스트 싱크/스냅 샷은 새로운 복제본을 동기화하는 가속화 된 방법입니다.
이상 방출-풀에서 열화 된 인스턴스를 제외합니다.
연소율-SLO에 대한 오류 예산 소비율.
결론: 네트워크 노드 스케일링은 "복제본 추가" 뿐만 아니라 아키텍처, QoS, 상태 관리 및 운영 엄격한 시스템 분야입니다. 이 프레임 워크 (역할 분리, 대기열, 캐시, 자동 스케일, 관찰 및 명확한 SLO) 를 따라 생태계는 트래픽 단위당 예측 가능한 성능, 최고 복원력 및 제어 가능한 비용을 얻습니다.