대기 시간이 짧은 아키텍처
낮은 대기 시간 아키텍처
낮은 지연은 "빠른 평균" 일뿐만 아니라 실제 하중에서 안정적인 꼬리 (p95/p99) 입니다. 이에 대한 경로는 지연 예산, 대기열/재 트레이 규칙, 데이터 및 캐시 근접, 올바른 프로토콜/연결 및 엄격한 이용 (제한, 관찰 가능성, 저하) 입니다.
목표 및 예산 지연
1. SLO를 정의하십시오: "p95 3%».
2. 예산 수집: 클라이언트 → edge → region → 서비스 → stor → 답변.
3. 한계를 분배하십시오 (예: 총 SLO 120ms p95)
클라이언트 에지: 15ms
가장자리 지역: 15ms
게이트웨이/L7: 10 ms
비즈니스 서비스: 40ms
저장/캐시: 25ms
주식/지터: 15ms
측정 및 꼬리
측정 p50/p90/p95/p99, 모든 홉.
지역, 방법, 클라이언트 버전, 네트워크 유형 (모바일/광대역), 페이로드 크기 등 레이블별로 분류됩니다.
대기열 시간과 실행 시간을 구별합니다 (Little's Law: L = λ· W 참조).
꼬리에 민감한 기술: 헤지 요청 (드물게 보호), 계단식 배송 금지.
네트워크 및 프로토콜
QUIC/HT3/3: 모바일/로밍시 손실이 적고 회선없이 멀티플렉싱합니다.
TLS 1. 3 및 0-RTT (안전한 dempotent 쿼리 전용).
DNA: 동적 경로의 경우 짧은 TTL, POP의 경우 Anycast.
져: 정당한 경우 추가 'Nagle '/' Delayed ACK' 를 비활성화하는 '\_ NODELAY '(신중함); 살아 있고 빠른 연결 복구.
gRPC/TH/2: 멀티 플렉스, 흐름 제어 및 창 설정; 작은 페이로드에서 과도한 압축을 피하십시오.
연결 및 수영장
도메인/대상별로 별도의 풀 ("느린 이웃" 이 슬롯을 제거하지 않도록).
워밍업/유지: 꾸준한 따뜻한 연결을 유지하십시오.
연결 통합 (TH/2/3) BE는 재사용합니다.
타임 아웃: '연결', 'SL 핸드 셰이크', '요청', '유휴'. 다른 홉에서 다른 값.
데이터 및 계산 지역
가장자리/지역: 판독 값과 쉬운 계산을 사용자에게 더 가깝게 제공하십시오 (가장자리 노드 및 지역 논리 참조).
읽기 로컬/쓰기 글로벌: 읽을 수있는 복제본, 글로벌 쓰기 진실.
캐시 계층 구조: CDNA/에지 캐시 → 지역 KV/Redis → 서비스 캐시 → 로컬 인-프록.
온난화: 릴리스/스케일링 중에 핫 키를로드합니다.
저 위험 데이터에 대한 부동산 정보.
리포지토리 및 인덱스
액세스 체계 O (1 )/O (logN) 를 선택하십시오. 빈번한 쿼리 하에서 좁은 색인을 유지하십시오.
핫 키: '해시 (id)' 로 샤드하거나 균일성을 위해 '소금' 을 추가하십시오.
수십 번의 단일 통화 대신 출구에서 데이터베이스/캐시 (합리적인 크기) 로 배치합니다.
OLTP의 경우 가장 짧은 트랜잭션; 직렬 잠금 장치 대신 읽기 커밋/스냅 샷.
경쟁 및 비 차단
먼저 대기열을 제거한 다음 CPU를 최적화하십시오.
Acinc I/O 및 비 차단 드라이버; 적절한 경우 잠금 해제 구조.
글로벌 뮤텍스를 피하십시오. 세분화 된 잠금 장치, CAS/verioning.
스레드 풀: 컨텍스트 스위치를 실행하지 않도록 크기를 수정하십시오.
NUMA 인식: 스레드를 소켓, 로컬 할당기에 바인딩합니다.
JVM/GC 및 런타임 튜닝 (해당되는 경우)
코드 생성 및 할당: 더 적은 부작용 → 더 적은 GC 일시 정지.
목표 일시 정지가있는 현대 저수지 (G1/ZGC/Shenandoah); 탈출 및 버퍼 대여.
시작 종속 기능을위한 클래스/데이터 공유, JIT 온난화, AOT/네이티브 이미지.
총 지연 예산에 GC 일시 정지 히스토그램 포함.
대기열, 역압, 과부하 방지
큐 크기 = 작음: 긴 줄은 "아름다운 p50" 을 제공하고 p99를 죽입니다.
명시 적 역압: 저장보다 "느린" 답변.
적응 형 동시성: 오류/대기 시간이 증가함에 따라 병렬 처리를 줄입니다 (VEGAS/그라디언트 알고리즘, AIMD).
회로 차단기: 업스트림 저하 중 빠른 고장, 수영장 및 자원을위한 격벽 (객실 회사).
속도 제한: 슬라이딩 창/토큰, 우선 순위 (사용자 계층/임계 경로).
Retrai, 헤징 및 demmpotency
지터 및 최대 시도와 함께 일시적인 오류에 대해서만 Retrai.
반복을 위해서는 이데올로기 작업과 'Idempotency-Key' 가 필요합니다.
헤지 요청: 임계 값 (예: p95 + 10 ms) 뒤에 두 배를 보내고 항상 초과분을 취소하십시오.
조정없이 각 계층 내부를 철회하지 마십시오. 폭풍을 피하십시오.
캐싱 및 워밍업
핫 경로는 일반적인로드 (in-proc/LRU) 에서 네트워크가 없어야합니다.
누락 된 키를 망치지 않도록 10-60 초의 음수 캐시.
릴리스/스케일링 중 대량 예열: 핫 키 목록, 미리 읽기, 배경 새로 고침.
분해 및 폴벡
Graceful Degradation: 대기 시간이 증가하면 (상세하지 않은 응답, 농축 없음) 사소한 기능을 줄입니다.
소프트 타임 아웃: 5xx 대신 기본 응답/캐시를 반환합니다.
실패/실패-각 통화에 대해 명시 적으로 문서화됩니다.
관찰 및 프로파일 링
분산 추적: 각 홉, 테일 기반 샘플링에 걸쳐 있습니다.
RED/USE
매일 Top-N "느린" 노선.
저 오버 헤드 제품 (eBPF/async-profiler/Flight Recorder) 의 프로파일 러 (alloc/cpu/lock).
다른 ASN/네트워크 및 모바일 채널의 합성.
성능 테스트
실제 페이로드 및 변동성으로 Latency-SLO 테스트 (p95/p99).
혼돈 시나리오: DNA 저하, 패킷 손실 증가, TLS 지연, 느린 저장.
콜드 스타트/스케일 업: 캐시가 비어있을 때 릴리스 후 첫 분을 측정하십시오.
스크립트에 따라 별도의로드 풀을 사용하십시오 (읽기/쓰기 테스트를 방해하지 마십시오).
미니 템플릿
시간 초과/거부 정책 (의사)
yaml timeouts:
connect: 100ms tls_handshake: 150ms request_p95_budget: 80ms retries:
max_attempts: 2 backoff: exp_jitter(10ms..60ms)
retry_on: [CONNECT_ERROR, TIMEOUT, 502, 503, 504]
hedging:
enabled: true threshold: p95 + 10ms cancel_extra_on_first_success: true circuit_breaker:
error_rate_threshold: 5%
p95_threshold_increase: 30%
half_open_after: 10s
수영장과 격벽
yaml pools:
checkout:
max_conns: 256 per_host: 64 queue: 8 # small analytics queue:
max_conns: 64 queue: 4
열화에 대한 응답
json
{
"status": "ok",
"profile": { "id": "u123", "name": "…"},
"recommendations": "degraded, "//disabled the heavy part
"served_from": "edge-cache",
"trace_id": "…"
}
응용 프로그램 사례
iGaming/finance: 지불 승인 <200 ms p95, 제한/균형-지역 예측, 기록에서 읽기-버전에 대한 dempotent.
마케팅/권장 사항: <100 ms p95, 가장자리에있는 기능 플래그 캐시, 모델-예비 점수 + 뜨거운 길에 빠른 규칙.
모바일 클라이언트: TP/3, 공격적인 재사용 연결, 페이로드 감소 (프로토), 보안 시간 초과 및 오프라인 캐시.
반 패턴
노동자 앞의 긴 줄: "아름다운 평균" 과 p99를 죽였습니다.
캐스케이드는 조정없이 각 층에서 배상합니다.
장애가없고 예열되지 않은 세계적인 "메가 캐시".
퍼지 타임 아웃 ("기본적으로" 모든 곳) -제어되지 않은 꼬리.
모든 트래픽에 대한 공통 연결 풀은 회선 차단입니다.
고마운 효과로 가장자리에 무거운 논리.
장애인 꼬리 원격 측정-" 볼 수 없습니다 "p99.
생산 체크리스트
- 홉 지연 예산과 타임 아웃이 있습니다.
- 사용자 정의 기능/2/3, TLS 1입니다. 3, 연결 수영장 및 예열.
- 캐시 계층 구조, 핫 키 목록 및 예열 전략.
- 로컬/쓰기 글로벌 및 핫 키 샤딩 읽기.
- 명시 적 역압, 소형 대기열, 회로 차단기 및 격벽.
- 지터, demempotency, 제한된 헤징이있는 Retrai.
- 지역/버전/클라이언트 레이블로 추적; p95/p99 모니터링.
- ASN/Mobile 합성 퍼프 테스트, 콜드 스타트 및 혼돈 스크립트.
- 분해 절차 및 폴백이 문서화되어 있습니다.
- p95/p99는 실제 부하의 SLO에 해당합니다.
FAQ
p99가 평균보다 중요한 이유는 무엇입니까?
사용자는 평균이 아닌 꼬리에 직면하기 때문입니다. p99는 "정말 얼마나 아파요" 를 보여줍니다.
모든 곳에서 헤징을 포함해야합니까?
아니요, 그렇지 않습니다. 임계 경로에서 희귀 한 꼬리에 유용하며 엄격한 한계/dedempotency 하에서만 유용합니다.
콜드 스타트를 줄이는 방법?
예열 캐시/연결, 사전 컴파일/JIT 예열, 게으른 초기화 최소화, 따뜻한 수영장.
"네트워크를 무너 뜨릴 수 있습니까?"
부분적으로: TP/3, edge-POP, Anycast, 소형 페이로드, 연결 재사용 및 합리적인 타임 아웃.
합계
대기 시간이 짧은 아키텍처는 대기 시간 예산, 데이터 근접, 소규모 대기열, 예측 가능한 리트레이, 캐시 계층, 올바른 프로토콜 및 무자비한 테일 관찰 가능성과 같은 배치 및 분야 시스템입니다. 이러한 원칙에 따라 안정성과 지갑을 희생하지 않고 p95/p99를 유지합니다.