GH GambleHub

Service Discovery и DNS

Service Discovery и DNS

1) Эмне үчүн керек

Бөлүштүрүлгөн системаларда түйүндөр пайда болот жана жок болот, ал эми кардарлар кызматтын жумушчу нускаларын тез жана ишенимдүү табышы керек. DNS - ысымдардын жалпы катмары; service discovery - ден соолук, салмагы жана багыттоо саясатын эске алуу менен реалдуу end-points кызмат атын салыштыруу стратегиясы.

Негизги максаттары:
  • туруктуу ысымдар ордуна эфемердик даректер,
  • так, бирок ызы-чуу update (сергектик жана TTL ортосундагы баланс),
  • толук түшүүсүз деградация (failover/health-check),
  • минималдуу "болжолдоолор" бар: таймауттар, ретрайлер, кэш-саясатчылар.

2) discovery кызматы моделдер

2. 1 Кардар (client-side)

Кардар өзү эндпойнттордун топтомуна аты-жөнүн берет жана баланстайт (round-robin, EWMA, ачкыч боюнча хеш). Булак - DNS (A/AAAA/SRV), тейлөө реестри (Consul/Eureka), статикалык тизме.

Артыкчылыктары: аз борбордук SPOF, ийкемдүү алгоритмдер.
Кемчиликтери: кардарлардын гетерогендүүлүгү, логиканы жаңылоо кыйыныраак.

2. 2 Сервер бөлмөсү (server-side)

Кардар front/LB (L4/L7, gateway/ingress) барат. Баланстоо жана ден соолук-текшерүү - тарапта прокси/баланстоочу.

Артыкчылыктары: саясаттын бир орду, байкоо.
Минустар: жогорку жеткиликтүү периметр (N + 1, multi-AZ) керек.

2. 3 гибрид

DNS кириш пункттарынын топтомун берет (аймактык LB), андан ары - L7/mesh боюнча балансы.

3) DNS: негиздери, жазуулар жана TTL

3. 1 Негизги түрлөрү

A/AAAA - IPv4/IPv6 даректери.
CNAME - башка аталыштагы алиас (apex эмес).
SRV — `_service._proto. name '→ хост/порт/салмак/артыкчылык (gRPC/LDAP/SIP ж.б. үчүн).
TXT/HTTP/HTTPS - метадеректер/көрсөткүчтөр (анын ичинде HTTP-discovery үчүн).
NS/SOA - өкүлчүлүк жана зонанын атрибуттары.

3. 2 TTL жана кэш-каскад

Кэш бар: ОС резолвер, жергиликтүү stub-резолвер, түйүндөр (NodeLocal DNS/CoreDNS), провайдер, аралык рекурсорлор жана китепкананын кардары. Чыныгы сергектик = min (TTL, кардар саясаты). Терс кэш (NXDOMAIN) да 'SOA боюнча кэш. MINIMUM`/`TTL`.

Сунуштар:
  • Прод - динамикалык жазуулар үчүн TTL 30-120s, туруктуу үчүн 300-600s.
  • которуу үчүн (Feylover) алдын ала төмөндөтүлгөн TTL даярдоо эмес, "өрт учурунда".
  • Sticky-кэш китепканаларды эске алуу (Java/Go/Node) - керек болсо, рантайм ичинде TTL резолверди орнотуу.

4) DNS-балансташтыруу жана үзгүлтүккө туруктуулук саясаты

Weighted RR - салмагы боюнча A/AAAA/SRV.
Failover - биринчилик/экинчилик топтомдор (сыртынан ден соолук-текшерүү).
Geo/Latency - "жакынкы" РОР/регионго жооп.
Anycast - ар кандай POP (BGP) бир IP; региондук мүчүлүштүктөргө туруктуу.
Split-horizon - VPC/он-прем ичинде жана Интернетте ар кандай жооптор.
GSLB - ден соолук текшерүү жана саясат (latency, гео, capacity) менен глобалдык балансчы.

5) Ден соолук-текшерүү жана сергектик

DNS өзү "келесоо": Ал бэкенддердин ден соолугун билбейт. Ошондуктан:
  • Же тышкы ден соолук текшерүүчү жазууларды/таразаларды башкарат (GSLB, Route53/Traffic-policy, external-dns + үлгүлөр).
  • Же кардар/mesh активдүү outlier-ejection жана retry көптөгөн end-points.

6) Kubernetes: кутудан discovery

Кызмат аттары: 'svc. namespace. svc. cluster. local`.
ClusterIP: туруктуу жасалма IP + кубе-прокси/ebpf.
Headless Service ('clusterIP: None'): Pod's A-жазууларды (же алардын поддомендерин), порттор үчүн SRV берет.
EndpointSlice: Эндпойнттордун масштабдуу тизмеси (Endpoints алмаштыруу).
CoreDNS: DNS резолвер кластери; плагиндер rewrite/template/forward/cache; 'кубе-dns' аймак.
NodeLocal DNSCache: түйүнүндөгү жергиликтүү кэш → аз latency жана апстрим-резолвердин көйгөйлөрүн кармоо.

Мисал: 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. payments. prod. svc. cluster. local '(SRV) жана хост/порт/салмагын алуу.

CoreDNS (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 DNS (идеялар):
  • DaemonSet '169 боюнча жергиликтүү толкундары менен. 254. 20. 10`; kubelet бул чекитти көрсөтөт.
  • p99 name-resolution азайтат жана "Flap" apstrim-DNS коргойт.

7) Service discovery вне K8s

Consul: агент, ден соолук-текшерүү, тейлөө каталогу, DNS-Interface ('.consul'), конфигурациялар үчүн KV.
Eureka/ZooKeeper/etcd: JVM/legacy үчүн реестрлер; көбүнчө sidecar/шлюз менен бирге.
Envoy/Istio: EDS/xDS (Endpoint Discovery) жана SDS (сырлар); кызматтар control-plane аркылуу жарыяланат.

8) DNS коопсуздук

DNSSEC: жазуулардын бүтүндүгүн коргоо (кол зоналары). коомдук домендер үчүн сын.
DoT/DoH: рекурсорго каналды шифрлөө (ички саясат, шайкештик).
ACL жана split-horizon: Жеке аймак - VPC/VPN гана.
Кэш уулануудан коргоо: портторду/ID рандомизациялоо, динамика үчүн кыска TTL.
egress боюнча саясат: DNS гана ишенимдүү чечмелөө үчүн уруксат, журнал.

9) Кардарлардын жүрүм-туруму жана ретра

TTL урматтаңыз: чексиз кэш жасабаңыз, тез-тез кол салуулар менен "чектебеңиз" (рекурсорго бороон).
Happy Eyeballs (IPv4/IPv6), бир нече A/AAAA параллелдүү байланыштар tail азайтат.
Ретраи гана демпотенттик суроо-талап менен; життер, retrains budget чектөө.

Жыпар жыттуу Rantheimer орнотуу:
  • 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-которуу: практика

пландаштырылган которууга чейин 24-48 саат 300 → 60 менен TTL төмөндөтүү.
валидация үчүн аз салмактагы канареалык эндпойнттордун топтомун кармаңыз.
Колдо массалык A жазууларынын ордуна weighted + health-check колдонуңуз.
Статика/edge үчүн - Anycast; API үчүн - Geo/Latency + тез L7-Feylover.

11) Байкоо жана аты үчүн SLO

Метрикасы:
  • Rate/latency DNS-суроолор, cache hit-ratio, түрлөрү боюнча каталар (SERVFAIL/NXDOMAIN).
  • Stale жооптор менен суроо үлүшү (эгер сиз stale-cache колдонсоңуз).
  • Жазууларды алмаштырууда колдонуучу операцияларынын ийгилиги (бизнес-SLI).
  • p95/p99 колдонмолордо resolve-time.
Диагностика:
  • Жол: кардар → жергиликтүү кэш → нод кэш → кластердик резолвер → рекурсор провайдер.
  • NXDOMAIN (аттардын каталары/каталар) жана SERVFAIL (рекурсор көйгөйлөрү/ресурс лимиттери) жарылууларына көз салыңыз.

12) Конфигурация мисалдары

CoreDNS: rewrite жана stub зонасы

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 (форс-локалдык толкун)

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

Envoy: динамикалык DNS-refresh

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

external-dns (коомдук аймакты колдоо)

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

13) киргизүү чек-тизмеси (0-30 күн)

0-7 күн

Кызмат аттарынын каталогу, моделдерди тандоо (client-/server-side/гибрид).
Негизги TTL, NodeLocal DNSCache, dashboard DNS-метрик кирет.
"Катуу IP" тыюу config/код.

8-20 күн

Headless кызматтар + gRPC үчүн SRV; EndpointSlice кирет.
тышкы үчүн GSLB/weighted; ден соолук текшерүүлөр жана канарейка.
Таймауттар/кардарларды ретрациялоо жана ретрациялардын бюджети.

21-30 күн

Split-horizon жана жеке зоналар; DoT/DoH саясат.
Switches сыноо (TTL боюнча) жана Feylover; пост-талдоо.
Сетка/EDS саясаты, outlier-ejection кирет.

14) Анти-үлгүлөрү

TTL = 0 → рекурсорлор үчүн бороон, күтүүсүз кечигүү.
Hardcode IP/порттору, деңгээл үчүн CNAME/alias жок.
health-checks жана канарейка жок "кол менен" жазууларды өзгөртүү.
түйүндөрүндө кэш жок бир Global Resolver (тар).
Терс кэшке көңүл бурбоо (NXDOMAIN жарылуусу).
DNS аркылуу DDнин бузулушун "дарылоо" аракети, анын ордуна берилиштердин/фейловердин деңгээли.

15) Жетилүү метрикасы

100% кызматтар ысымдарды колдонушат; нөл учурларда hard-IP.
CoreDNS/NodeLocal, cache hit-ratio> түйүндөрүндө 90%.
GSLB менен ден соолук текшерүү, документтештирилген TTL жана Runbook которуулар.
SRV/EndpointSlice stateful/gRPC үчүн, p99 resolve-time колдонмолордо ≤ 20-30 ms.
SERVFAIL/NXDOMAIN жана cache hit-ratio деградациясы боюнча алерталар.
CI текшерүү: тыюу ': latest' жана хит-параддарда/конфигурацияларда hard-IP.

16) Корутунду

Service discovery - туруктуу аты-жөнү жана кэш тартиби жөнүндө келишим. гибриддик моделин куруу: DNS тез жана жөнөкөй кирүү берет, L7/mesh - ден соолук жана акылдуу саясатчылар. Акылга сыярлык TTL, түйүндөрдө кэш, headless-кызматтар жана зарыл болгон жерде SRV колдоо, аймактардын чектери үчүн GSLB/Anycast колдонуу, NXDOMAIN/SERVFAIL жана p99 resolve-time. Ошондо сиздин ысымыңыз кызматтын өзү сыяктуу эле ишенимдүү актив болот.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.