Service discovery — taqsimlangan tizimda client yoki vositachi xizmatning joriy ishlayotgan instansiyalari manzilini dinamik topish mexanizmi. Container va autoscaling muhitida IP manzillar doimiy emas: instance yaratiladi, ko‘chadi va o‘chadi. Discovery logical service nomini sog‘lom endpointlar ro‘yxatiga bog‘laydi.
Registry
Service registry odatda service nomi, IP/port, zone, versiya va health metama’lumotini saqlaydi. Instance startupda register bo‘ladi va lease/heartbeat bilan mavjudligini yangilaydi. Graceful shutdownda deregister qilinadi. Heartbeat tugasa registry uni stale deb olib tashlaydi.
Self-registrationda service o‘zi registry bilan gaplashadi. Third-party registrationda orchestrator yoki agent instance hayot siklini kuzatadi. Kubernetes EndpointSlice ma’lumoti Pod readiness va Service selector asosida controller tomonidan boshqariladi.
Client-side discovery
Client registrydan endpointlarni olib, local load-balancing bilan birini tanlaydi. Round-robin, random, least requests yoki zone-aware algoritm ishlatilishi mumkin. Client ro‘yxatni cache qiladi; registry vaqtincha ishlamasa mavjud endpointlar bilan davom etadi.
Bu model har til clientiga discovery va balancing kutubxonasi talab qiladi. Eskirgan cache o‘chgan instancega so‘rov yuborishi mumkin, shuning uchun retry va endpoint eviction kerak. Retry ayni operatsiyani ikki marta bajarish xavfini tug‘diradi.
Server-side discovery
Client barqaror load balancer, proxy yoki virtual IPga murojaat qiladi. Vositachi registrydan backendlarni topadi. DNS service discovery ham server-sidega yaqin: nom bir nechta A/AAAA yoki SRV yozuv qaytaradi, client resolver va TTL bo‘yicha cache qiladi.
DNS sodda va keng qo‘llanadi, ammo clientlar TTLga har doim qat’iy rioya qilmaydi. DNS health va weight semantikasi cheklangan bo‘lishi mumkin. Proxy esa active health check va murakkab balancing beradi, evaziga qo‘shimcha hop va failure domain yaratadi.
Health va readiness
Process running bo‘lishi trafik qabul qilishga tayyorligini anglatmaydi. Readiness check database migration, cache warm-up yoki dependency tayyorligini tekshiradi. Liveness stuck processni qayta ishga tushirish uchun, readiness esa endpoint ro‘yxatidan vaqtincha chiqarish uchun ishlatiladi.
Health check downstreamlarning hammasini qat’iy talab qilsa cascading failure bo‘lishi mumkin: umumiy dependency xatosida barcha instance discoverydan chiqadi. Service o‘zining asosiy requestni qabul qilish qobiliyatini va degradatsiya rejimini aniq belgilaydi.
Consistency va stale endpoint
Registry taqsimlangan bo‘lsa, endpoint yangilanishi nodlar orasida kech tarqalishi mumkin. Client stale manzilga urilib connection error oladi va boshqa endpointga o‘tadi. Juda agressiv heartbeat control-plane yukini, juda uzun lease failure aniqlash vaqtini oshiradi.
Network partitionda registry “instance o‘ldi” bilan “heartbeat yo‘li uzildi”ni ajrata olmaydi. Eviction siyosati availability va noto‘g‘ri endpoint orasida muvozanat qiladi.
Xavfsizlik
Ruxsatsiz instance registryga o‘zini qonuniy service sifatida qo‘sha olmasligi kerak. Registration va query autentifikatsiya, mTLS va ACL bilan himoyalanadi. Discovery faqat manzil beradi; service darajasidagi authorization baribir tekshiriladi.
Diagnostikada logical nom, registry yozuvi, health status, DNS TTL, client cache va actual connection kuzatiladi. Bir clientda ishlamasligi uning resolver cache’i yoki zone policy bilan bog‘liq bo‘lishi mumkin.
Zone va locality
Registry endpointga zone/region metadata qo‘shsa, client avval lokal instance’ni tanlaydi. Bu latency va cross-zone xarajatni kamaytiradi. Lokal pool bo‘shasa boshqa zone fallback bo‘ladi. Faqat localityga qattiq yopishib olish bir zonadagi overloadni kuchaytirishi mumkin; load va failure policy birga hisoblanadi.
Version discovery
Canary vaqtida endpoint metadata’da version yoki subset mavjud bo‘lishi mumkin. Router trafikning kichik qismini yangi subsetga beradi. Application clientning o‘zi versiya nomini hardcode qilsa rollout coupling hosil bo‘ladi; routing policy logical service nomi ortida boshqariladi.
Bog‘liq tushunchalar
Service registry, Load balancing, Health check, DNS, Kubernetes Service, Service mesh