Logo GH

Service Discovery və DNS

Service Discovery və 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 xaricində 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 retry 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 ilə: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!

Telegram
@Gamble_GC
İ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.