Microservices Cheat Sheet

Microservices là kiến trúc chia ứng dụng thành các dịch vụ nhỏ, độc lập, giao tiếp qua API, dễ mở rộng và triển khai riêng lẻ.

Nguyên tắc thiết kế (Design Principles)

Nguyên tắc Mô tả Ví dụ
Đơn trách nhiệm Mỗi dịch vụ chỉ làm một việc duy nhất Dịch vụ “Order” chỉ xử lý đơn hàng
Độc lập triển khai Có thể cập nhật một dịch vụ mà không ảnh hưởng dịch vụ khác Cập nhật “Payment” không dừng “User”
Phi trạng thái Dịch vụ không lưu trạng thái, dùng cơ sở dữ liệu bên ngoài Trạng thái phiên lưu trong Redis
Giao tiếp nhẹ Dùng API REST hoặc message queue thay vì giao thức nặng REST qua HTTP hoặc RabbitMQ
Cơ sở dữ liệu riêng Mỗi dịch vụ có database riêng, không chia sẻ “Order” dùng PostgreSQL, “User” dùng MongoDB

Công cụ và công nghệ phổ biến (Tools & Technologies)

Công cụ Mục đích Ví dụ sử dụng
Docker Đóng gói dịch vụ thành container docker run -d my-service
Kubernetes Quản lý và mở rộng container kubectl apply -f deployment.yaml
API Gateway (Kong, NGINX) Định tuyến và bảo mật API Chuyển “/orders” đến dịch vụ Order
RabbitMQ/Kafka Hàng đợi tin nhắn cho giao tiếp bất đồng bộ Gửi sự kiện “OrderCreated” qua Kafka
Prometheus + Grafana Giám sát và trực quan hóa hiệu suất Theo dõi thời gian phản hồi API

Triển khai Microservices (Deployment)

Ví dụ Dockerfile

FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Giải thích: Đóng gói dịch vụ Node.js, mở cổng 3000.

Ví dụ Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
      - name: order
        image: order-service:1.0
        ports:
        - containerPort: 3000

Giải thích: Triển khai 3 bản sao của dịch vụ “Order”.

Giao tiếp giữa các dịch vụ (Service Communication)

Phương thức Mô tả Ưu điểm Nhược điểm
REST API Giao tiếp đồng bộ qua HTTP Dễ triển khai, phổ biến Độ trễ cao nếu nhiều dịch vụ
gRPC Giao tiếp hiệu suất cao dùng Protocol Buffers Nhanh, hỗ trợ đa ngôn ngữ Phức tạp hơn REST
Message Queue Giao tiếp bất đồng bộ qua hàng đợi Khả năng chịu lỗi tốt Cần quản lý hàng đợi
Event Sourcing Lưu trữ và phát sự kiện thay vì trạng thái Dễ theo dõi lịch sử Khó đồng bộ dữ liệu

Quản lý dữ liệu (Data Management)

Kỹ thuật Mô tả Ví dụ
Database per Service Mỗi dịch vụ có cơ sở dữ liệu riêng “Payment” dùng MySQL, “Inventory” dùng DynamoDB
CQRS Tách Command (ghi) và Query (đọc) Ghi vào PostgreSQL, đọc từ Elasticsearch
Saga Pattern Quản lý giao dịch phân tán qua các bước Choreography: Dịch vụ tự phát sự kiện
Eventual Consistency Đảm bảo dữ liệu nhất quán cuối cùng Cập nhật “Stock” sau khi “Order” hoàn tất

Giám sát và xử lý sự cố (Monitoring & Troubleshooting)

Công cụ/Lệnh Mô tả Ví dụ
docker logs [container] Xem nhật ký container docker logs order-service
kubectl get pods Liệt kê trạng thái pod Kiểm tra pod bị crash
Prometheus Query Truy vấn số liệu hiệu suất rate(http_requests_total[5m])
Distributed Tracing (Jaeger) Theo dõi yêu cầu qua nhiều dịch vụ Xác định độ trễ giữa “Order” và “Payment”

Mẫu triển khai thực tế (Practical Deployment Example)

Cấu trúc hệ thống

  • Order Service: REST API, PostgreSQL, port 3000.
  • Payment Service: gRPC, Redis, port 4000.
  • API Gateway: NGINX, định tuyến /orders → Order, /payments → Payment.
  • Message Queue: Kafka xử lý sự kiện “OrderPlaced”.

Docker Compose

version: '3'
services:
  order:
    image: order-service:1.0
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=postgres
  payment:
    image: payment-service:1.0
    ports:
      - "4000:4000"
    environment:
      - REDIS_HOST=redis
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_USER=order
      - POSTGRES_PASSWORD=secret
  redis:
    image: redis:6

Giải thích: Triển khai Order và Payment với database riêng.

Mẹo triển khai và xử lý sự cố

  • Circuit Breaker: Dùng Hystrix hoặc Resilience4j để tránh lỗi lan truyền.
  • Health Checks: Thêm endpoint /health cho mỗi dịch vụ.
  • Logging: Dùng ELK (Elasticsearch, Logstash, Kibana) để tập trung log.
  • Rollback: Chuẩn bị phiên bản trước trong CI/CD (ví dụ: blue-green deployment).
  • Test: Dùng Chaos Engineering (Chaos Monkey) để kiểm tra độ bền.


Tải xuống cheat sheet

devops.vn

Chung tay xây dựng một cộng đồng DevOps VietNam vững mạnh
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận