Server-Side Discovery — client service instance’larini o‘zi topmasdan, requestni load balancer, router yoki gatewayga yuboradigan va aynan shu server-side component mavjud instance’lardan birini tanlaydigan service discovery pattern.
Client faqat barqaror endpointni biladi. Dynamic instance ro‘yxati va routing infratuzilma qatlamida boshqariladi.
Muammo
Microservice instance’lari:
- scale out;
- restart;
- failure;
- deployment;
- node migration
sabab tez-tez o‘zgaradi.
Client har instance IP va portini bilsa config doim yangilanishi kerak.
Server-side discovery barqaror kirish nuqtasi beradi.
Service registry
Registry mavjud service instance’lari haqida ma’lumot saqlaydi.
Instance ro‘yxatdan o‘tadi yoki platforma avtomatik aniqlaydi.
Load balancer
Client requestni load balancerga yuboradi.
Load balancer registry yoki platforma endpointlaridan healthy instance’larni oladi.
Keyin routing algoritmi bilan bittasini tanlaydi.
Request oqimi
Soddalashtirilgan oqim:
Client
→ Load balancer
→ Service registry yoki endpoint list
→ Healthy service instance
Client instance discovery logicini ishlatmaydi.
Registration
Service instance startupda ro‘yxatdan o‘tishi mumkin.
Ma’lumot:
Shutdownda deregistration qilinadi.
Crash bo‘lsa TTL yoki health check stale entry’ni olib tashlaydi.
Health check
Load balancer faqat healthy instance’ga traffic yuborishi kerak.
Health:
- process alive;
- port ochiq;
- dependency tayyor;
- readiness;
- custom check
orqali baholanadi.
Juda og‘ir health check dependencylarga ortiqcha yuk beradi.
Routing algoritmi
Keng tarqalgan algoritmlar:
Stateful session bo‘lsa sticky routing yoki consistent hash ishlatilishi mumkin.
DNS asosidagi discovery
Barqaror DNS nomi service instance yoki load balancerga resolve bo‘ladi.
DNS oddiy va universal.
Ammo TTL, client cache va update kechikishi stale addressga olib kelishi mumkin.
Ko‘pincha DNS load balancer endpointini beradi.
Platform load balancer
Orchestration platforma service uchun virtual IP yoki proxy yaratishi mumkin.
Backend pod yoki containerlar dinamik o‘zgaradi.
Client faqat service nomiga murojaat qiladi.
Platforma endpoint list va routingni boshqaradi.
External va internal routing
Tashqi client public load balancer orqali kiradi.
Ichki service’lar internal load balancer yoki service virtual IP’dan foydalanadi.
Internal endpoint public internetga ochilmaydi.
Network policy service’lar orasidagi aloqani cheklaydi.
Server-side va Client-side Discovery
Client-side discovery’da client registry’dan instance ro‘yxatini olib, o‘zi tanlaydi.
Server-side modelda client bitta router endpointini biladi.
Server-side afzalligi:
Kamchiligi — load balancer qo‘shimcha hop va critical component.
Registry consistency
Registry instance holatini kech yangilashi mumkin.
Load balancer stale instance’ga request yuborishi ehtimoli bor.
Connection failure’da boshqa instance’ga retry qilinishi mumkin.
Non-idempotent request uchun retry ehtiyotkor.
Connection pooling
Load balancer backend instance’lar bilan persistent connection saqlashi mumkin.
Instance deregister bo‘lganda mavjud connectionlar drain qilinadi.
Yangi traffic to‘xtatiladi, active requestlar tugashiga vaqt beriladi.
Graceful shutdown
Service deployment vaqtida:
- readiness false;
- registry yoki endpointdan chiqarish;
- traffic drain;
- active requestlarni tugatish;
- processni to‘xtatish.
Birdan kill qilish requestlarni uzadi.
Zone-aware routing
Clientga yaqin yoki ayni availability zone’dagi instance tanlanadi.
Bu latency va cross-zone network xarajatini kamaytiradi.
Biroq bir zone overloaded bo‘lsa traffic boshqa zone’ga tarqatiladi.
Version routing
Load balancer metadata asosida ma’lum versionga traffic yuborishi mumkin.
Qo‘llanishlar:
- canary;
- blue-green;
- header-based test;
- tenant rollout.
Version routing authorization bilan aralashmasligi kerak.
Load balancer failure
Load balancer high availability bilan deploy qilinadi.
Bir nechta instance, virtual IP, managed service yoki anycast ishlatilishi mumkin.
Registry va config ham redundant bo‘ladi.
Observability
Kuzatiladi:
- healthy backend soni;
- routing error;
- connection failure;
- per-instance latency;
- request distribution;
- retry;
- zone;
- deregistration delay.
Load notekis bo‘lsa algorithm yoki persistent connection ta’siri tekshiriladi.
Security
Client load balancerga, load balancer backendga autentifikatsiya qilishi mumkin.
mTLS va service identity ishlatiladi.
Registry write permissioni cheklanadi.
Zararli instance o‘zini qonuniy service sifatida ro‘yxatdan o‘tkaza olmasligi kerak.
Connection draining
Backend instance registry’dan chiqarilgach load balancer yangi connection yubormaydi.
Mavjud keep-alive va uzoq requestlar uchun grace period beriladi.
Timeout tugagach qolgan connectionlar yopilishi mumkin.
Passive health
Load balancer real requestlardagi connection error va timeoutlar asosida ham backend healthini baholashi mumkin.
Active health check sog‘lom ko‘rinsa ham haqiqiy endpoint xato berishi mumkin.
Ikkala signal birga ishlatiladi.
Registry security
Instance registration service identity bilan tasdiqlanadi.
Address va metadata allowlistdan o‘tadi.
Aks holda attacker o‘z serverini payment yoki authentication service instance’i sifatida ro‘yxatdan o‘tkazishi mumkin.
Cold start
Yangi instance registry’da healthy bo‘lishidan oldin cache, connection pool yoki runtime warm-up talab qilishi mumkin.
Readiness shu tayyorgarlik tugagach true bo‘ladi.
Aks holda load balancer yangi instance’ga birdan traffic yuborib, timeout yaratadi.
Bog‘liq tushunchalar
Service discovery, Service registry, Load balancer, Health check, Client-side discovery, DNS, Routing, Graceful shutdown, Microservices, Service mesh