Logo GH

Service Discovery va DNS

Service Discovery va DNS

1) Nima uchun bu zarur?

Tarqatilgan tizimlarda uzellar paydo bo’ladi va yo’qoladi, mijozlar esa xizmatning ishchi nusxalarini tez va ishonchli topishlari kerak. DNS - nomlarning universal qatlami; service discovery - salomatlik, og’irlik va yo’naltirish siyosatini hisobga olgan holda servis nomini real endpointlarga solishtirish strategiyasi.

Asosiy maqsadlar:
  • efemer manzillar o’rniga barqaror nomlar,
  • aniq, lekin shovqinli bo’lmagan yangilanish (yangilik va TTL o’rtasidagi balans),
  • to’liq tushmasdan degradatsiya (failover/health-check),
  • mijozda minimal «taxminlar»: taymautlar, retryalar, kesh-siyosatlar.

2) service discovery modellari

2. 1 Mijoz (client-side)

Mijozning o’zi ismni endpointlar to’plamiga kiritadi va uni muvozanatlaydi (round-robin, EWMA, kalit bo’yicha xesh). Manba - DNS (A/AAAA/SRV), servis-reyestr (Consul/Eureka), statik ro’yxat.

Ijobiy tomonlari: markaziy SPOF kamroq, moslashuvchan algoritmlar.
Salbiy tomonlari: mijozlarning bir xilligi, mantiqni yangilash qiyinroq.

2. 2 Server (server-side)

Mijoz front/LB (L4/L7, gateway/ingress) ga boradi. Balanslash va health-checking - proksi/balanslashtiruvchi tomonida.

Ijobiy tomonlari: siyosatning yagona o’rni, kuzatish.
Kamchiliklar: yuqori darajada foydalanish mumkin bo’lgan perimetr (N + 1, multi-AZ) kerak.

2. 3 Gibrid

DNS kirish nuqtalari toʻplamini (mintaqaviy LB) beradi, keyin esa L7/mesh balansini beradi.

3) DNS: asoslari, yozuvlari va TTL

3. 1 Asosiy turlari

A/AAAA - IPv4/IPv6 manzillar.
CNAME - boshqa nomdagi alias (apex emas).
SRV — `_service._proto. name’→ xost/port/og’irlik/ustuvorlik (gRPC/LDAP/SIP va boshqalar uchun).
TXT/HTTP/HTTPS - meta maʼlumotlar/koʻrsatgichlar (shu jumladan HTTP-discovery uchun).
NS/SOA - vakolat va atributlar.

3. 2 TTL va kesh kaskadi

Kesh: OS rezolverida, lokal stub-rezolverda, uzellarda (NodeLocal DNS/CoreDNS), provayderda, oraliq rekursorlarda va kutubxona mijozida mavjud. Haqiqiy yangilik = min (TTL, mijoz siyosati). Salbiy kesh (NXDOMAIN) ham’SOA orqali kesh qilinadi. MINIMUM`/`TTL`.

Tavsiyalar:
  • Prod - TTL 30-120s dinamik yozuvlar uchun, 300-600s barqaror yozuvlar uchun.
  • O’zgartirish uchun «yong’in paytida» emas, balki pasaytirilgan TTLni oldindan tayyorlang.
  • Kutubxonaning sticky-keshini (Java/Go/Node) hisobga oling - agar kerak boʻlsa, rantaym ichida TTL rezolverini sozlang.

4) DNS-balanslash va nosozlikka chidamlilik siyosati

Weighted RR - A/AAAA/SRV vazni.
Failover - birlamchi/ikkilamchi to’plamlar (tashqarida health-check).
Geo/Latency - «eng yaqin» XTR/mintaqaga javob.
Anycast - turli POP (BGP) larda bitta IP; mintaqaviy uzilishlarga chidamli.
Split-horizon - VPC/on-prem ichida va Internetda turli xil javoblar.
GSLB - health-tekshirish va siyosatga ega global balanschi (latency, geo, capacity).

5) Health-checks va yangilik

DNS o’z-o’zidan «ahmoq»: u orqa tomonlarning sog’lig’ini bilmaydi. Shuning uchun:
  • Yoki tashqi health-checker yozuvlar/tarozilarni boshqaradi (GSLB, Route53/Traffic-policy, external-dns + namunalar).
  • Yoki mijoz/mesh bir nechta endpointlardan faol outlier-ejection va retry qiladi.

6) Kubernetes: qutidan discovery

Xizmat nomlari:’svc. namespace. svc. cluster. local`.
ClusterIP: barqaror virtual IP + kube-proxy/ebpf.
Headless Service (’clusterIP: None’): A-yozuvlarni pod’lar (yoki ularning pastki domeniga), portlar uchun SRV beradi.
EndpointSlice: kattalashtiriladigan endpointlar roʻyxati.
CoreDNS: klaster DNS-rezolver; plaginlar rewrite/template/forward/cache;’kube-dns’zonasi.
NodeLocal DNSCache: lokal kesh → kamroq latency va apstrim rezolver muammolari.

Misol: 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

Mijoz’_ grpc. _ tcp. payments. prod. svc. cluster. local’(SRV) va xost/port/vazn olish.

CoreDNS (ConfigMap fraqmenti)

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 (gʻoyalar):
  • ’169 da lokal rezolver bilan DaemonSet. 254. 20. 10`; kubelet shu nuqtani koʻrsatadi.
  • p99 name-resolution ni kamaytiradi va «flap» dan apstrim-DNS ni himoya qiladi.

7) Service discovery tashqarisida K8s

Consul: agent, health-checks, servis-katalog, DNS interfeysi (’.consul’), konfiguratsiyalar uchun KV.
Eureka/ZooKeeper/etcd: JVM/legacy uchun reyestrlar; ko’pincha sidecar/shlyuz bilan bog’langan.
Envoy/Istio: EDS/xDS (Endpoint Discovery) va SDS (sirlar); xizmatlar control-plane orqali e’lon qilinadi.

8) DNS xavfsizligi

DNSSEC: yozuvlarning yaxlitligini himoya qilish (imzo zonalari). Umumiy domenlar uchun juda muhim.
DoT/DoH: rekursorga kanalni shifrlash (ichki siyosatlar, muvofiqlik).
ACL va split-horizon: xususiy zona - faqat VPC/VPN dan.
Kesh zaharlanishdan himoya qilish: port/ID randomizatsiyasi, dinamika uchun qisqa TTL.
Egress siyosati: DNSga faqat ishonchli rezolverlarda ruxsat bering, jurnalga kiriting.

9) Mijozlarning xulq-atvori va retrasi

TTLni hurmat qiling: cheksiz keshlamang, tez-tez bo’ron bilan «cheklamang».
Happy Eyeballs (IPv4/IPv6), bir nechta A/AAAA parallel konnektlari tail qismini kamaytiradi.
Retrai faqat idempotent so’rovlarida; jitter, budget retraylarni cheklash.

Rantaym rezolverining nozik moslamalari:
  • Java: `networkaddress. cache. ttl`, `networkaddress. cache. negative. ttl`.
  • Go: `GODEBUG=netdns=go`/`cgo`, `Resolver. PreferGo`, `DialTimeout`.
  • Node: `dns. setDefaultResultOrder('ipv4first')`, `lookup` `all bilan:true`.

10) GSLB/DNS almashtirish: amaliyot

TTLni rejadan 24-48 soat oldin 300 → 60 dan pasaytiring.
Validatsiya qilish uchun kanareik past vaznli endpoyntlar to’plamini saqlang.
Qo’lda A-yozuvlarning ommaviy yangilanishi o’rniga weighted + health-check’ni qo’llang.
Statika/edge uchun - Anycast; API uchun - Geo/Latency + tezkor L7-feylover.

11) Ism uchun kuzatish va SLO

Metriklar:
  • Rate/latency DNS-so’rovlar, cache hit-ratio, turlar bo’yicha xatolar (SERVFAIL/NXDOMAIN).
  • Stale-javob soʻrovlari ulushi (agar siz stale-cache’dan foydalansangiz).
  • Yozuvlarni almashtirishda foydalanuvchi operatsiyalarining muvaffaqiyati (biznes-SLI).
  • p95/p99 resolve-time ilovalarda.
Diagnostika:
  • Yo’lni ajrating: mijoz → lokal kesh → node kesh → klaster rezolver → provayder rekursori.
  • NXDOMAIN (nomlar/xatolar) va SERVFAIL (resurs/resurs limitlari muammolari) portlashlarini kuzatib boring.

12) Konfiguratsiya namunalari

CoreDNS: rewrite va stub zonasi

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 (lokal rezolver forsi)

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 (ommaviy zonani qoʻllab-quvvatlash)

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

13) Joriy etish chek-varaqasi (0-30 kun)

0-7 kun

Services nomlari katalogi, model tanlash (client-/server-side/gibrid).
Asosiy TTL, NodeLocal DNSCache, DNS-metrik dashbordlarni o’z ichiga oladi.
Konfig/kodda «qattiq IP» ni taqiqlash.

8-20 kun

gRPC uchun Headless-servislar + SRV; EndpointSlice aktiv.
Tashqi uchun GSLB/weighted; health-checks va kanareyka.
Taymautlar/retrajlar va retrajlar byudjeti sozlandi.

21-30 kun

Split-horizon va xususiy zonalar; Siyosat bo’yicha DoT/DoH.
O’zgartirish (TTL bo’yicha) va faylover testi; post-tahlil.
mesh/EDS, outlier-ejection siyosati kiritilgan.

14) Anti-patternlar

TTL = 0 prod → rekursorlarga bo’ron, oldindan aytib bo’lmaydigan kechikishlar.
IP/port hardkodi, darajalar uchun CNAME/alias yo’qligi.
Health-checks va kanareykalarsiz yozuvlarni qoʻlda almashtirish.
Tugunlarda keshsiz bitta global rezolver (tor joy).
Salbiy keshni eʼtiborsiz qoldirish (NXDOMAIN portlashi).
Maʼlumotlar/faylover darajasi oʻrniga DNS orqali DB nosozligini «davolashga» urinishlar.

15) Etuklik metrikasi

100% servislar nomlardan foydalanadi; nol hard-IP holatlari.
CoreDNS/NodeLocal prodda, cache hit-ratio> 90% uzellarda.
TTL va runbook bilan hujjatlashtirilgan health-checks bilan GSLB.
stateful/gRPC uchun SRV/EndpointSlice, p99 resolve-time ilovalarda ≤ 20-30 ms.
SERVFAIL/NXDOMAIN va degradatsiya bo’yicha alertlar cache hit-ratio.
Chartlarda/konfiguratsiyalarda’: latest’va hard-IP’ni tekshirish.

16) Xulosa

Service discovery - bu barqaror nom va kesh tartibi to’g’risidagi shartnoma. Gibrid modelni yarating: DNS tezkor va oson kirish imkonini beradi, L7/mesh - salomatlik va aqlli siyosatchilar. Mantiqiy TTL, tugunlardagi kesh, headless-services va SRVni kerak bo’lganda qo’llab-quvvatlang, mintaqa chegaralari uchun GSLB/Anycast’dan foydalaning, NXDOMAIN/SERVFAIL va p99 resolve-time’dan foydalaning. Shunda sizning ismingiz xizmatning o’zi kabi ishonchli aktiv bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.