Tizim dizayni kursi · 8-mavzu
TuzdiDinMuhammad

API Gateway — yagona aqlli kirish nuqtasi

Ko‘p mikroservis va ko‘p mijoz bo‘lganda, barcha so‘rovlar uchun bitta kirish nuqtasi qo‘yib, umumiy vazifalarni (auth, rate limit, SSL, aggregation) markazlashtiramiz. Noldan boshlab gateway vazifalari, NestJS implementatsiyasi, BFF naqshi, tayyor yechimlar va asosiy tuzoqlarni (SPOF, biznes logika) o‘rganamiz.

Stack: NestJS · throttler · ClientProxyMavzular: routing · auth · aggregation · BFFBog‘liq: 1-mavzu (Mikroservis), 5 (LB)

Bu darsda nima bor

1–4-qismlar API Gateway’ni noldan quradi: nega kerak, yagona kirish nuqtasi, cross-cutting vazifalar va NestJS implementatsiya (auth, rate limit, aggregation). 5–6-qismlar — naqshlar (BFF) va tayyor yechimlar (Kong vs proxy vs mesh). 7-qism asosiy tuzoqlar (SPOF, biznes logika) va qoidalar.

01
API Gateway · qism 1

Nega kerak — ko‘p xizmat, ko‘p mijoz

🛂

Oddiy o‘xshatish: katta binoning yagona qabulxonasi va qo‘riqchisi. Mehmon har bir xonani alohida izlamaydi — qabulxonaga keladi, hujjati tekshiriladi, kerakli bo‘limga yo‘naltiriladi.

Mikroservislaringiz bor (1-mavzu): Auth, Katalog, Buyurtma, To‘lov, Bildirishnoma. Mobil ilova va veb ular bilan bevosita gaplashadi.

Muammo

1. Mijoz har bir xizmatning manzilini bilishi kerak (5 ta xizmat = 5 ta endpoint).
2. Har bir xizmat bilan alohida autentifikatsiya, SSL, rate limit bilan shug‘ullanadi.
3. Bitta ekran uchun mijoz 5 ta alohida so‘rov yuboradi (sekin, ayniqsa mobil tarmoqda).
4. Ichki tuzilma o‘zgarsa (xizmat ko‘chsa, bo‘linsa) — barcha mijozlarni yangilash kerak. Ichki arxitektura tashqariga "sizib chiqadi".

Yechim — API Gateway

Barcha so‘rovlar uchun yagona kirish nuqtasi qo‘yish. Gateway so‘rovni to‘g‘ri xizmatga yo‘naltiradi (routing) va barcha umumiy vazifalarni markazlashtiradi: autentifikatsiya, rate limiting, SSL, logging, kesh, hatto bir nechta xizmatdan javobni yig‘ish.

02
API Gateway · qism 2

Asosiy g‘oya — yagona kirish nuqtasi

Gateway — mijoz va mikroservislar o‘rtasidagi yagona oraliq qatlam. Tashqi dunyo faqat gateway bilan gaplashadi; ichki xizmatlar yashirin qoladi.

Mobil Web 3-tomon API Gatewayauth · limit · routingSSL · log · cache Auth xizmati Buyurtma To‘lov
Bitta darvoza — umumiy vazifalar markazda, ichki xizmatlar yashirin

Natija: mijoz bitta manzilni biladi (api.sayt.uz), umumiy vazifalar bir joyda, ichki arxitektura erkin o‘zgaradi. Har bir xizmat esa faqat o‘z biznes logikasiga e’tibor qaratadi.

North-south vs east-west

Gateway tashqi trafikni boshqaradi (mijoz ↔ tizim — "north-south"). Xizmatlararo ichki trafik (service ↔ service — "east-west") esa service mesh (5-mavzu) yoki to‘g‘ridan-to‘g‘ri aloqa bilan. Ikkalasi turli vazifa.

03
API Gateway · qism 3

Gateway vazifalari (cross-cutting)

Gateway "cross-cutting" (har xizmatda takrorlanadigan) vazifalarni o‘ziga oladi. Asosiylari:

VazifaNima qiladi
RoutingSo‘rovni to‘g‘ri xizmatga yo‘naltirish (URL/header bo‘yicha)
Auth (autentifikatsiya/avtorizatsiya)Token tekshiruvi — bir marta, markazda
Rate limiting / throttlingSo‘rov sonini cheklash (himoya, adolatli foydalanish)
SSL/TLS terminationHTTPS’ni gateway’da ochish (ichki xizmatlar oddiy HTTP)
AggregationBir nechta xizmat javobini bitta javobga birlashtirish
CachingTez-tez so‘raladigan javoblarni keshlash (4-mavzu)
TransformationSo‘rov/javob formatini o‘zgartirish (protokol, versiya)
Logging / monitoringMarkazlashgan log, metrika, tracing (12-mavzu)
Nega markazlashtirish foydali

Bu vazifalar har bir xizmatda takrorlansa — kod dublikati, nomuvofiqlik va xato manbai. Gateway’da bir marta yozilsa: token tekshiruvi faqat gateway’da bo‘ladi, ichki xizmatlar uni ishonchli deb qabul qiladi (zona ichidagi ishonch). Yangi siyosat (masalan, yangi rate limit) — bitta joyda o‘zgaradi.

04
API Gateway · qism 4

NestJS implementatsiya

auth · throttler · aggregation

1-mavzudagi gateway’ni kengaytiramiz: endi unga auth, rate limiting va aggregation qo‘shamiz.

1 · Auth — markazda bir marta

// AUTH gateway'da bir marta tekshiriladi -> ichki xizmatlar qayta tekshirmaydi
@Injectable()
export class JwtAuthGuard implements CanActivate {
  constructor(private jwt: JwtService) {}
  canActivate(ctx: ExecutionContext): boolean {
    const req = ctx.switchToHttp().getRequest();
    const token = req.headers.authorization?.split(' ')[1];
    if (!token) throw new UnauthorizedException();
    req.user = this.jwt.verify(token);   // payload ichki xizmatlarga uzatiladi
    return true;
  }
}

2 · Rate limiting — markazlashgan himoya

// RATE LIMITING markazlashgan (@nestjs/throttler)
@Module({
  imports: [
    ThrottlerModule.forRoot([{ ttl: 60_000, limit: 100 }]),  // 60s da 100 so'rov
  ],
  providers: [{ provide: APP_GUARD, useClass: ThrottlerGuard }],
})
export class GatewayModule {}

3 · Routing va aggregation

// ROUTING + AGGREGATION — gateway controller
@Controller()
@UseGuards(JwtAuthGuard)              // butun gateway auth ostida
export class GatewayController {
  constructor(
    @Inject('USERS')  private users: ClientProxy,
    @Inject('ORDERS') private orders: ClientProxy,
  ) {}

  // ROUTING: shunchaki to'g'ri xizmatga uzatish
  @Get('orders/:id')
  getOrder(@Param('id') id: string) {
    return this.orders.send({ cmd: 'get_order' }, id);
  }

  // AGGREGATION: bitta so'rov -> bir nechta xizmat -> BITTA birlashgan javob
  @Get('dashboard')
  async dashboard(@CurrentUser() userId: string) {
    const [profile, orders] = await Promise.all([
      firstValueFrom(this.users.send({ cmd: 'get_user' }, userId)),
      firstValueFrom(this.orders.send({ cmd: 'get_user_orders' }, userId)),
    ]);
    return { profile, orders };       // mijoz 1 ta so'rov yubordi, 1 ta javob oldi
  }
}
Aggregation’ning kuchi

"Dashboard" ekrani uchun mobil ilova bitta so‘rov yuboradi; gateway orqada 2-3 xizmatga parallel borib (Promise.all), javoblarni birlashtiradi. Mobil tarmoqda bu — 3 ta sekin so‘rov o‘rniga 1 ta tez so‘rov. Bu — keyingi bo‘limdagi BFF naqshining yuragi.

05
Chuqurlashtirilgan mavzu

Naqshlar va BFF

BFF · aggregation · offloading
📱

Bitta gateway barcha mijozlarga xizmat qilsa, u "hammaga yoqishga urinib" shishib ketadi. Mobil va veb ehtiyojlari boshqacha — BFF aynan shuni hal qiladi.

Gateway naqshlari

  • Gateway Routing — so‘rovlarni xizmatlarga yo‘naltirish (eng oddiy vazifa).
  • Gateway Aggregation — bir nechta xizmat javobini birlashtirish (4-bo‘limdagidek).
  • Gateway Offloading — umumiy vazifalarni (auth, SSL, log) xizmatlardan gateway’ga ko‘chirish.

BFF — Backend for Frontend

Bitta universal gateway o‘rniga — har mijoz turi uchun alohida gateway: Mobile BFF, Web BFF. Har biri o‘sha mijozning ehtiyojiga moslangan javob beradi (mobil — kichik, ixcham; veb — boy). Ortida esa bir xil mikroservislar.

Mobil ilova Veb ilova Mobile BFF Web BFF Umumiy mikroservislar (Auth, Order, ...)
BFF: har mijoz turiga moslangan gateway, ortida bir xil xizmatlar
Qachon BFF

Mijoz turlari ehtiyoji jiddiy farq qilganda (mobil cheklangan tarmoq/ekran, veb boy, 3-tomon API boshqacha). Aks holda bitta gateway yetadi — BFF ham qo‘shimcha kod va xizmatlar demak.

06
Chuqurlashtirilgan mavzu

Tayyor yechimlar va taqqoslash

Kong · proxy vs mesh
🧰

Gateway’ni noldan yozish shart emas — yetuk yechimlar bor. Va uni reverse proxy hamda service mesh’dan farqlash muhim.

Gateway vs Reverse Proxy vs Service Mesh

Reverse Proxy (Nginx)API GatewayService Mesh
DarajaL7, oddiyL7, ilova-xabardorSidecar (ichki)
TrafikNorth-southNorth-southEast-west (ichki)
AsosiyYo‘naltirish, SSLAuth, limit, aggregation, transformmTLS, retry, kuzatuv
MisolNginx, HAProxyKong, AWS API GW, ApigeeIstio, Linkerd
Tayyor gateway yechimlari

Kong (Nginx/Lua asosida, plugin’lar bilan), AWS API Gateway (boshqariladigan, serverless’ga mos), Apigee (korporativ), Tyk, Spring Cloud Gateway. Ular auth, rate limit, kesh, log’ni plugin/konfiguratsiya orqali beradi — kod yozmaysan.

O‘zing yozish vs tayyor

Oddiy ehtiyoj (routing + auth + aggregation) va NestJS’da qulay bo‘lsa — kichik gateway’ni o‘zing yozishing mumkin (4-bo‘limdagidek). Murakkab siyosatlar, plugin’lar, korporativ talab bo‘lsa — tayyor gateway (Kong/cloud) tejaydi. Lekin har ikki holda ham — biznes logikasini gateway’ga solma (keyingi bo‘lim).

07
Qaror

Tuzoqlar va amaliy qoidalar

Gateway kuchli, lekin ikki katta tuzog‘i bor — ularni bilmaslik tizimni yomonlashtiradi.

Tuzoq 1 — Gateway SPOF/bottleneck

Butun trafik gateway’dan o‘tadi. U o‘lsa — hamma narsa to‘xtaydi; sekinlashsa — hamma sekinlashadi. Yechim: gateway’ni stateless qil va bir nechta nusxasini load balancer ostida ishlat (5-mavzu). Hech qachon bitta gateway nusxasiga tayanma.

Tuzoq 2 — Biznes logikasi gateway’da (eng katta xato)

Gateway’ga asta-sekin biznes qoidalari, ma’lumot transformatsiyasi, hatto DB so‘rovlari qo‘shila boshlaydi. Natijada gateway yashirin monolitga aylanadi — hamma xizmat unga bog‘lanadi, uni o‘zgartirish qo‘rqinchli bo‘ladi. Qoida: gateway faqat cross-cutting vazifalarni bajarsin (routing, auth, limit, aggregation). Biznes logika — xizmatlarda.

Qachon kerak va amaliy qoidalar

Kerak: bir nechta mikroservis + bir nechta mijoz turi bo‘lganda. Kerak emas: bitta monolit — oddiy reverse proxy (Nginx) yetadi, to‘liq gateway ortiqcha.

1. Gateway’ni stateless qil + LB ostiga (SPOF bo‘lmasin).

2. Faqat cross-cutting vazifa — biznes logika yo‘q.

3. Ichki xizmat chaqiruvlariga timeout + retry + circuit breaker (14-mavzu) — bitta sekin xizmat gateway’ni bloklamasin.

4. Qo‘shimcha "hop" kechikish qo‘shadi — aggregation va keshlash bilan buni qopla.

08
Yakuniy

Eslab qolish kerak bo‘lgan 5 jumla

  • API Gateway = barcha so‘rovlar uchun yagona aqlli kirish nuqtasi. U routing + cross-cutting vazifalarni (auth, rate limit, SSL, aggregation, log) markazlashtiradi.
  • Foydasi: mijoz ichki tuzilmani bilmaydi, umumiy vazifa bir joyda, ichki arxitektura erkin o‘zgaradi. Gateway = north-south; mesh = east-west.
  • Aggregation mobil uchun ayniqsa qimmatli (3 so‘rov → 1). BFF — har mijoz turiga moslangan gateway.
  • Tayyor yechimlar: Kong, AWS API Gateway, Apigee. Oddiy holatda NestJS’da o‘zing yozasan. Reverse proxy va mesh’dan farqla.
  • Ikki tuzoq: gateway SPOF (→ stateless + LB) va biznes logika gateway’da (→ faqat cross-cutting, logika xizmatlarda).

Bu mavzuning Deep/Senior qatlami (gateway HA va masshtab, auth chuqur — OAuth2/OIDC/mTLS, rate limit algoritmlari, plugin arxitektura, gRPC/WebSocket gateway, canary/versiyalash, Kong/Envoy gateway sozlash) kerak bo‘lsa — ayting.

Yoki keyingi mavzu: “9-mavzu: CQRS” — o‘qish va yozishni ajratish.