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.
// 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