Back to articles
Technology Insight

Cấu Hình Caddy Layer4 Để Cân Bằng Tải Cho Các Ứng Dụng Ngoài Web

May 30, 2026

Giới Thiệu Về Cân Bằng Tải Ở Tầng Giao Vận (Layer 4)

Trong kiến trúc hệ thống hiện đại, khi nhắc đến Reverse Proxy và Load Balancing, phần lớn các kỹ sư thường nghĩ ngay đến tầng ứng dụng (Layer 7) với giao thức HTTP/HTTPS. Tuy nhiên, đối với các dịch vụ doanh nghiệp cốt lõi không thuộc nền tảng Web – chẳng hạn như hệ quản trị cơ sở dữ liệu (MySQL, PostgreSQL), máy chủ điều khiển từ xa (SSH), hệ thống IoT Broker (MQTT), hoặc các ứng dụng chạy Socket TCP/UDP tùy biến – việc xử lý lưu lượng ở tầng ứng dụng trở nên bất khả thi hoặc không tối ưu.

Đây chính là lúc cân bằng tải ở tầng giao vận (Layer 4 Load Balancing) phát huy sức mạnh. Ở tầng này, bộ cân bằng tải không quan tâm đến nội dung bên trong gói tin (như HTTP Headers, Cookies, hay URI Paths) mà chỉ tập trung điều phối các kết nối dựa trên thông tin IP nguồn, IP đích, và Port thông qua giao thức TCP hoặc UDP. Phương pháp này mang lại tốc độ xử lý vượt trội, độ trễ cực thấp và tính bảo mật cao do không cần giải mã dữ liệu của ứng dụng.

Mặc dù Caddy Server nổi tiếng với khả năng tự động cấp phát chứng chỉ SSL/TLS và cấu hình HTTP siêu tối giản, nền tảng này hoàn toàn có thể trở thành một Layer 4 Load Balancer mạnh mẽ nhờ vào module mở rộng mang tên caddy-l4 (hay còn gọi là Project Conncept). Bài viết này sẽ hướng dẫn bạn toàn tập cách cài đặt, cấu hình, và tối ưu hóa Caddy cho các ứng dụng ngoài Web.

---

Tại Sao Chọn Caddy Layer4 Cho Các Dịch Vụ Phi HTTP?

Mặc dù HAProxy và Nginx từ lâu đã là những tượng đài trong giới Layer 4 proxy, Caddy với module caddy-l4 sở hữu những lợi thế cạnh tranh chiến lược, đặc biệt phù hợp với các hạ tầng Cloud-native hiện đại:

  • Cấu trúc Modular đồng nhất: Bạn có thể quản lý cả dịch vụ Web (Layer 7) và dịch vụ phi Web (Layer 4) trong cùng một tiến trình Caddy duy nhất, giảm thiểu độ phức tạp khi vận hành hệ thống.
  • Tích hợp TLS Automation: Caddy có khả năng tự động hóa việc cấu hình và gia hạn chứng chỉ SSL/TLS (thông qua Let's Encrypt hoặc ZeroSSL) ngay cả khi hoạt động ở Layer 4 (TLS Termination), một tính năng mà các Proxy truyền thống đòi hỏi cấu hình rất phức tạp.
  • Cấu hình động qua API Restful: Giống như lõi của Caddy, module Layer4 hỗ trợ thay đổi cấu hình theo thời gian thực (Zero-downtime) thông qua các lệnh gọi JSON API, rất thích hợp cho việc tích hợp vào hệ thống CI/CD hoặc Service Discovery.
  • Hiệu năng ngôn ngữ Go: Được viết bằng Go, Caddy tận dụng tối đa cơ chế Concurrency (Goroutines) giúp xử lý hàng vạn kết nối đồng thời với lượng tài nguyên RAM và CPU cực kỳ tiết kiệm.
---

Hướng Dẫn Biên Dịch Caddy Với Module Layer4

Mặc định, bản phân phối tiêu chuẩn của Caddy không đi kèm module Layer 4. Do đó, để sử dụng tính năng này, chúng ta cần biên dịch lại Caddy bằng công cụ chính thức xcaddy hoặc tải về từ trang chủ của dự án.

Bước 1: Cài đặt công cụ Go và Xcaddy

Để biên dịch trên môi trường Linux (Ubuntu/Debian), bạn thực hiện các lệnh sau:

sudo apt update && sudo apt install -y golang-go
go install [github.com/caddyserver/xcaddy/cmd/xcaddy@latest](https://github.com/caddyserver/xcaddy/cmd/xcaddy@latest)

Bước 2: Tiến hành biên dịch Caddy L4

Sử dụng lệnh xcaddy build kết hợp với cờ --with để tích hợp module [github.com/mholt/caddy-l4](https://github.com/mholt/caddy-l4) vào gói nhị phân:

~/go/bin/xcaddy build --with [github.com/mholt/caddy-l4](https://github.com/mholt/caddy-l4)

Sau khi tiến trình hoàn tất, bạn sẽ thu được một file thực thi mang tên caddy ngay tại thư mục hiện hành. Bạn có thể kiểm tra xem module Layer4 đã được tích hợp thành công hay chưa bằng cách chạy lệnh:

./caddy list-modules | grep layer4
---

Cấu Hình Cân Bằng Tải Chi Tiết: Case Study Hệ Quản Trị Cơ Sở Dữ Liệu

Caddy hỗ trợ cả định dạng cấu hình Caddyfile truyền thống (thông qua khối listener_wrappers ở phiên bản mới) và định dạng mã nguồn JSON Native (khuyến khích cho các kịch bản Layer 4 phức tạp). Để đảm bảo tính tường minh và trực quan cho doanh nghiệp, chúng ta sẽ sử dụng cấu trúc cấu hình chuẩn JSON nhằm thiết lập một hệ thống cân bằng tải cho cụm cluster PostgreSQL gồm 3 node hoạt động tại cổng mặc định 5432.

Mẫu File Cấu Hình JSON (caddy_l4.json)

Dưới đây là file cấu hình hoàn chỉnh để điều phối lưu lượng kết nối cơ sở dữ liệu:

{
  "apps": {
    "layer4": {
      "servers": {
        "postgres_lb": {
          "listen": ["0.0.0.0:5432"],
          "routes": [
            {
              "handle": [
                {
                  "handler": "proxy",
                  "upstreams": [
                    { "dial": ["10.0.1.10:5432"] },
                    { "dial": ["10.0.1.11:5432"] },
                    { "dial": ["10.0.1.12:5432"] }
                  ],
                  "load_balancing": {
                    "selection": {
                      "policy": "round_robin"
                    }
                  },
                  "health_checks": {
                    "active": {
                      "interval": "5s",
                      "timeout": "2s"
                    },
                    "passive": {
                      "fail_duration": "10s"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}
---

Phân Tích Các Thành Phần Cấu Hình Cốt Lõi

1. Khối Khởi Tạo apps.layer4.servers

Phần này định nghĩa một máy chủ Layer 4 riêng biệt trong kiến trúc của Caddy. Ở ví dụ trên, chúng ta đặt tên định danh nội bộ là postgres_lb. Thuộc tính listen chỉ định Caddy sẽ mở một Socket và lắng nghe trên toàn bộ các giao diện mạng (0.0.0.0) tại cổng 5432 để tiếp nhận mọi kết nối từ các Client ứng dụng.

2. Thành Phần Điều Hướng Khách Hàng (Routes & Handlers)

Trong mảng routes, chúng ta khai báo các handlers. Đối với bài toán cân bằng tải, handler bắt buộc phải là "proxy". Thuộc tính upstreams là danh sách các địa chỉ IP của các máy chủ Backend (Database nodes) thực tế nằm trong mạng nội bộ mà Caddy sẽ chuyển tiếp dữ liệu đến.

3. Các Chính Sách Cân Bằng Tải (Load Balancing Policies)

Caddy Layer4 cung cấp nhiều thuật toán phân phối lưu lượng thông qua cấu hình load_balancing.selection.policy. Tùy thuộc vào đặc thù ứng dụng, doanh nghiệp có thể lựa chọn một trong các chính sách sau:

Tên Thuật Toán (Policy)Cơ Chế Hoạt ĐộngTrường Hợp Sử Dụng Tối Ưu
round_robinLuân chuyển vòng tròn đều qua từng máy chủ backend trong danh sách.Các máy chủ backend có cấu hình phần cứng tương đương nhau.
least_connChuyển hướng kết nối mới đến máy chủ hiện đang có ít Client kết nối nhất.Các tác vụ xử lý có thời gian duy trì kết nối dài ngắn không đều (như SSH, SQL nặng).
randomLựa chọn ngẫu nhiên một máy chủ backend có trạng thái hoạt động tốt.Hạ tầng phân tán quy mô lớn, tải không quá đặc thù.
ip_hashDựa vào địa chỉ IP của Client để băm (hash) và chỉ định cố định vào một Backend.Ứng dụng yêu cầu tính nhất quán dữ liệu phiên làm việc (Session Sticky).

4. Cơ Chế Giám Sát Trạng Thái (Health Checks)

Để đảm bảo tính sẵn sàng cao (High Availability), Caddy tích hợp hai cơ chế giám sát sức khỏe backend song song:

  • Active Health Check (Giám sát chủ động): Cứ mỗi 5 giây ("interval": "5s"), Caddy sẽ chủ động thiết lập một kết nối thử nghiệm đến các node backend. Nếu trong vòng 2 giây ("timeout": "2s") backend không phản hồi, Caddy sẽ tự động đánh dấu node đó là lỗi và cô lập khỏi danh sách nhận tải.
  • Passive Health Check (Giám sát thụ động): Trong quá trình vận hành thực tế, nếu một kết nối của người dùng đến backend bị sập hoặc lỗi kết nối, Caddy sẽ ghi nhận và không gửi thêm traffic tới backend đó trong vòng 10 giây tiếp theo ("fail_duration": "10s").
---

Vận Hành Và Triển Khai Hệ Thống

Để khởi chạy Caddy với file cấu hình JSON vừa thiết lập, bạn sử dụng lệnh CLI tiêu chuẩn của Caddy như sau:

./caddy run --config caddy_l4.json

Nếu hệ thống của bạn đang chạy và bạn thực hiện tinh chỉnh cấu hình (ví dụ: bổ sung thêm một máy chủ database thứ 4 vào cụm cluster), bạn không cần phải khởi động lại service (tránh gây gián đoạn kết nối). Hãy thực hiện lệnh nạp lại cấu hình mượt mà (Graceful Reload):

./caddy reload --config caddy_l4.json

Lúc này, lõi của Caddy sẽ tự động phân tích cấu trúc mới, duy trì các kết nối cũ đang hoạt động ở các node hiện tại, và áp dụng ngay lập tức các kết nối mới vào sơ đồ phân phối vừa cập nhật.

---

Kết Luận

Sử dụng Caddy Layer4 mang lại một giải pháp thay thế tinh gọn, hiện đại và vô cùng mạnh mẽ cho các hệ thống cân bằng tải truyền thống. Khả năng xử lý trực tiếp ở tầng giao vận giúp tối ưu hóa hiệu năng cho các dịch vụ phi Web cốt lõi như Database, MQTT Broker hay các cổng kết nối API nội bộ của doanh nghiệp. Bằng việc kết hợp nhuần nhuyễn các chính sách cân bằng tải linh hoạt như Least Connections cùng các lớp giám sát Health Check nghiêm ngặt, bạn hoàn toàn có thể xây dựng một hạ tầng có tính sẵn sàng cao, sẵn sàng đáp ứng hàng triệu yêu cầu từ người dùng với độ trễ tối thiểu.

Cấu Hình Caddy Layer4 Để Cân Bằng Tải Cho Các Ứng Dụng Ngoài Web | DPTCloud