Quy trình tách Monolith thành Microservice

Tách microservice nghe dễ, nhưng tách xong cả team thức đêm debug đó em ơi!

Một công ty logistics Việt Nam dùng Monolith Node.js, quyết định tách Order Service để scale riêng. Họ tách từng bước: identify boundary, extract DB, API hóa, deploy riêng. Kết quả: Order Service chạy mượt, nhưng team học được rằng “tách không phải trò đùa”.


Quy trình tách Monolith

  1. Identify boundaries: Tìm module ít phụ thuộc (VD: Order không cần gọi User liên tục).  
  2. Extract DB access: Tách logic DB của module thành repository layer.  
  3. API hóa: Chuyển logic module thành API (REST/gRPC).  
  4. Deploy riêng: Chạy module như service độc lập, dùng Docker/Kubernetes.  
  5. Test & monitor: Thêm tracing, logging để debug lỗi distributed.

Ví dụ thực tế: App logistics tách Order Service:  
  • Boundary: Module Order chỉ cần user_id từ User Service.  
  • DB: Tách table orders sang PostgreSQL riêng.  
  • API: Order Service expose /orders endpoint.  
  • Deploy: Chạy trên Kubernetes, monitor bằng Prometheus.

Code mẫu: Order Service API

// order-service/index.js
app.post('/orders', async (req, res) => {
    const { userId, items } = req.body;
    const order = await OrderModel.create({ userId, items });
    res.json(order);
});


Góc nhìn CTO

Tách microservice là “cuộc chiến dài hơi”. Bắt đầu từ module đơn giản, tách từng bước, và luôn có plan B (rollback). Đừng tách cả hệ thống cùng lúc, trừ khi bạn thích drama!

Checklist tách microservice:  
  • Xác định module ít phụ thuộc (VD: Order, Notification).  
  • Tách DB access thành repository layer.  
  • Test API riêng trước khi deploy.  
  • Thêm tracing (Jaeger) và logging (ELK).
🎯 Tóm lại: Tách Monolith thành microservice là “phẫu thuật” cần cẩn thận. Làm từng bước, test kỹ, để không biến prod thành “bãi chiến trường”!

Post a Comment

Mới hơn Cũ hơn