GoDasturchi
Service Discovery Part 2: DNS and Kubernetes

Service Discovery Part 2: DNS and Kubernetes

Servisni topish 2-qism: DNS va Kubernetes

Oldingi darsda o'zimiz qo'lda yozgan Registry — o'quv uchun ajoyib, lekin haqiqiy production tizimlarda bu muammoni odatda yangi vosita yaratmasdan, allaqachon hamma bilgan, ishonchli vosita — DNS (Domain Name System) orqali hal qilishadi. DNS — internetning o'zi ishlatadigan, "nomni manzilga aylantirish" tizimi (masalan google.com nomi haqiqiy IP-manzilga aylantiriladi).

"Docker Compose Service Discovery" darsida ko'rganingizdek, Docker Compose har bir servisga o'z ichki DNS'i orqali nom beradi. Kubernetes ham xuddi shu g'oyani, lekin ancha kattaroq miqyosda amalga oshiradi.

example.go
// Kubernetes'da har bir "Service" avtomatik DNS nomiga ega bo'ladi:
// <servis-nomi>.<namespace>.svc.cluster.local

// Go kodida bu — oddiy manzil sifatida ishlatiladi, hech qanday
// maxsus "kutubxona" yoki Registry kerak emas:
resp, err := http.Get("http://user-service.production.svc.cluster.local/users/u1")

// Bir xil namespace ichida bo'lsa, qisqaroq shaklda ham yozish mumkin:
resp, err := http.Get("http://user-service/users/u1")

Bu yondashuvning go'zalligi: Go kodingizga hech qanday maxsus "service discovery kutubxonasi" import qilish SHART EMAS — siz shunchaki oddiy http.Get("http://servis-nomi/...") yozasiz, va Kubernetes'ning ichki DNS tizimi bu nomni avtomatik ravishda joriy, to'g'ri IP-manzilga aylantiradi. Agar servisning bir nechta nusxasi ("Kubernetes for Go Developers" kursida ko'radigan replicas) ishlab tursa, DNS ular orasida so'rovlarni avtomatik taqsimlaydi ham (load balancing).

Bu — "Deployment Strategies: Kubernetes" darsida (Cloud Patterns kursida) ko'rgan Deploymentning tabiiy davomi: Deployment konteynerlarning QANDAY ishga tushishini boshqarsa, Service (Kubernetes obyekti, bizning kod'imizdagi Service interfeysi bilan chalkashtirmang) ularga QANDAY murojaat qilinishini — barqaror nom orqali — ta'minlaydi. Shu sababli o'zingiz Registry yozish o'rniga, ko'p hollarda Kubernetes DNS'ining o'ziga tayanish yetarli va tavsiya etiladi.

Key Takeaway

Key Takeaway:

Kubernetes har bir servisga barqaror DNS nomi beradi — Go kodi maxsus service discovery kutubxonasisiz, oddiy http.Get("http://servis-nomi/...") orqali boshqa servislarga murojaat qila oladi.

NEXT UP

API Gateway Pattern

Service Discovery Part 2: DNS and Kubernetes

Servisni topish 2-qism: DNS va Kubernetes

Oldingi darsda o'zimiz qo'lda yozgan Registry — o'quv uchun ajoyib, lekin haqiqiy production tizimlarda bu muammoni odatda yangi vosita yaratmasdan, allaqachon hamma bilgan, ishonchli vosita — DNS (Domain Name System) orqali hal qilishadi. DNS — internetning o'zi ishlatadigan, "nomni manzilga aylantirish" tizimi (masalan google.com nomi haqiqiy IP-manzilga aylantiriladi).

"Docker Compose Service Discovery" darsida ko'rganingizdek, Docker Compose har bir servisga o'z ichki DNS'i orqali nom beradi. Kubernetes ham xuddi shu g'oyani, lekin ancha kattaroq miqyosda amalga oshiradi.

example.go
// Kubernetes'da har bir "Service" avtomatik DNS nomiga ega bo'ladi:
// <servis-nomi>.<namespace>.svc.cluster.local

// Go kodida bu — oddiy manzil sifatida ishlatiladi, hech qanday
// maxsus "kutubxona" yoki Registry kerak emas:
resp, err := http.Get("http://user-service.production.svc.cluster.local/users/u1")

// Bir xil namespace ichida bo'lsa, qisqaroq shaklda ham yozish mumkin:
resp, err := http.Get("http://user-service/users/u1")

Bu yondashuvning go'zalligi: Go kodingizga hech qanday maxsus "service discovery kutubxonasi" import qilish SHART EMAS — siz shunchaki oddiy http.Get("http://servis-nomi/...") yozasiz, va Kubernetes'ning ichki DNS tizimi bu nomni avtomatik ravishda joriy, to'g'ri IP-manzilga aylantiradi. Agar servisning bir nechta nusxasi ("Kubernetes for Go Developers" kursida ko'radigan replicas) ishlab tursa, DNS ular orasida so'rovlarni avtomatik taqsimlaydi ham (load balancing).

Bu — "Deployment Strategies: Kubernetes" darsida (Cloud Patterns kursida) ko'rgan Deploymentning tabiiy davomi: Deployment konteynerlarning QANDAY ishga tushishini boshqarsa, Service (Kubernetes obyekti, bizning kod'imizdagi Service interfeysi bilan chalkashtirmang) ularga QANDAY murojaat qilinishini — barqaror nom orqali — ta'minlaydi. Shu sababli o'zingiz Registry yozish o'rniga, ko'p hollarda Kubernetes DNS'ining o'ziga tayanish yetarli va tavsiya etiladi.

Key Takeaway

Key Takeaway:

Kubernetes har bir servisga barqaror DNS nomi beradi — Go kodi maxsus service discovery kutubxonasisiz, oddiy http.Get("http://servis-nomi/...") orqali boshqa servislarga murojaat qila oladi.

NEXT UP

API Gateway Pattern