Service Discovery Patterns
Servisni topish naqshlari
Yangi shaharga ko'chib kelganingizda, do'stingizning uy manzilini bilmasangiz, uni telefon kitobidan yoki tanishlar orqali so'raysiz. Service Discovery (servisni topish) — mikroservislar bir-birining "manzilini" (IP, port) qanday topishi degan muammoni hal qiladi, chunki bulut muhitida servislarning manzili tez-tez o'zgarib turadi (server qayta ishga tushganda, yangi nusxa qo'shilganda).
package main
import "fmt"
// Registry — "telefon kitobi": servis nomi -> uning joriy manzili
type Registry struct {
services map[string]string
}
func NewRegistry() *Registry {
return &Registry{services: make(map[string]string)}
}
func (r *Registry) Register(name, address string) {
r.services[name] = address
}
func (r *Registry) Discover(name string) (string, bool) {
addr, ok := r.services[name]
return addr, ok
}
func main() {
reg := NewRegistry()
reg.Register("user-service", "10.0.0.5:8080")
reg.Register("order-service", "10.0.0.7:8080")
addr, ok := reg.Discover("user-service")
fmt.Println(addr, ok)
}Bu — "Docker Compose Service Discovery" darsida ko'rgan g'oyaning umumiyroq ko'rinishi: har bir servis ishga tushganda o'zini Register orqali "ro'yxatdan o'tkazadi" ("men — user-service, mening manzilim 10.0.0.5:8080"), va boshqa servislar unga murojaat qilishdan oldin Discover orqali joriy manzilni so'raydi. Bu — IP-manzilni kodga "qattiq yozib qo'yish" (hardcode) o'rniga, uni DINAMIK ravishda topishning asosiy g'oyasi.
Haqiqiy production tizimlarda bu "telefon kitobi" rolini maxsus vositalar (Consul, etcd) yoki Kubernetes'ning o'zi (DNS orqali, keyingi darsda ko'ramiz) o'ynaydi — ular servislar sog'lig'ini ham kuzatib boradi, "o'lik" (health check'dan o'tmagan) servislarni ro'yxatdan avtomatik olib tashlaydi.
>_ Exercise
Registry'ga servisni ro'yxatdan chiqarish (Deregister) imkonini qo'shing.
- •Deregister(name string) metodini yozing: xaritadan o'sha nomni olib tashlang (delete)
- •"cache-service"ni ro'yxatdan o'tkazing, so'ng Deregister qiling, keyin Discover qilib natijasini (bool) chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Service Discovery — servislar nomi orqali ularning joriy manzilini topish mexanizmi; bu manzillarni qattiq yozib qo'yish o'rniga, dinamik va o'zgaruvchan muhitda ishlashni ta'minlaydi.
NEXT UP
Service Discovery Part 2: DNS and Kubernetes
$ go run main.go
Kodingizni ishga tushiring