GH GambleHub

서비스 디스커버리 온라

서비스 디스커버리 리스커버

1) 왜 필요한가

분산 시스템에서는 노드가 나타나고 사라지며 고객은 서비스의 작업 인스턴스를 빠르고 안정적으로 찾아야합니다. DNA - 범용 이름 계층; 서비스 발견-건강, 무게 및 라우팅 정책을 고려하여 서비스 이름을 실제 엔드 포인트와 일치시키는 전략.

주요 목표:
  • 임시 주소 대신 안정적인 이름
  • 정확하지만 시끄러운 업데이트는 아닙니다 (신선도와 TTL의 균형)
  • 완전히 떨어지지 않는 성능 저하 (failover/health-check),
  • 클라이언트의 최소 "추측": 타임 아웃, 배상, 캐시 정책.

2) 서비스 발견 모델

2. 클라이언트 측 1 개

클라이언트 자체는 이름을 일련의 엔드 포인트 및 밸런스 (라운드 로빈, EWMA, 키별로 해시) 로 해결합니다. 소스 - DNA (A/AAAA/SRV), 서비스 레지스트리 (Consul/Eureka), 정적 목록.

장점: 더 적은 중앙 SPOF, 유연한 알고리즘.
단점: 고객 이질성, 논리 업데이트가 더 어렵습니다.

2. 2 서버 (서버 측)

클라이언트는 프론트/LB (L4/L7 게이트웨이/잉크리스) 로 이동합니다. 프록시/밸런서 측의 밸런싱 및 건강 점검.

장점: 정치의 단일 장소, 관찰 가능성.
단점: 사용 가능한 경계가 필요합니다 (N + 1, multi-AZ).

2. 3 하이브리드

DNS는 일련의 진입 점 (지역 LB) 을 제공 한 다음 L7/메시 밸런싱을 제공합니다.

3) DNA: 기본, 레코드 및 TTL

3. 1 기본 유형

A/AAAA-IPv4/IPv6 주소.
CNAME-다른 이름으로 별칭 (정점이 아님).
SRV- '_ service. _ proto. 이름 '→ 호스트/포트/가중치/우선 순위 (gRPC/TP/SIP 등).
TXT/HTTPS/HTTPS-메타 데이터/포인터 (HTT 검색 포함).
NS/SOA-영역 위임 및 속성.

3. TTL과 캐시 2 개

캐시는 OS 리졸버, 로컬 스터브 리솔버, 노드 (NodeLocal DNA/CoreDNA), 공급자, 중간 리커서 및 라이브러리 클라이언트에서 사용할 수 있습니다. 실제 신선도 = 분 (TTL, 클라이언트 정책). 네거티브 캐시 (NXwitcher) 도 'SOA를 통해 캐시됩니다. MINIMUM '/' TTL '.

권장 사항:
  • Prod-동적 레코드의 경우 TTL 30-120, 안정적인 경우 300-600.
  • 스위치 (feilover) 의 경우 "화재 중" 이 아닌 낮은 TTL을 미리 준비하십시오.
  • 라이브러리의 끈적 끈적한 캐시 (Java/Go/Node) 를 고려하십시오. 필요한 경우 런타임 내에서 리졸버의 TTL을 설정하십시오.

4) DNA 균형 및 결함 허용 정책

가중 RR-A/AAAA/SRV의 가중치.
실패-1 차/2 차 세트 (외부 건강 점검).
Geo/Latency-" 가장 가까운 "팝/지역에 대한 응답.
애니 캐스트 - 다른 POP (BGP) 의 하나의 IP; 지역 혼란에 탄력적입니다.
분할 수평선-VPC/on-prem 및 인터넷의 다른 답변.
GSLB는 건강 검진 및 정책 (대기 시간, 지리, 용량) 을 갖춘 글로벌 밸런서입니다.

5) 건강 점검 및 신선도

DNA 자체는 "멍청한" 것입니다. 백엔드의 상태를 모릅니다. 따라서:
  • 또는 외부 건강 검사기는 기록/가중치 (GSLB, Route53/Traffic-policy, external-dns + 샘플) 를 관리합니다.
  • 또는/mesh 클라이언트는 능동적 인 특이 치 배출을 수행하고 많은 엔드 포인트에서 다시 시도합니다.

6) Kubernetes: 상자에서 발견

서비스 이름: 'svc. 네임 스페이스 svc. 클러스터. 현지 '.
ClusterIP: 안정적인 가상 IP + kube-proccy/ebpf.
헤드리스 서비스 ('clusterIP: None'): 포드 (또는 하위 도메인) 에 A- 레코드, 포트 용 SRV를 제공합니다.
엔드 포인트 슬라이스: 확장 가능한 엔드 포인트 목록 (엔드 포인트 대체).
코어 DNS: 클러스터 DNA 리솔버; 플러그인은/템플릿/포워드/캐시를 다시 작성합니다. 'kube-dns' 구역.
NodeLocal DNSCache: 노드의 로컬 캐시 → 업스트림 리솔버 문제의 대기 시간과 차단이 적습니다.

예: Headless + SRV

yaml apiVersion: v1 kind: Service metadata: { name: payments, namespace: prod }
spec:
clusterIP: None selector: { app: payments }
ports:
- name: grpc port: 50051 targetPort: 50051

클라이언트는 '_ grpc. _ tcp. 지불. prod. svc. 클러스터. 로컬 '(SRV) 및 호스트/포트/웨이트를 얻습니다.

코어 DNA (ConfigMap 조각)

yaml apiVersion: v1 kind: ConfigMap metadata: { name: coredns, namespace: kube-system }
data:
Corefile:
.:53 {
errors health ready cache 30 loop forward. /etc/resolv. conf prometheus:9153 reload
}
NodeLocal DNA (아이디어):
  • 169 년에 로컬 리졸버가있는 DaemonSet. 254. 20. 10`; kubelet은이 지점을 지정합니다.
  • p99 이름 해상도를 줄이고 업스트림 DNA 플랩으로부터 보호합니다.

7) 서비스 발견

영사: 에이전트, 건강 검진, 서비스 디렉토리, DNA 인터페이스 ('.consul'), 구성 요소 KV.
Eureka/ZooKeeper/etcd: JVM/레거시 등록; 종종 사이드카/게이트웨이와 함께.
특사/Istio: EDS/xDS (엔드 포인트 디스커버리) 및 SDS (비밀); 서비스는 제어 비행기를 통해 선언됩니다.

8) DNA 보안

DNSSEC: 레코드 무결성 (영역 서명) 을 보호합니다. 공공 영역에 중요합니다.
DoT/DoH: 재귀 암호화 채널 (내부 정책, 호환성).
ACL 및 분할 수평선: 개인 영역-VPC/VPN에서만 가능합니다.
캐시 중독으로부터 보호: 포트/ID 무작위 화, 역학에 대한 짧은 TTL.
빠져 나가는 정책: 신뢰할 수있는 리졸버 만 DNS를 허용하십시오.

9) 고객 및 퇴각 행동

TTL 존중: 끝없이 캐시하지 말고 빈번한 해상도 (폭풍에서 재귀) 로 "무법" 하지 마십시오.
Happy Eyeballs (IPv4/IPv6), 여러 A/AAAA에 대한 병렬 연결은 꼬리를 줄입니다.
dempotent 요청에 대해서만 배상합니다. 지터, 예산 배상을 제한합니다.

런타임 리졸버 미세 조정:
  • 자바: '네트워크 주소. 캐시. ttl ', 네트워크 주소. 캐시. 부정적인. ttl '.
  • 이동: 'GODEBUG = netdns = go '/' cgo', 'Resolver. PreferGo ',' 다이얼 타임 아웃 '.
  • 노드: 'dns. setDefaultResultOrder ('ipv4first') ',' 조회 '모두: 참'.

10) GSLB/DNA 전환: 연습

예정된 전환 전에 300 → 60 24-48 시간에서 TTL을 낮추십시오.
검증을 위해 카나리아의 낮은 중량 끝점 세트를 보유하십시오.
A 레코드의 수동 질량 업데이트 대신 가중 + 건강 검사를 사용하십시오.
통계/가장자리 - Anycast; API 용 - Geo/Latency + 빠른 L7-feiler.

11) 이름에 대한 관찰 및 SLO

메트릭:
  • DNA 쿼리, 캐시 적중 비율, 유형별 오류 (SERVFAIL/NXwitcher) 의 속도/대기 시간.
  • 오래된 응답이있는 요청의 비율 (오래된 캐시를 사용하는 경우).
  • 레코드 변경 (비즈니스 SLI) 에서 사용자 운영 성공
  • 응용 프로그램에서 p95/p99 해결 시간.
진단:
  • 경로 층화: 클라이언트 → 로컬 캐시 → 노드 캐시 → 클러스터 리솔버 → 공급자 재귀.
  • NXwarter (이름/Typo 오류) 및 SERVFAIL (재귀 문제/리소스 한계) 스파이크를 추적하십시오.

12) 설정 예

코어 DNA: 재 작성 및 스터브 영역

yaml
.:53 {
log errors cache 60 rewrite name suffix. svc. cluster. local. svc. cluster. local forward. 10. 0. 0. 2 10. 0. 0. 3
}

example. internal:53 {
file /zones/example. internal. signed dnssec
}

시스템 해결

ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes

특사: 동적 DNS- 새로 고침

yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true

외부 dns (공공 영역 지원)

yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod

13) 구현 점검표 (0-30 일)

0-7 일

서비스 이름 디렉토리, 모델 선택 (클라이언트/서버 측/하이브리드).
기본 TTL, NodeLocal DNSCache 활성화, DNA 메트릭 대시 보드.
구성/코드에서 "하드 IP" 금지.

8-20 일

gRPC를위한 헤드리스 서비스 + SRV; EndpointSlice가 활성화되었습니다.
GSLB/외부에 가중; 건강 검진 및 카나리아.
클라이언트 타임 아웃/리트레이 및 리트레이 예산이 구성됩니다.

21-30 일

분할 수평선과 개인 지역; 정책 별 DoT/DoH.
TTL (스위칭 테스트) 및 feilover; 분석 후.
메시/EDS, 특이 치 배출 정책이 활성화됩니다.

14) 반 패턴

TTL = 0에서 prod → storm에서 재귀, 예측할 수없는 지연.
IP/포트 하드 코드, 레벨에 대한 CNAME/별칭 없음.
건강 검진 및 카나리아없이 레코드를 "수동으로" 변경합니다.
노드 캐시 (병목 현상) 가없는 하나의 글로벌 리졸버.
네거티브 캐시 무시 (NXwitcher spike).
데이터/feilover 계층 대신 DNS를 통해 데이터베이스 장애를 "치유" 하려고 시도합니다.

15) 성숙도 지표

서비스의 100% 는 이름을 사용합니다. 하드 IP 케이스가 없습니다.
판매에있어서 CoreDNA/NodeLocal, 노드에서 캐시 적중 비율> 90%.
건강 검진, 문서화 된 TTL 및 런북 스위치가있는 GSLB.

stateful/gRPC를위한 SRV/EndpointSlice, 응용 프로그램에서 p99 해결 시간

SERVFAIL/NXtter에 대한 경고 및 캐시 적중 비율 저하.
CI에서 확인: 차트/구성 요소에서 ': 최신' 및 하드 IP 금지.

16) 결론

서비스 발견은 안정적인 이름 계약 및 캐시 규율입니다. 하이브리드 모델 구축: DNS는 빠르고 쉬운 로그인, L7/mesh-건강 및 스마트 정책을 제공합니다. 필요한 경우 스마트 TTL, 호스트 캐시, 헤드리스 서비스 및 SRV를 유지하고 지역 경계에 GSLB/Anycast를 사용하고 NXwher/SERVFAIL 및 p99 해결 시간을 주시하십시오. 그러면 귀하의 이름은 서비스 자체만큼 자산을 신뢰할 수 있습니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.