Microservices — nima va qachon kerak
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