GH GambleHub

Service Discovery и DNS

Service Discovery и 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 вне 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: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.

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.