Bosh sahifa Wiki Server-Side Discovery

Server-Side Discovery

Server-Side Discoveryclient 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:

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.

Record:

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:

orqali baholanadi.

Juda og‘ir health check dependencylarga ortiqcha yuk beradi.

Routing algoritmi

Keng tarqalgan algoritmlar:

  • round-robin;
  • least connections;
  • weighted;
  • random;
  • consistent hash;
  • latency-aware.

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:

  1. readiness false;
  2. registry yoki endpointdan chiqarish;
  3. traffic drain;
  4. active requestlarni tugatish;
  5. 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:

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:

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