DEV Community

Laptop Hưng Phát
Laptop Hưng Phát

Posted on Originally published at technologyspot.vn

Tối ưu Docker Compose cho dàn backend đa dịch vụ khi máy tải nặng

Khi khởi chạy đồng thời PostgreSQL, Redis, Node.js API và frontend Next.js qua Docker Compose trên máy trạm dev, tổng mức tiêu thụ tài nguyên sẽ nhanh chóng vượt ngưỡng an toàn nếu không giới hạn tài nguyên từng container. Trên hệ thống 16GB RAM, Windows/WSL2 thường chiếm dụng từ 4GB đến 6GB, khiến môi trường container dễ rơi vào tình trạng swap disk liên tục khi tải các tác vụ biên dịch hoặc truy vấn nặng.

Cấu hình Docker Compose tối giản kèm giới hạn tài nguyên

Để kiểm soát lượng RAM cấp phát và đảm bảo thứ tự khởi động chính xác giữa database và backend, thiết lập mem_limit kèm healthcheck là bắt buộc:

Ai muốn đối chiếu thêm góc nhìn khác có thể xem bài tương ứng bên ReviewLaptop.

version: '3.8'
services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: app_db
      POSTGRES_PASSWORD: secretpassword
    deploy:
      resources:
        limits:
          memory: 512M
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    deploy:
      resources:
        limits:
          memory: 256M

  api:
    build: ./api
    depends_on:
      postgres:
        condition: service_healthy
    deploy:
      resources:
        limits:
          memory: 1G
    volumes:
      - ./api:/app
      - /app/node_modules

volumes:
  pgdata:
Enter fullscreen mode Exit fullscreen mode

Xử lý nghẽn I/O và tối ưu cơ chế truyền nhiệt dưới tải nặng

Một lỗi hiệu năng phổ biến trên WSL2 là cơ chế bind mount mã nguồn trực tiếp từ ổ Windows (/mnt/c/...) vào container Linux. Khác biệt về filesystem layer khiến các công cụ file watcher (như Nodemon hoặc Vite HMR) tăng đột biến mức sử dụng CPU và phản hồi trễ hàng chục giây. Về mặt kỹ thuật, giải pháp chuẩn xác là đưa toàn bộ workspace vào trong Linux filesystem của WSL2 và dùng named volume cho thư mục node_modules.

Khi chạy stack đa dịch vụ liên tục nhiều giờ liền, CPU và RAM phải duy trì xung nhịp cao, tạo ra mật độ nhiệt rất lớn trên bo mạch. Theo phân tích cơ chế tản nhiệt từ TechnologySpot, các cấu hình chịu tải nặng dài hạn đòi hỏi giải pháp phân tán nhiệt diện rộng như buồng hơi để triệt tiêu các điểm nóng cục bộ tại VRM và chip bán dẫn, ngăn hiện tượng tụt xung nhiệt (thermal throttling).

Nếu thường xuyên chạy stack microservices song song cùng IDE nặng, 32GB RAM kết hợp tản nhiệt buồng hơi là ngưỡng phần cứng cần thiết để loại bỏ triệt để độ trễ và giữ ổn định chu kỳ build.

Top comments (0)