Microservices — nima va qachon kerak

~15 daq · NestJS · Ilg'or mavzular

Muammodan boshlaylik

Kichik loyiha yozdingiz. Hammasi bitta serverda — qulay va sodda:

src/
  users/
  orders/
  payments/
  notifications/

Loyiha o'sdi. Foydalanuvchilar ko'paydi. Muammolar paydo bo'la boshladi:

1. Deploy muammosi. To'lov tizimida bitta qator o'zgardi — butun ilovani to'xtatib, qaytadan deploy qilish kerak. Foydalanuvchilar 5 daqiqa xizmatdan uzilib qoladi.

2. Sekinlik tarqaladi. Bildirishnomalar tizimi sekin ishlayapti — serverda resurslar yetishmayapti. Natijada barcha endpointlar sekinlashdi.

3. Bir xil kod bazasi. 8 dasturchi bitta loyihada ishlayapti. Har kuni kod conflictlari, har deploy da kimdir boshqasini kutadi.


Microservices nima?

Microservices — bitta katta ilova o'rniga, kichik mustaqil ilovalar to'plami. Har bir qism alohida dastur sifatida ishlaydi.

Monolith (bitta ilova):         Microservices:
──────────────────────          ──────────────────────────────
┌──────────────────┐            ┌──────────┐  ┌──────────┐
│  users           │            │  Users   │  │  Orders  │
│  orders          │    →       │  :3001   │  │  :3002   │
│  payments        │            └──────────┘  └──────────┘
│  notifications   │            ┌──────────┐  ┌──────────┐
└──────────────────┘            │ Payments │  │  Notify  │
                                │  :3003   │  │  :3004   │
                                └──────────┘  └──────────┘

Har bir servis:

  • Alohida port da ishlaydi
  • Alohida deploy qilinadi
  • Alohida scale qilinadi
  • Alohida jamoaga tegishli

Hayotiy o'xshatma

Katta do'kon. Kichik do'konda hamma narsa bitta xonada — kassir, sotuvchi, ombor barchasi bir joyda. Do'kon o'sdi. Endi alohida kassa bo'limi, alohida ombor, alohida savdo zali. Kassa sekin ishlasa — ombor ta'sirlanmaydi. Savdo zalini kengaytirish — kassaga ta'sir qilmaydi.


Qachon Microservices kerak?

Microservices har doim ham yaxshi emas. Kichik loyihalarda aksincha — murakkablikni oshiradi.

Monolith Microservices
Boshlang'ich loyiha O'sgan, katta loyiha
Kichik jamoa (1-5 kishi) Ko'p jamoa (har servisda o'z jamoasi)
Tez boshlash muhim Mustaqil deploy muhim
Kam traffic Yuqori yuk, turli qismlar uchun turli scale

⚠️ "Microservices bilan boshlaymiz" — keng tarqalgan xato. Avval monolith yozing, kerak bo'lganda ajrating.


Servislar qanday gaplashadi?

Servislar alohida ishlagandan keyin yangi savol tug'iladi: ular bir-biri bilan qanday aloqa qiladi?

Ikki asosiy usul:

1. HTTP — to'g'ridan-to'g'ri so'rov-javob
   Orders Service  ──HTTP──►  Inventory Service
   "mahsulot bormi?"           "ha, 5 ta bor"

2. Message Queue — xabar navbati orqali
   Orders Service  ──►  [RabbitMQ]  ──►  Notify Service
   "order.created"                         email yuboradi

HTTP — javob darhol kerak bo'lganda. Sodda va tushunish oson.

Message Queue — javob kutish shart bo'lmaganda, yoki xabar ishonchli yetkazilishi kerak bo'lganda.

Keyingi dars RabbitMQ — message queue haqida.


Xulosa

  • Microservices — har qism alohida ilova, alohida deploy
  • Kichik loyihalarda monolith yaxshiroq — oddiyroq va tezroq
  • Katta loyihalarda microservices: mustaqil deploy, mustaqil scale
  • Servislar HTTP yoki Message Queue orqali gaplashadi

Keyingi dars: 40-dars: RabbitMQ — servislar orasida xabar almashish