Monolith vs Microservices
Monolit va mikroservislar
Bitta katta universal do'konni tasavvur qiling: oziq-ovqat, kiyim, elektronika — hammasi bitta binoda. Endi buning o'rniga, har biri o'z sohasiga ixtisoslashgan kichik do'konlar tarmog'ini tasavvur qiling: alohida oziq-ovqat do'koni, alohida kiyim do'koni. Ikkalasining ham afzalligi bor: universal do'konda hamma narsa bir joyda, boshqarish oson; kichik do'konlarda esa har biri o'z ishiga chuqur ixtisoslashgan, va bittasi yopilsa boshqalari ishlashda davom etadi.
Monolit (monolith) — butun ilova BITTA dastur, bitta kod bazasi, bitta joylashtirish birligi sifatida yoziladi ("Go Basics" kursidan boshlab shu paytgacha yozgan barcha loyihalaringiz — monolit edi). Mikroservis (microservice) arxitekturasida esa ilova bir nechta KICHIK, mustaqil xizmatlarga bo'linadi, har biri o'z vazifasiga ega va boshqalardan mustaqil joylashtiriladi.
package main
import "fmt"
// Monolit: bitta dastur ichida hamma funksiya birga
type MonolithApp struct{}
func (m *MonolithApp) HandleOrder() string { return "buyurtma qabul qilindi (monolit ichida)" }
func (m *MonolithApp) HandlePayment() string { return "to'lov amalga oshirildi (monolit ichida)" }
// Mikroservis: har bir vazifa ALOHIDA, mustaqil xizmat
type OrderService struct{}
func (s *OrderService) Handle() string { return "buyurtma qabul qilindi (alohida servis)" }
type PaymentService struct{}
func (s *PaymentService) Handle() string { return "to'lov amalga oshirildi (alohida servis)" }
func main() {
m := &MonolithApp{}
fmt.Println(m.HandleOrder())
order := &OrderService{}
payment := &PaymentService{}
fmt.Println(order.Handle())
fmt.Println(payment.Handle())
}Monolitning afzalligi: yozish va sinash SODDA (bitta dastur, bitta go run), funksiyalar orasida chaqiruv oddiy funksiya chaqiruvi (tez, ishonchli). Kamchiligi: dastur kattalashgani sari, uni tushunish va o'zgartirish qiyinlashadi, va kichik o'zgarish uchun ham BUTUN dasturni qayta joylashtirish kerak bo'ladi.
Mikroservisning afzalligi: har bir xizmat mustaqil rivojlantiriladi va joylashtiriladi (masalan OrderServiceni yangilash uchun PaymentServicega tegish shart emas), va har bir xizmat o'ziga kerakli miqdorda resurs (server) bilan mustaqil kengaytiriladi. Kamchiligi: xizmatlar orasidagi aloqa endi oddiy funksiya chaqiruvi emas, balki tarmoq orqali (HTTP, keyingi darslarda ko'ramiz) — bu sekinroq va ishonchsizroq (tarmoq uzilishi mumkin).
>_ Exercise
InventoryService (ombor xizmati)ni qo'shing.
- •InventoryService struct'ini yozing, Handle() metodi "ombor tekshirildi (alohida servis)" qaytarsin
- •OrderService, PaymentService va InventoryService'ni chaqirib, har birining natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Monolit — bitta dastur, sodda, lekin kattalashganda boshqarish qiyinlashadi; mikroservislar — mustaqil kichik xizmatlar, moslashuvchan, lekin tarmoq orqali aloqa murakkabligini qo'shadi.
NEXT UP
Service Boundaries
$ go run main.go
Kodingizni ishga tushiring