Skip to content

Cân bằng tải & Gateway

🎯 Câu hỏi cốt lõi

Khi một máy chủ không thể chịu nổi, làm thế nào để phân phối lưu lượng một cách "thông minh" đến nhiều instance máy chủ? Cân bằng tải là "người điều phối" của hệ thống phân tán hiện đại. Bài viết này thông qua các tình huống thực tế (thu ngân quán trà sữa, phân loại chuyển phát nhanh, chỉ huy giao thông) giúp hiểu sâu về triết lý thiết kế và thực tiễn kỹ thuật của cân bằng tải.


1. Tại sao cần "cân bằng tải"?

1.1 Bắt đầu từ một tình huống thực tế: quá trình phát triển kiến trúc của một website

Một công ty khởi nghiệp đã gặp vấn đề hiệu suất nghiêm trọng khi số lượng người dùng tăng nhanh:

Tình huống thực tế:

Giai đoạn 1: Máy chủ đơn
Người dùng → Máy chủ (1 nhân 2G)

      DAU 1000 → Giờ cao điểm: 1000 người cùng truy cập

   Vấn đề: CPU 100%, phản hồi chậm, thường xuyên sập

⚠️ Vấn đề chết người của máy chủ đơn

  • Nút thắt hiệu suất: CPU 100%, thời gian phản hồi > 5 giây
  • Điểm lỗi đơn: Máy chủ sập, toàn bộ website không khả dụng
  • Khó mở rộng: Chỉ có thể nâng cấp dọc (thêm CPU, RAM), đắt đỏ và có giới hạn

Kiến trúc cải tiến (có cân bằng tải):

Giai đoạn 2: Nhiều máy chủ + Cân bằng tải
Người dùng → Cân bằng tải (Nginx)

     ├→ Máy chủ 1 (1 nhân 2G)
     ├→ Máy chủ 2 (1 nhân 2G)
     └→ Máy chủ 3 (1 nhân 2G)

✨ Hiệu quả sau khi cải tiến

  • Nâng cao hiệu suất: 3 máy chủ xử lý song song, thời gian phản hồi < 1 giây
  • Tính sẵn sàng cao: 1 máy chủ sập, các máy khác vẫn phục vụ
  • Mở rộng ngang: Cần thêm hiệu suất? Cứ thêm máy chủ

1.2 Ẩn dụ đời sống về cân bằng tải

Quầy thu ngân quán trà sữa

Hãy tưởng tượng bạn mở một quán trà sữa nổi tiếng:

  • 1 quầy thu ngân: Khách xếp hàng, người phía sau không chờ nổi, đánh giá kém
  • 3 quầy thu ngân: Nhân viên phân bổ khách đến các quầy khác nhau, hiệu suất tăng gấp 3

Cân bằng tải chính là "người phân bổ quầy thu ngân":

  • Người dùng (khách hàng) → Yêu cầu dịch vụ
  • Cân bằng tải (người phân bổ) → Phân phối yêu cầu đến các máy chủ khác nhau
  • Máy chủ (quầy thu ngân) → Xử lý yêu cầu
负载均衡器类型
从四层到七层,从硬件到软件的演进
传统架构单点
🖥️
Web Server
负载: 95% 🔥
负载均衡架构分布式
⚖️L4 Load Balancer
🖥️
S1
🖥️
S2
🖥️
S3
📦四层负载均衡 (L4)
工作原理

基于传输层信息(IP地址+端口)进行流量分发。不关心应用层内容,只做"快递分拣",因此性能极高。

典型产品
LVS (Linux Virtual Server)HAProxy (TCP模式)AWS NLBAzure Load Balancer
适用场景
  • 需要极高吞吐量的场景
  • TCP/UDP流量分发
  • 不需要内容识别的场景
  • 微服务间通信
性能对比一览
类型
处理层
性能
灵活性
成本
硬件负载均衡
L4/L7
$$$$$
四层负载均衡
L4 (传输层)
$$
七层负载均衡
L7 (应用层)
$$$
软件负载均衡
L4/L7
$

2. Cân bằng tải là gì?

2.1 Cân bằng tải lớp 4 (L4): Chỉ xem số nhà

Hoạt động ở tầng vận chuyển (TCP/UDP), giống như nhân viên chuyển phát chỉ xem số nhà (địa chỉ IP + số cổng) của bạn, không quan tâm nhà bạn làm gì.

Đặc điểm:

  • Tốc độ cực nhanh: Chỉ chuyển tiếp địa chỉ đơn giản, không phân tích nội dung gói tin
  • Tình huống phù hợp: Kết nối cơ sở dữ liệu, Redis cache, máy chủ game kết nối dài
  • Sản phẩm tiêu biểu: LVS (Linux Virtual Server), AWS NLB, Azure Load Balancer
Nguyên lý hoạt động
Yêu cầu client → Cân bằng tải L4 → Máy chủ backend

         Chỉ xem IP + Port

         Chuyển tiếp nhanh (không giải nén nội dung)

2.2 Cân bằng tải lớp 7 (L7): Kiểm tra nội dung gói hàng

Hoạt động ở tầng ứng dụng (HTTP/HTTPS), giống như nhân viên chuyển phát không chỉ xem số nhà mà còn mở gói hàng kiểm tra nội dung, dựa vào nội dung để quyết định cách giao.

Đặc điểm:

  • Định tuyến thông minh: Có thể định tuyến tinh vi dựa trên đường dẫn URL, HTTP Header, Cookie, v.v.
  • Tính năng nâng cao: SSL offloading, cache nội dung, nén, WAF bảo mật
  • Tình huống phù hợp: Ứng dụng Web, API Gateway, kiến trúc microservice
  • Sản phẩm tiêu biểu: Nginx, HAProxy, AWS ALB, Envoy
Nguyên lý hoạt động
Yêu cầu client → Cân bằng tải L7 → Phân tích nội dung HTTP

         Kiểm tra URL, Header, Cookie

         Định tuyến thông minh đến máy chủ cụ thể

2.3 So sánh L4 vs L7

Khía cạnhCân bằng tải lớp 4 (L4)Cân bằng tải lớp 7 (L7)
Tầng hoạt độngTầng vận chuyển (TCP/UDP)Tầng ứng dụng (HTTP/HTTPS)
Căn cứ quyết địnhĐịa chỉ IP + số cổngURL, Header, Cookie, Body
Tốc độ xử lýCực nhanh (xử lý kernel)Nhanh (phân tích user-space)
Mức độ phong phúChuyển tiếp cơ bảnSSL offloading, cache, nén, WAF
Tình huống điển hìnhCSDL, game, kết nối dàiỨng dụng Web, API Gateway, microservice
Sản phẩm tiêu biểuLVS, AWS NLBNginx, HAProxy, AWS ALB

3. Vấn đề cốt lõi 1: Làm thế nào để tránh máy chủ "hỏng" vẫn nhận khách?

3.1 Kiểm tra sức khỏe: Đừng để máy chủ "ốm" kéo cả hệ thống xuống

Hãy tưởng tượng, một quầy thu ngân của bạn đột nhiên hỏng, nhưng người phân bổ không biết, vẫn liên tục đưa khách đến đó. Kết quả là hàng đợi ngày càng dài, khách hàng phàn nàn không ngớt.

Kiểm tra sức khỏe (Health Check) chính là "lính gác" ngăn chặn tình huống này. Nó định kỳ "khám sức khỏe" mỗi máy chủ, phát hiện máy "ốm" thì lập tức loại khỏi hàng đợi, đợi "khỏe lại" thì mời quay về.

3.2 Kiểm tra sức khỏe chủ động vs Kiểm tra sức khỏe thụ động

Kiểm tra sức khỏe chủ động (Active Health Check): Cân bằng tải chủ động "gõ cửa" hỏi máy chủ "bạn còn ở đó không?"

  • Định kỳ gửi yêu cầu thăm dò (như HTTP /health, TCP ping)
  • Phản hồi quá thời gian hoặc trả về mã lỗi thì coi là không khỏe
  • Ưu điểm: Kết quả phát hiện chính xác và đáng tin cậy
  • Nhược điểm: Tạo ra lưu lượng thăm dò bổ sung

Kiểm tra sức khỏe thụ động (Passive Health Check): Cân bằng tải "quan sát" tình trạng phản hồi của lưu lượng nghiệp vụ thực tế

  • Thống kê thời gian phản hồi, tỷ lệ lỗi của các yêu cầu thực tế
  • Liên tục thất bại nhiều lần thì coi là không khỏe
  • Ưu điểm: Không tạo thêm lưu lượng
  • Nhược điểm: Cần đủ mẫu lưu lượng mới có thể phán đoán
Bảng thiết lập ngưỡng
Chỉ sốNgưỡng khỏeNgưỡng không khỏeGhi chú
HTTP status code200-399400+ hoặc timeout4xx/5xx đều coi là thất bại
Kết nối TCPThiết lập thành côngKết nối timeoutKiểm tra cổng có thể truy cập không
Thời gian phản hồi< 500ms> 2000msThời gian timeout thường đặt 2-5 giây
Số lần thất bại liên tiếp-3 lầnTránh phán đoán sai do dao động nhất thời
Khoảng kiểm tra-5sQuá thường xuyên sẽ tăng tải

💡 Hố thường gặp: Ngưỡng thiết lập quá "nhạy cảm"

Một nhóm đã đặt ngưỡng thời gian phản hồi của health check là 100ms, trong khi thời gian phản hồi trung bình của ứng dụng dao động từ 80-120ms. Kết quả là máy chủ thường xuyên bị đánh dấu là "không khỏe", dẫn đến lưu lượng dao động liên tục giữa trạng thái khỏe và không khỏe, tỷ lệ khả dụng tổng thể của hệ thống lại giảm.

Cách làm đúng: Ngưỡng nên được đặt là 2-3 lần P99 thời gian phản hồi, để lại đủ không gian đệm cho dao động bình thường.


4. Vấn đề cốt lõi 2: Làm thế nào để "khách quen" luôn gặp cùng một "thu ngân"?

4.1 Duy trì phiên: Để "khách quen" luôn gặp cùng một "thu ngân"

Hãy tưởng tượng bạn là khách quen của quán trà sữa, mỗi lần đến đều do cùng một nhân viên phục vụ. Cô ấy biết sở thích của bạn (nửa đường, không đá), phục vụ vừa nhanh vừa chu đáo. Nhưng nếu mỗi lần đến đều đổi người mới, bạn phải lặp đi lặp lại cùng một yêu cầu, hiệu suất giảm đáng kể.

Duy trì phiên (Session Persistence/Sticky Session) chính là giải pháp cho vấn đề này: đảm bảo yêu cầu của cùng một người dùng luôn được định tuyến đến cùng một máy chủ backend.

会话保持机制
Cookie、IP哈希与粘性会话的技术对比
应用场景:
👤
用户A
👥
用户B
👨‍💼
用户C
请求
⚖️负载均衡器
🍪
Cookie 插入
通过HTTP Cookie保持会话
会话映射表
sess_abc123Server 1
sess_def456Server 2
sess_ghi789Server 1
🖥️
Server 1
10.0.1.10
选中
🖥️
Server 2
10.0.1.11
🖥️
Server 3
10.0.1.12
三种会话保持机制对比
🍪Cookie 插入
不受客户端IP变化影响
首次请求即可保持会话
客户端需支持Cookie
存在Cookie被禁用的风险
#️⃣IP Hash
无需客户端支持任何机制
无状态,LB重启不影响会话
客户端IP变化会丢失会话
难以做到真正的负载均衡
📝粘性会话
结合Cookie和IP两种方式优势
支持会话复制和故障转移
实现复杂,需要应用支持
会话复制带来性能开销

4.2 So sánh ba cơ chế duy trì phiên

Cơ chếNguyên lý thực hiệnƯu điểmNhược điểmTình huống phù hợp
Cookie chènLB chèn Cookie vào phản hồi, yêu cầu tiếp theo mang Cookie nàyKhông bị ảnh hưởng bởi IP thay đổi, duy trì ngay từ yêu cầu đầuClient phải hỗ trợ Cookie, có thể bị tắtGiỏ hàng thương mại điện tử, duy trì trạng thái đăng nhập
IP HashHash địa chỉ IP của client, ánh xạ đến máy chủ cụ thểKhông cần client hỗ trợ, không trạng tháiIP thay đổi sẽ mất phiên, khó phân phối đềuMôi trường không Cookie, WebSocket
Bảng session dínhLB duy trì bảng ánh xạ session đến máy chủHỗ trợ sao chép session và chuyển đổi dự phòngChiếm bộ nhớ LB, cần đồng bộ thêmTình huống yêu cầu tính sẵn sàng cao nghiêm ngặt

💡 Khuyến nghị sử dụng

  • Cookie chèn: Ưu tiên khuyến nghị, khả năng tương thích tốt
  • IP Hash: Chỉ dùng cho các tình huống đặc biệt như WebSocket
  • Bảng session dính: Kết hợp với Cookie, cung cấp khả năng chuyển đổi dự phòng

5. Vấn đề cốt lõi 3: Làm thế nào để triển khai không downtime?

5.1 Triển khai xanh-lam: Phát hành không downtime với "chuyển đổi một chạm"

Tư tưởng cốt lõi: Duy trì đồng thời hai môi trường sản xuất hoàn toàn giống nhau (môi trường xanh và môi trường lam), nhưng chỉ một môi trường phục vụ bên ngoài.

蓝绿部署
零停机发布的经典策略,两套环境瞬间切换
🔵
蓝环境
v1.0.0
100% 流量
🟢
绿环境
v1.1.0
0% 流量
用户流量
👤
👤
👤
👤
👤
⚖️
负载均衡器
当前指向: 🔵 蓝环境
🔵蓝环境v1.0.0
🖥️B1
🖥️B2
🖥️B3
🟢绿环境v1.1.0
🖥️G1
🖥️G2
🖥️G3
蓝绿部署流程
1
绿环境部署
在绿环境部署新版本,进行冒烟测试
2
切换流量
将负载均衡器指向绿环境,流量瞬间切换
3
监控观察
观察绿环境运行状态,确认无异常
4
蓝环境升级
在蓝环境部署新版本,为下次切换做准备
蓝绿部署优缺点
优点
  • 零停机时间:流量切换在毫秒级完成,用户无感知
  • 快速回滚:发现问题可立即切回原环境,风险可控
  • 完整的预发布测试:新环境可完整测试后再接管流量
  • 数据一致性:无需处理新旧版本同时运行时的兼容问题
缺点
  • 资源成本高:需要同时维护两套完整环境,服务器成本翻倍
  • 数据库兼容性挑战:如果涉及数据库Schema变更,需要特别处理兼容性
  • 预热问题:新环境启动后可能需要时间预热缓存、连接池等
  • 不适合有状态服务:对于长连接、会话保持要求高的场景处理复杂

Quy trình làm việc:

  1. Trạng thái ban đầu: Môi trường lam chạy v1.0 (production), môi trường xanh chờ lệnh.
  2. Triển khai phiên bản mới: Triển khai v1.1 lên môi trường xanh, thực hiện smoke test nội bộ.
  3. Chuyển đổi lưu lượng: Trỏ cân bằng tải đến môi trường xanh, lưu lượng chuyển ngay lập tức sang v1.1.
  4. Giám sát quan sát: Quan sát trạng thái hoạt động của môi trường xanh, xác nhận không có bất thường.
  5. Giữ lại phiên bản cũ: Môi trường lam giữ v1.0 một thời gian (như 24 giờ), làm bảo hiểm rollback nhanh.

✨ Phân tích ưu nhược điểm

Ưu điểmNhược điểm
✅ Không downtime, chuyển đổi trong mili giây❌ Chi phí tài nguyên cao, cần duy trì đồng thời hai môi trường
✅ Rollback nhanh, phát hiện vấn đề lập tức chuyển về môi trường cũ❌ Thay đổi Schema CSDL cần xử lý đặc biệt về tương thích
✅ Môi trường mới có thể kiểm thử đầy đủ trước khi nhận lưu lượng❌ Không phù hợp cho dịch vụ có trạng thái (như WebSocket kết nối dài)

5.2 Phát hành canary: Chiến lược "bước nhỏ chạy nhanh"

Phát hành canary lấy tên từ "chim hoàng yến trong mỏ than" lịch sử — thợ mỏ mang chim hoàng yến xuống mỏ, nếu chim có dấu hiệu bất thường nghĩa là có khí độc rò rỉ, thợ mỏ lập tức sơ tán. Trong phát hành phần mềm, phát hành canary là cho một nhóm nhỏ người dùng dùng thử phiên bản mới trước, quan sát không có vấn đề rồi mới mở rộng dần phạm vi.

金丝雀发布
灰度发布策略,小流量先行验证新版本
流量分配比例拖动滑块调整新旧版本流量占比
稳定版 v1.0.090%
金丝雀 v1.1.010%
实时流量模拟 总请求: 0 | 稳定版: 0 | 金丝雀: 0
用户请求
负载均衡器
⚖️
Canary:10%
后端服务
稳定版 v1.0.0
📦S1
📦S2
📦S3
金丝雀 v1.1.0
🧪C1
🧪C2
金丝雀发布最佳实践
📊渐进式放量
  • 1% → 5% → 10% → 25% → 50% → 100%
  • 每个阶段观察至少15-30分钟
  • 关键指标:错误率、延迟、吞吐量
🎯精准用户选择
  • 内部员工/测试用户先行
  • 按地域:选择特定区域用户
  • 按用户属性:VIP用户或普通用户
  • 按设备类型:iOS/Android/Web
🛡️自动回滚机制
  • 错误率超过阈值自动回滚
  • P99延迟异常触发告警
  • 关键业务指标下降自动回滚
  • 一键回滚:30秒内恢复旧版本
📈监控与指标
  • 基础设施:CPU、内存、磁盘、网络
  • 应用指标:QPS、错误率、延迟分布
  • 业务指标:转化率、订单量、收入
  • 用户体验:页面加载时间、交互延迟

Tư tưởng cốt lõi:

  1. Lưu lượng nhỏ đi trước: Trước tiên đưa 1% lưu lượng vào máy chủ phiên bản mới.
  2. Quan sát chỉ số: Liên tục giám sát tỷ lệ lỗi, độ trễ, chỉ số nghiệp vụ quan trọng.
  3. Tăng dần lưu lượng: Nếu mọi thứ bình thường, tăng dần tỷ lệ lên 5%, 10%, 25%, 50%, 100%.
  4. Rollback nhanh: Một khi phát hiện bất thường, lập tức chuyển toàn bộ lưu lượng về phiên bản cũ.

💡 Ưu thế của phát hành canary

Ưu thếMô tả
🎯 Rủi ro kiểm soát đượcNgay cả phiên bản mới có Bug nghiêm trọng, cũng chỉ ảnh hưởng đến một lượng nhỏ người dùng
📊 Xác thực thực tếXác thực trong môi trường production thực, đáng tin cậy hơn môi trường kiểm thử
🚀 Lặp nhanhNhóm có thể tự tin hơn khi thường xuyên phát hành tính năng mới
💰 Thân thiện tài nguyênKhông cần chuẩn bị hai môi trường đầy đủ như triển khai xanh-lam

6. Vấn đề cốt lõi 4: Làm thế nào để hệ thống tự "thở"?

6.1 Tự động mở rộng và thu hẹp: Để hệ thống "xếp ca linh hoạt" như nhà hàng

Hãy tưởng tượng bạn mở một nhà hàng:

  • Giờ cao điểm trưa: Cần 10 nhân viên phục vụ, nhưng 3 giờ chiều vắng khách chỉ cần 2 người
  • Nếu luôn duy trì 10 người: Chi phí nhân công bùng nổ
  • Nếu luôn chỉ có 2 người: Giờ cao điểm khách không chờ nổi, bỏ đi hết

Tự động mở rộng thu hẹp (Auto Scaling) chính là để hệ thống "xếp ca linh hoạt" như nhà hàng — lúc bận tự động thêm máy chủ, lúc rảnh tự động giảm máy chủ.

自动扩缩容
基于CPU、内存、QPS的智能弹性伸缩
扩容指标:
实时监控 实时
💻CPU使用率
45%
扩容阈值: 70%缩容阈值: 30%
🧠内存使用率
60%
扩容阈值: 75%缩容阈值: 40%
QPS
650req/s
扩容阈值: 1000/s目标: 800/s
🖥️运行实例
3个实例
最小: 2最大: 10
1
2
3
4
5
6
7
8
9
10
扩缩容历史最近 5 次操作
📈
扩容: 2 → 3 实例
CPU使用率超过70%
10:23
📉
缩容: 4 → 3 实例
CPU使用率低于30%
09:15
📈
扩容: 3 → 4 实例
QPS达到1000/s
08:42
📈
扩容: 2 → 3 实例
内存使用率超过75%
07:30
📉
缩容: 5 → 4 实例
流量下降
06:20
自动扩缩容最佳实践
⏱️
冷却时间
设置适当的冷却时间(通常3-5分钟),避免扩缩容操作过于频繁导致的震荡
📊
多指标综合
不要依赖单一指标,结合CPU、内存、QPS、连接数等多维度进行综合判断
🎯
目标利用率
设置合理的资源目标利用率(如70%),预留足够的缓冲应对突发流量
快速扩容
扩容操作应该比缩容更激进,确保系统能快速应对流量增长

6.2 Lựa chọn chỉ số mở rộng

Cốt lõi của tự động mở rộng thu hẹp là trả lời câu hỏi: Khi nào nên thêm máy? Khi nào nên bớt máy?

Các chỉ số quyết định phổ biến:

Chỉ sốNgưỡng mở rộngNgưỡng thu hẹpTình huống phù hợp
CPU sử dụng> 70%< 30%Ứng dụng tính toán chuyên sâu
RAM sử dụng> 75%< 40%Ứng dụng tiêu tốn bộ nhớ
QPS (số yêu cầu/giây)> 1000/s< 400/sAPI Gateway, dịch vụ Web
Số kết nối> 5000< 1000CSDL, hàng đợi tin nhắn
Chỉ số nghiệp vụ tùy chỉnhTùy nghiệp vụTùy nghiệp vụTình huống nghiệp vụ đặc thù

💡 "Hố" và "Giải pháp" của chiến lược mở rộng

Hố 1: Phản ứng mở rộng quá chậm, đỉnh lưu lượng đã đánh sập hệ thống

Trong một sự kiện khuyến mãi thương mại điện tử, thiết lập CPU > 80% kích hoạt mở rộng, nhưng giám sát thu thập có độ trễ 1 phút, instance mới khởi động cần 3 phút. Kết quả lưu lượng đến quá nhanh, mở rộng chưa hoàn thành, máy chủ đã bị đánh sập.

Giải pháp:

  • Mở rộng trước: Dựa trên dữ liệu lịch sử dự đoán đỉnh lưu lượng, bắt đầu mở rộng trước 30 phút
  • Ngưỡng đa cấp: Thiết lập 60% cảnh báo (bắt đầu khởi động instance mới), 70% mở rộng chính thức, 80% mở rộng khẩn cấp
  • Mở rộng nhanh: Sử dụng triển khai container hóa, instance mới khởi động trong 30 giây (so với máy ảo 3-5 phút)

Hố 2: Mở rộng quá quyết liệt, chi phí bùng nổ

Một công ty khởi nghiệp thiết lập chiến lược mở rộng quyết liệt: CPU > 50% là mở rộng. Kết quả một dao động nghiệp vụ bình thường đã kích hoạt mở rộng, số lượng máy chủ từ 5 lên 30, hóa đơn cloud cuối tháng làm CTO phát khóc.

Giải pháp:

  • Thiết lập thời gian làm mát mở rộng: Sau một lần mở rộng, ít nhất đợi 5 phút mới có thể mở rộng lại
  • Thiết lập số instance tối đa: max = số instance hiện tại × 2, tránh mở rộng vô hạn
  • Phân biệt đột biến và xu hướng: Chỉ khi liên tục 3 chu kỳ vượt ngưỡng mới mở rộng, tránh đột biến điểm đơn kích hoạt

Hố 3: Thu hẹp quá nhanh, máy vừa mở rộng đã bị thu ngay

Một nhóm thiết lập CPU < 30% thu hẹp. Sau khi mở rộng, lưu lượng vẫn đang được xử lý, CPU tạm giảm xuống 25%, kích hoạt thu hẹp. Vừa thu xong CPU lại lên 80%, lại kích hoạt mở rộng — hệ thống dao động điên cuồng trong vòng "mở rộng-thu hẹp-mở rộng".

Giải pháp:

  • Thu hẹp bảo thủ hơn: Ngưỡng mở rộng 70%, ngưỡng thu hẹp 25%, có đủ vùng đệm ở giữa
  • Thời gian làm mát thu hẹp dài hơn: Sau khi mở rộng, ít nhất đợi 10 phút mới được thu hẹp
  • Thu hẹp từng bước: Mỗi lần chỉ thu 1 máy, quan sát rồi mới quyết định có thu tiếp không

7. Thực chiến: Làm thế nào để chọn cân bằng tải?

7.1 So sánh các cân bằng tải chính

Đặc tínhNginxHAProxyEnvoyCân bằng tải nhà cung cấp cloud
Định vịReverse proxy/cân bằng tải hiệu suất caoCân bằng tải mã nguồn mởProxy cloud nativeCân bằng tải được quản lý
Hiệu suấtCực cao (C, event-driven)Cao (event-driven)Cao (C++/Rust)Cực cao
Tính năngCân bằng tải cơ bản, file tĩnh, cacheThuật toán cân bằng tải phong phúĐịnh tuyến nâng cao, quan sátTính năng đầy đủ
Cấu hìnhFile cấu hình (nginx.conf)File cấu hình (haproxy.cfg)API/file cấu hìnhGiao diện điều khiển
Mở rộngC module/Lua scriptLua scriptWASM/FilterPlugin
Tình huốngTài nguyên tĩnh, cân bằng tải L7, SSL terminationCân bằng tải L7, tính sẵn sàng caoService mesh, multi-cloudBắt đầu nhanh

💡 Khuyến nghị lựa chọn

Cây quyết định:

Chọn cân bằng tải:

├─ Chỉ cần cân bằng tải L4 cơ bản?
│  ├─ Có → LVS (mã nguồn mở miễn phí) hoặc NLB của nhà cung cấp cloud
│  └─ Không → Tiếp tục

├─ Cần Service mesh, triển khai multi-cloud?
│  ├─ Có → Envoy
│  └─ Không → Tiếp tục

├─ Cần cấu hình và plugin cực kỳ phức tạp?
│  ├─ Có → HAProxy
│  └─ Không → Tiếp tục

├─ Cần hiệu suất cao + cấu hình đơn giản?
│  ├─ Có → Nginx (lựa chọn hàng đầu)
│  └─ Tiếp tục

├─ Muốn vận hành được quản lý?
│  ├─ Có → Cân bằng tải nhà cung cấp cloud (AWS ALB, Alibaba SLB)
│  └─ Nginx tự xây dựng

8. Tổng kết: Tư duy cốt lõi của cân bằng tải

8.1 Ôn tập nguyên tắc cốt lõi

Nguyên tắcÝ nghĩaĐiểm thực hành
Phân tầngL4 xử lý "phân loại chuyển phát" (nhanh nhưng đơn giản)L4 xử lý CSDL, game; L7 xử lý Web, API
Dự phòngĐiểm lỗi đơn là kẻ thù của kiến trúcTriển khai đa instance, đa khu vực để nâng cao tính sẵn sàng
Tiệm tiếnPhát hành phiên bản mới không "một nhát cắt"Triển khai xanh-lam đạt không downtime; canary đạt rủi ro kiểm soát được
Đàn hồiHệ thống nên "thở" như sinh vật sốngLúc bận tự động mở rộng, lúc rảnh tự động thu hẹp

8.2 Danh sách kiểm tra thiết kế

Trước khi áp dụng cân bằng tải, hãy tự hỏi những câu sau:

  • [ ] Có thực sự cần cân bằng tải không? (Hiệu suất máy đơn có thực sự không đủ không)
  • [ ] Chọn L4 hay L7? (Dựa trên tình huống nghiệp vụ)
  • [ ] Làm thế nào để xử lý duy trì phiên? (Cookie, IP Hash, bảng session)
  • [ ] Làm thế nào để thực hiện health check? (Chủ động, thụ động, thiết lập ngưỡng)
  • [ ] Làm thế nào để đạt không downtime? (Triển khai xanh-lam, canary)
  • [ ] Làm thế nào để đạt đàn hồi? (Chỉ số mở rộng/thu hẹp, thời gian làm mát, số instance tối đa)

9. Bảng tra cứu thuật ngữ

Thuật ngữTiếng AnhGiải thích
Cân bằng tảiLoad BalancerThiết bị hoặc phần mềm phân phối lưu lượng đến nhiều máy chủ backend
Cân bằng tải L4L4 Load BalancingCân bằng tải dựa trên tầng vận chuyển (TCP/UDP)
Cân bằng tải L7L7 Load BalancingCân bằng tải dựa trên tầng ứng dụng (HTTP/HTTPS)
Health checkHealth CheckCơ chế định kỳ kiểm tra trạng thái sức khỏe của máy chủ backend
Duy trì phiênSession PersistenceĐảm bảo yêu cầu của cùng một người dùng luôn được định tuyến đến cùng một máy chủ
Sticky sessionSticky SessionCách gọi khác, tương đương Session Persistence
Triển khai xanh-lamBlue-Green DeploymentChiến lược phát hành không downtime bằng cách chuyển đổi hai môi trường
Phát hành canaryCanary ReleaseChiến lược phát hành xám với lưu lượng nhỏ xác thực trước
Tự động mở rộng thu hẹpAuto ScalingTự động tăng hoặc giảm số lượng máy chủ theo tải
Mở rộng ngangHorizontal ScalingTăng số lượng máy chủ để nâng cao khả năng xử lý
Mở rộng dọcVertical ScalingNâng cấp cấu hình máy đơn (CPU, RAM) để nâng cao khả năng xử lý
Đa khu vựcMulti-RegionTriển khai dịch vụ ở nhiều khu vực địa lý
Active-ActiveActive-ActiveNhiều khu vực cùng lúc phục vụ bên ngoài
Active-StandbyActive-StandbyChỉ một khu vực phục vụ, các khu vực khác chờ lệnh
Đồng bộ dữ liệuData ReplicationCơ chế sao chép dữ liệu xuyên khu vực
RTORecovery Time Objective (RTO)Mục tiêu thời gian khôi phục, thời gian cần để khôi phục sau sự cố hệ thống
RPORecovery Point Objective (RPO)Mục tiêu điểm khôi phục, lượng dữ liệu có thể chấp nhận mất sau sự cố