GH GambleHub

Service Discovery и DNS

Service Discovery и DNS

1) Niyə lazımdır

Paylanmış sistemlərdə qovşaqlar görünür və yox olur və müştərilər xidmətin iş nümunələrini tez və etibarlı şəkildə tapmalıdırlar. DNS - universal ad təbəqəsi; service discovery - sağlamlıq, ağırlıq və marşrutlaşdırma siyasəti nəzərə alınmaqla, real end-point xidmət adını müqayisə strategiyası.

Əsas məqsədlər:
  • efemer ünvanları əvəzinə sabit adlar,
  • dəqiq, lakin səs-küylü yeniləmə (təravət və TTL arasında balans),
  • tam düşmə olmadan deqradasiya (failover/health-check),
  • müştəridə minimum «təxminlər»: taymautlar, retrajlar, cash-siyasətlər.

2) service discovery modelləri

2. 1 Müştəri (client-side)

Müştərinin özü adın end-point dəstinə icazə verir və balanslaşdırır (round-robin, EWMA, açar hash). Mənbə DNS (A/AAAA/SRV), xidmət reyestri (Consul/Eureka), statik siyahıdır.

Üstünlüklər: daha az mərkəzi SPOF, çevik alqoritmlər.
Mənfi cəhətləri: müştərilərin heterojenliyi, məntiqi yeniləmək daha çətindir.

2. 2 Server otağı (server-side)

Müştəri front/LB (L4/L7, gateway/ingress) gedir. Balans və sağlamlıq-yoxlama - proxy/balans tərəfində.

Üstünlüklər: vahid siyasət yeri, müşahidə.
Mənfi cəhətləri: yüksək əlçatan perimetr (N + 1, multi-AZ) lazımdır.

2. 3 Hibrid

DNS bir sıra giriş nöqtələri (regional LB) verir, sonra - L7/mesh balans.

3) DNS: əsasları, qeydlər və TTL

3. 1 Əsas növləri

A/AAAA - IPv4/IPv6 ünvanları.
CNAME - başqa bir adda alias (apex deyil).
SRV — `_service._proto. name '→ host/port/çəki/prioritet (gRPC/LDAP/SIP və s.).
TXT/HTTP/HTTPS - metadata/göstəricilər (HTTP-discovery üçün daxil olmaqla).
NS/SOA - nümayəndəlik və zona atributları.

3. 2 TTL və Cash Cascade

Cache var: OS rezolver, lokal stub-rezolver, düyünlər (NodeLocal DNS/CoreDNS), provayder, ara rekursorlar və kitabxana müştərisi. Faktiki təravət = min (TTL, müştəri siyasəti). Mənfi cache (NXDOMAIN) də 'SOA ilə cache olunur. MINIMUM`/`TTL`.

Tövsiyələr:
  • Prod - dinamik qeydlər üçün TTL 30-120s, sabit üçün 300-600s.
  • Keçid üçün (feylover) «yanğın zamanı» deyil, əvvəlcədən aşağı TTL hazırlayın.
  • Kitabxanaların sticky-cachini (Java/Go/Node) nəzərə alın - lazım olduqda TTL rezolverini rantaym daxilində konfiqurasiya edin.

4) DNS balans siyasəti və pozulma müqavimət

Weighted RR - A/AAAA/SRV çəkiləri.
Failover - birincili/ikincili dəstlər (xaricdə sağlamlıq-yoxlama).
Geo/Latency - «ən yaxın» ROP/regiona cavab.
Anycast - müxtəlif POP (BGP) bir IP; regional uğursuzluqlara davamlı.
Split-horizon - VPC/on-prem daxilində və İnternetdə fərqli cavablar.
GSLB - sağlamlıq yoxlamaları və siyasətləri (latency, geo, capacity) ilə qlobal balanslaşdırıcı.

5) Sağlamlıq-yoxlama və təravət

DNS özü "axmaq 'dır: o, backends sağlamlığını bilmir. Buna görə:
  • Ya xarici health-checker qeydləri/çəkiləri idarə edir (GSLB, Route53/Traffic-policy, external-dns + testlər).
  • Və ya müştəri/mesh aktiv outlier-ejection və retry edir.

6) Kubernetes: qutudan discovery

Xidmət adları: 'svc. namespace. svc. cluster. local`.
ClusterIP: sabit virtual IP + kube-proxy/ebpf.
Headless Service ('clusterIP: None'): A-qeydlərini pod 'lara (və ya onların alt domeninə), limanlara SRV verir.
EndpointSlice: End-pointlərin ölçülə bilən siyahısı (Endpoints-in əvəzlənməsi).
CoreDNS: DNS rezolver klasteri; plugins rewrite/template/forward/cache; 'kube-dns' zona.
NodeLocal DNSCache: qovşağında lokal cache → daha az latency və axın rezolver problemlərinin tutulması.

Nümunə: 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

Müştəri '_ grpc. _ tcp. payments. prod. svc. cluster. local '(SRV) və host/port/çəki almaq.

CoreDNS (ConfigMap parçası)

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 DNS (fikirlər):
  • DaemonSet '169 yerli rezolver ilə. 254. 20. 10`; kubelet bu nöqtəni göstərir.
  • p99 name-resolution azaldır və «flap» apstrim-DNS qoruyur.

7) Service discovery вне K8s

Consul: agent, health-checks, xidmət kataloqu, DNS interfeysi ('.consul'), konfiqurasiya üçün KV.
Eureka/ZooKeeper/etcd: JVM/legacy üçün reyestrlər; tez-tez sidecar/şlüz ilə birlikdə.
Envoy/Istio: EDS/xDS (Endpoint Discovery) və SDS (sirləri); xidmətlər control-plane vasitəsilə elan edilir.

8) DNS təhlükəsizliyi

DNSSEC: qeydlərin bütövlüyünü qorumaq (imza zonaları). Ümumi domenlər üçün kritik.
DoT/DoH: rekursor kanal şifrələmə (daxili siyasətlər, uyğunluq).
ACL və split-horizon: Xüsusi zona - yalnız VPC/VPN-dən.
Cash zəhərlənməyə qarşı qorunma: port/ID randomizasiyası, dinamika üçün qısa TTL.
Egress siyasətləri: DNS-ə yalnız etibarlı rezolverlərdə icazə verin, jurnal edin.

9) Müştərilərin davranışı və retraj

TTL-ə hörmət edin: sonsuza qədər cache etməyin, tez-tez nəticələr verməyin (təkrarlayıcıya fırtına).
Happy Eyeballs (IPv4/IPv6), bir neçə A/AAAA paralel bağlar tail azaldır.
Retrai yalnız idempotent sorğu ilə; jitter, budget retrai məhdudiyyəti.

Rentaime rezolver incə konfiqurasiya:
  • Java: `networkaddress. cache. ttl`, `networkaddress. cache. negative. ttl`.
  • Go: `GODEBUG=netdns=go`/`cgo`, `Resolver. PreferGo`, `DialTimeout`.
  • Node: `dns. setDefaultResultOrder('ipv4first')`, `lookup` с `all:true`.

10) GSLB/DNS keçid: təcrübə

TTL-i planlaşdırılan dəyişdirmədən 24-48 saat əvvəl 300 → 60-dan aşağı salın.
Validasiya üçün aşağı çəki ilə kanarya end dəsti saxlayın.
Əl kütləvi A yeniləməsi əvəzinə weighted + health-check tətbiq edin.
Statik/edge üçün - Anycast; API üçün - Geo/Latency + sürətli L7 feylover.

11) Adı üçün müşahidə və SLO

Metriklər:
  • Rate/latency DNS sorğuları, cache hit-ratio, tip səhvləri (SERVFAIL/NXDOMAIN).
  • Stale-cavablarla sorğuların payı (stale-cache istifadə edirsinizsə).
  • Qeydlərin dəyişdirilməsində istifadəçi əməliyyatlarının uğuru (Business SLI).
  • p95/p99 resolve-time applications.
Diaqnostika:
  • Yol: müştəri → yerli cache → nod cache → klaster rezolver → provayder rekursor.
  • NXDOMAIN (ad/çap səhvləri) və SERVFAIL (resurs/resurs limitləri problemləri) partlayışlarını izləyin.

12) Konfiqurasiya nümunələri

CoreDNS: rewrite və stub zona

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
}

systemd-resolved (fors lokal rezolver)

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

Envoy: dinamik DNS-refresh

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

external-dns (ictimai zona dəstəyi)

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

13) Giriş çek siyahısı (0-30 gün)

0-7 gün

Xidmət adları kataloqu, model seçimi (client-/server-side/hibrid).
Əsas TTL, NodeLocal DNSCache, DNS metrik dashboard daxildir.
Konfiqada/kodda «sərt IP» qadağası.

8-20 gün

gRPC üçün Headless Services + SRV; EndpointSlice aktiv.
Xarici üçün GSLB/weighted; health-checks və kanarya.
Müştərilərin vaxtları/retrajları və retrajların büdcəsi.

21-30 gün

Split-horizon və xüsusi zonalar; DoT/DoH siyasət.
Switch Test (TTL) və Feylover; post-analiz.
mesh/EDS, outlier-ejection siyasətləri daxildir.

14) Anti-nümunələr

TTL = 0 prod → resurs fırtına, gözlənilməz gecikmələr.
IP/port hardcode, səviyyələri üçün CNAME/alias yoxdur.
Health-checks və kanaryalar olmadan «əl ilə» qeydlərin dəyişdirilməsi.
Bir qlobal rezolver node cache olmadan (dar yer).
Mənfi cache (NXDOMAIN sıçrayışları) məhəl qoymayın.
DNS vasitəsilə DB-nin uğursuzluğunu «müalicə etmək» cəhdləri/faylover.

15) Yetkinlik metrikası

Xidmətlərin 100% -i adlardan istifadə edir; sıfır hard-IP halları.
CoreDNS/NodeLocal prod, cache hit-ratio> 90% düyünlərdə.
TTL və runbook switches tərəfindən sənədləşdirilmiş health-checks ilə GSLB.
stateful/gRPC üçün SRV/EndpointSlice, p99 resolve-time applications ≤ 20-30 ms.
SERVFAIL/NXDOMAIN və cache hit-ratio deqradasiyası.
CI-də yoxlamalar: charts/konfiqurasiyalarda ': latest' və hard-IP qadağası.

16) Nəticə

Service discovery sabit ad və cache nizam-intizam müqaviləsidir. hibrid model qurun: DNS sürətli və asan giriş verir, L7/mesh - sağlamlıq və ağıllı siyasətçilər. Ağıllı TTL, qovşaqlarda cache, istədiyiniz yerdə headless və SRV dəstəkləyin, bölgələrin sərhədləri üçün GSLB/Anycast istifadə edin, NXDOMAIN/SERVFAIL və p99 resolve-time izləyin. Sonra adınız xidmətin özü kimi etibarlı bir aktiv olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.