Cân bằng tải là một khái niệm xuất hiện ở nhiều nơi hơn bạn nghĩ.
Hãy hình dung một sáng thứ Bảy trong siêu thị đông nghịt mà chỉ có một quầy thanh toán mở. Mười lăm người xếp hàng, ai cũng bực bội, còn tội nghiệp thu ngân thì trông như đang cân nhắc lại mọi quyết định cuộc đời đưa họ đến khoảnh khắc này. Căng thẳng dâng cao thì bất ngờ 3 nhân viên xuất hiện, mở thêm vài làn và hướng dẫn khách sang các hàng ngắn hơn. Mọi thứ nhanh hẳn, áp lực giảm, và dòng người bắt đầu di chuyển bình thường. Về bản chất, đó chính là cân bằng tải.
Trong bài viết này, tôi sẽ dẫn bạn qua cân bằng tải là gì, vì sao nó quan trọng, cách nó hoạt động bên trong, và cách nó giúp thế giới số không sụp đổ khi quá tải. Bạn không cần kiến thức đặc biệt để theo dõi, nên đừng lo nếu bạn không rành về mạng hay kiến trúc đám mây! Hướng dẫn này sẽ giữ mọi thứ rõ ràng, thực tế và (hy vọng) hơi vui một chút.
Cân bằng tải là gì và vì sao quan trọng?
Trong công nghệ, cân bằng tải là cách chúng ta phân phối lưu lượng hoặc tác vụ đến nhiều máy chủ hay tài nguyên. Thay vì để một máy đơn lẻ kiệt sức gánh mọi thứ, bộ cân bằng tải trải đều công việc để hệ thống giữ được tốc độ, ổn định và khả năng mở rộng. Nó có mặt ở khắp nơi trong hạ tầng hiện đại: nền tảng đám mây dùng để xử lý hàng triệu người dùng, pipeline AI dựa vào nó để phân tán dữ liệu giữa các nút, và các trang thương mại điện tử trông cậy vào nó để sống sót qua Black Friday.
Giả sử ứng dụng của bạn không có bộ cân bằng tải. Một máy chủ nhận tất cả yêu cầu, tất cả lưu lượng, tất cả áp lực. Có thể nó trụ được một lúc, cho đến khi (tất yếu) không còn trụ nổi. Nó chậm lại, người dùng bực bội, thậm chí sập hẳn. Trong khi đó, các máy chủ khác thì “ngồi chơi xơi nước”.
Không có cân bằng tải, về cơ bản bạn sẽ mắc kẹt với:
- Điểm lỗi đơn: Nếu một máy chủ hỏng, mọi thứ đều sập theo.
- Hiệu năng kém dưới áp lực: Máy chủ quá tải phản hồi chậm hơn (hoặc không phản hồi).
- Khả năng mở rộng hạn chế: Thêm máy chủ cũng vô ích nếu chúng không được sử dụng.
- Người dùng bực bội: Thành thật mà nói, đó mới là vấn đề thực sự.
Giờ thêm một bộ cân bằng tải vào, bức tranh sẽ khác hẳn. Nó ngồi trước các máy chủ backend, theo dõi tình trạng từng máy và phân phối yêu cầu đến nơi khỏe mạnh nhất hoặc ít bận nhất. Một số còn giám sát thời gian phản hồi hay tài nguyên máy chủ theo thời gian thực.
Bạn sẽ nhận được:
- Tính sẵn sàng cao: Nếu một máy chủ lỗi, lưu lượng sẽ tự động đổi tuyến.
- Hiệu năng tốt hơn: Không máy nào bị quá tải, mọi thứ chạy nhanh hơn.
- Khả năng mở rộng: Có thể thêm/bớt máy chủ tùy nhu cầu, bộ cân bằng tải sẽ điều chỉnh.
- Khả năng chịu lỗi: Sự cố không kéo sập toàn bộ hệ thống.
- Hiệu quả chi phí: Tận dụng tài nguyên tốt hơn.
- Bảo mật được cải thiện: Một số bộ cân bằng tải giúp chặn lưu lượng độc hại và ẩn các dịch vụ nội bộ.
Nếu vẫn nghĩ về ví dụ siêu thị, hãy tưởng tượng hàng 15 người được chia thông minh sang 5 quầy. Không ai hoảng, không ai la ó, và bạn đến quầy pizza đông lạnh nhanh hơn. Đó là mục tiêu.
Cách cân bằng tải hoạt động
Chúng ta đã nói về vì sao cân bằng tải hữu ích. Giờ cùng xem nó thực sự vận hành thế nào bên trong.
Ở mức khái quát, bộ cân bằng tải nằm giữa client (người hoặc hệ thống gửi yêu cầu) và các máy chủ backend (nơi xử lý công việc). Nhiệm vụ của nó là nhận mỗi yêu cầu đến và quyết định gửi đi đâu.
Luồng cơ bản như sau:
- Người dùng truy cập ứng dụng hoặc dịch vụ của bạn.
- Yêu cầu chạm vào bộ cân bằng tải trước.
- Bộ cân bằng tải kiểm tra máy chủ backend nào sẵn sàng, khỏe và không quá bận.
- Nó chuyển tiếp yêu cầu đến máy chủ đã chọn.
- Máy chủ xử lý yêu cầu và gửi phản hồi lại, trực tiếp hoặc thông qua bộ cân bằng tải.
Về lý thuyết khá đơn giản, nhưng phía sau có nhiều thứ diễn ra, và có vài khái niệm then chốt để mọi thứ vận hành trơn tru:
- Kiểm tra sức khỏe (health checks): Bộ cân bằng tải thường xuyên ping từng máy chủ backend để đảm bảo chúng còn “sống khỏe”. Nếu một máy trượt kiểm tra, nó sẽ tạm bị loại khỏi vòng cho đến khi hồi phục.
- Chuyển đổi dự phòng (failover): Nếu một máy sập giữa chừng (chuyện có thể xảy ra), bộ cân bằng tải có thể điều hướng sang máy khỏe mà không làm phiền người dùng cuối.
- Duy trì phiên (còn gọi là “stickiness”): Đôi khi bạn muốn một người dùng tiếp tục truy cập cùng một máy, như trong phiên đăng nhập. Sticky session giúp điều đó khả thi, nhưng có đánh đổi (chúng ta sẽ bàn sau).
- Kết thúc SSL (SSL termination): Bộ cân bằng tải có thể xử lý giải mã HTTPS để backend không phải làm. Nhờ đó giảm gánh nặng tính toán và tăng tốc độ.
Cân bằng tải vs. bộ cân bằng tải
Lưu ý nhanh: “cân bằng tải” là khái niệm (phân phối lưu lượng), còn “bộ cân bằng tải” là công cụ hay dịch vụ thực thi điều đó. Hai thuật ngữ này thường được dùng lẫn nhau, nhưng biết sự khác biệt vẫn hữu ích.
Thuật toán cân bằng tải
Dù đôi khi bộ cân bằng tải chọn máy chủ ngẫu nhiên, thực tế có những chiến lược gọi là thuật toán cân bằng tải quyết định cách phân phối lưu lượng đến tài nguyên backend.
Một số thì khá đơn giản, dễ đoán; số khác điều chỉnh theo thời gian thực dựa trên hiệu năng máy chủ, số kết nối hoặc tốc độ phản hồi. Hãy chia chúng thành hai nhóm lớn.
Thuật toán tĩnh
Những thuật toán này không thích ứng với tình trạng hệ thống; chúng chỉ làm theo quy tắc định sẵn. Do đó dễ triển khai và dự đoán, nhưng không phải lúc nào cũng lý tưởng trong áp lực thực tế.
- Round Robin: Bộ cân bằng tải gửi yêu cầu theo vòng: A, B, C, A, B, C… Đơn giản, nhưng không tính đến mức bận của từng máy.
- Weighted Round Robin: Giống Round Robin nhưng máy chủ có trọng số cao nhận nhiều yêu cầu hơn — hữu ích khi một số máy mạnh hơn.
- IP Hash: Dựa trên địa chỉ IP của client để quyết định tuyến đến máy chủ. Đảm bảo cùng người dùng truy cập cùng backend — tốt cho stickiness cơ bản.
- Client-side Random Selection: Đúng như tên gọi, client chọn máy chủ ngẫu nhiên (thường từ danh sách do DNS cung cấp). Giảm tải cho bộ cân bằng nhưng có thể phân phối không đều.

Thuật toán tĩnh. Ảnh: Tác giả
Thuật toán động
Những thuật toán này thích ứng dựa trên tình trạng thực tế trong hệ thống. Thông minh hơn, nhưng đòi hỏi giám sát và nhận biết hệ thống nhiều hơn.
- Ít kết nối nhất (Least Connections): Gửi yêu cầu tiếp theo đến máy chủ có ít kết nối hoạt động nhất. Tuyệt cho hệ thống có phiên sống lâu hoặc đột biến khó lường.
- Ít kết nối nhất có trọng số (Weighted Least Connections): Tương tự, nhưng tính thêm trọng số máy chủ. Máy lớn xử lý được nhiều kết nối hơn nên nhận nhiều lưu lượng hơn.
- Thời gian phản hồi ít nhất (Least Response Time): Điều hướng đến máy có thời gian phản hồi nhanh nhất. Lý tưởng cho cấu hình tối ưu hiệu năng.
- Cân bằng tải dựa trên tài nguyên: Tính đến CPU, bộ nhớ, hay I/O. Nếu tài nguyên máy bị căng, nó nhận ít lưu lượng hơn. Cách này mạnh mẽ nhưng phức tạp hơn để triển khai và giám sát.

Thuật toán động. Ảnh: Tác giả
Thuật toán tĩnh phù hợp khi lưu lượng có thể dự đoán và máy chủ đồng đều. Thuật toán động tỏa sáng khi mọi thứ hỗn loạn hơn đôi chút.
Được rồi, giờ nói về các loại bộ cân bằng tải: phần cứng, phần mềm, gốc đám mây, và hơn thế.
Các loại bộ cân bằng tải
Không phải bộ cân bằng tải nào cũng giống nhau. Có loại ở dạng phần cứng, có loại chạy dưới dạng phần mềm, có loại đi kèm dịch vụ đám mây, và có loại chuyên cho các trường hợp đặc thù. Bạn dùng loại nào tùy thuộc kiến trúc, quy mô, và đôi khi là ngân sách.
Theo cách triển khai
Bộ cân bằng tải phần cứng
Là các thiết bị vật lý đặt trong trung tâm dữ liệu, được xây dựng chuyên biệt để cân bằng lưu lượng. Mạnh và nhanh, nhưng đắt và khó mở rộng theo nhu cầu. Phù hợp doanh nghiệp lớn và hạ tầng on-prem.
Bộ cân bằng tải phần mềm
Chạy như ứng dụng trên máy chủ mục đích chung. Công cụ như HAProxy, nginx (thuộc F5), hoặc Envoy thuộc nhóm này. Chúng rẻ hơn, linh hoạt hơn và dễ tích hợp vào hầu hết môi trường.
Bộ cân bằng tải gốc đám mây
Nếu bạn dùng AWS, Azure, hoặc GCP, rất có thể bạn đã dùng bộ cân bằng tải gốc đám mây, như AWS ELB, Azure Load Balancer, hoặc GCP Load Balancing. Chúng được quản lý sẵn, tự động mở rộng và tích hợp tốt với dịch vụ khác.
Nếu bạn muốn làm quen cách AWS xử lý phần này (và nhiều mảnh ghép hạ tầng khác), hãy xem khóa học AWS Cloud Technology and Services Concepts của chúng tôi.
Bạn có thể đã nghe về bộ cân bằng tải “elastic”. Chúng được thiết kế để co giãn theo khối lượng công việc. Thường là một phần của hệ thống gốc đám mây, nhưng “elastic” đơn giản là có thể thích ứng động với lưu lượng — lý tưởng cho tải tăng giảm thất thường.
Theo lớp OSI
Mô hình OSI là khung khái niệm mô tả dữ liệu di chuyển trong mạng. Có bảy lớp, từ dây vật lý đến ứng dụng trên trình duyệt. Với cân bằng tải, lớp liên quan nhất là lớp 4 và 7.
Bộ cân bằng tải lớp 4 (Lớp Vận chuyển)
Ra quyết định định tuyến dựa trên địa chỉ IP, cổng, và lưu lượng TCP/UDP. Nhanh và hiệu quả, nhưng không biết gì về nội dung truyền đi.
Bộ cân bằng tải lớp 7 (Lớp Ứng dụng)
Xem xét nội dung thực của yêu cầu, như HTTP header, cookie, hoặc URL. Nhờ đó có thể làm những việc nâng cao như định tuyến theo đường dẫn URL, A/B testing, hoặc ưu tiên ngôn ngữ. Ví dụ, nếu bạn muốn /api/ vào một cụm và /login vào cụm khác, bạn sẽ cần lớp 7.
Các loại chuyên biệt
Bộ cân bằng tải máy chủ toàn cầu (GSLB)
Dùng để phân phối lưu lượng giữa các trung tâm dữ liệu phân tán theo địa lý. Hữu ích cho thiết lập đa vùng, độ trễ thấp, hoặc khôi phục thảm họa.
Bộ cân bằng tải nội bộ
Hoạt động hoàn toàn trong mạng riêng, dùng để cân bằng lưu lượng giữa các dịch vụ bên trong đám mây hoặc cụm.
Bộ cân bằng tải Diameter
Chuyên cho hệ thống viễn thông dùng giao thức Diameter, thường gặp trong mạng di động để định tuyến, xác thực và xử lý yêu cầu tính cước.
Bộ cân bằng tải HTTP(S)
Được tối ưu để xử lý riêng lưu lượng HTTP và HTTPS. Thường bao gồm SSL termination, định tuyến theo URL, và bảo vệ DDoS tích hợp.
Mỗi loại giải một bài toán khác nhau. Có loại tập trung vào mở rộng, có loại ưu tiên độ trễ, bảo mật, hoặc dễ dùng. Biết chọn đúng loại sẽ tạo khác biệt lớn cho độ trơn tru (hay đau đầu) khi vận hành hạ tầng.
Kiến trúc và tô-pô bộ cân bằng tải
Đến giờ chúng ta đã nói bộ cân bằng tải làm gì và các loại có thể dùng, nhưng còn cách chúng được xây dựng bên trong thì sao? Kiến trúc của hệ thống cân bằng tải ảnh hưởng đến mọi thứ, từ khả năng mở rộng đến mức độ “êm ái” khi gặp sự cố.
Mô hình leader-follower
Đây là thiết lập kinh điển: một nút “leader” đưa ra quyết định và phân phối công việc cho nhiều nút “worker”. Đơn giản, dễ hiểu, nhưng leader có thể thành nút cổ chai hoặc điểm lỗi đơn nếu không có dự phòng phù hợp.
Cân bằng tải phân tán
Thay vì một “bộ não” trung tâm, mỗi bộ cân bằng tải đều biết về các “đồng nghiệp” và chia sẻ công việc. Điều này cải thiện khả năng chịu lỗi và mở rộng, nhưng việc phối hợp sẽ khó hơn. Bạn thường thấy ở hệ thống quy mô lớn với định tuyến anycast hoặc phân phối dựa trên DNS.
Trong môi trường container, đặc biệt với Kubernetes, cân bằng tải càng thú vị. Services, ingress controller và sidecar phối hợp để định tuyến thông minh trong cụm. Nếu bạn mới bắt đầu với thế giới đó, khóa học Introduction to Kubernetes của chúng tôi là cách thực hành vững chắc để học các nền tảng.
Work stealing
Trong thiết lập này, worker rảnh có thể “cướp” tác vụ từ worker bận. Thường dùng trong môi trường tính toán nặng như hàng đợi tác vụ hoặc pipeline xử lý dữ liệu, nhưng ít dùng cho lưu lượng web. Dù vậy, đây là mẫu hữu ích cho cân bằng tải không thể dự đoán.
Phân cấp nhiều tầng
Một số hệ thống xếp tầng bộ cân bằng tải, như có một tầng ở mức toàn cầu (ví dụ giữa các vùng), một tầng ở mức trung tâm dữ liệu, và tầng nữa trong một cụm dịch vụ cụ thể. Cách này giúp quản lý độ phức tạp và giữ mỗi tầng tập trung vào một phạm vi nhất định.

Kiến trúc cân bằng tải.
Mỗi kiến trúc đều có đánh đổi. Mô hình tập trung dễ hiểu nhưng dễ thành nút thắt, mô hình phân tán mở rộng tốt hơn nhưng tăng phức tạp, còn tô-pô nhiều tầng thì mô-đun hóa nhưng có thể thêm độ trễ nếu thiết kế không khéo. Như thường lệ, không có câu trả lời “chuẩn cho mọi nhà”. Tùy thuộc vào quy mô hệ thống, mô hình lưu lượng và mức chịu rủi ro của bạn.
Thách thức và hạn chế
Cân bằng tải rất mạnh, nhưng không phải phép màu. Dù giúp hệ thống đáng tin cậy, mở rộng và hiệu quả hơn, nó cũng mang đến lớp phức tạp mới và những điểm có thể hỏng. Hãy nói về vài đánh đổi mà kỹ sư thường gặp, cả về kỹ thuật lẫn vận hành.
Thách thức chung trong cân bằng tải
Bản thân bộ cân bằng tải có thể thành nút thắt
Trớ trêu thay, công cụ để phân phối lưu lượng lại có thể trở thành điểm lỗi đơn nếu kiến trúc không đúng, đặc biệt trong mô hình tập trung hay dựa trên leader. Vì vậy nhiều hệ thống dùng nhiều bộ cân bằng tải, cơ chế failover, hoặc thậm chí cân bằng ở tầng DNS để san sẻ rủi ro.
Tăng overhead
Dù nhanh đến đâu, bộ cân bằng tải vẫn thêm một bước trung gian giữa client và backend. Điều này có thể gây độ trễ, nhất là trong kiến trúc nhiều tầng hoặc định tuyến ở lớp ứng dụng (lớp 7).
SSL termination hữu ích nhưng tốn kém
Xử lý HTTPS tại bộ cân bằng tải (SSL termination) giúp giảm tải CPU cho backend, nhưng cũng đồng nghĩa bộ cân bằng làm nhiều hơn và chịu trách nhiệm cho thiết lập bảo mật, chứng chỉ nhạy cảm.
Duy trì phiên so với tính stateless
Sticky session hữu ích để giữ người dùng gắn với cùng backend (như lúc đăng nhập), nhưng làm phức tạp việc mở rộng và khó vận hành dịch vụ hoàn toàn stateless. Kỹ sư thường phải chọn giữa trải nghiệm người dùng và sự tinh gọn kiến trúc.
Cấu hình phức tạp rất nhanh
Logic định tuyến càng thông minh, càng nhiều chỗ cho lỗi, định tuyến sai, hoặc các vấn đề hiệu năng tinh vi khó truy vết. Bạn sẽ thấy mình thật thông minh khi thiết lập xong, và ít thông minh hẳn khi bị gọi dậy lúc 2 giờ sáng để debug health check chập chờn.
Thách thức thực tế cho kỹ sư và quản trị viên
Tinh chỉnh thuật toán không có công thức chung
Mỗi ứng dụng phản ứng khác nhau dưới tải. Chọn giữa thuật toán tĩnh hay động và tinh chỉnh ngưỡng kết nối, khoảng kiểm tra sức khỏe… đòi hỏi nhiều thử-sai và kinh nghiệm.
Khắc phục sự cố khó hơn khi có lớp trung gian
Khi có trục trặc, bộ cân bằng tải thêm một nơi phải kiểm tra. Tuyến cấu hình sai, yêu cầu bị rơi, lớp cache, hay kết quả health check không nhất quán đều làm mọi thứ rối rắm.
Bảo mật làm tăng độ phức tạp
Nếu bộ cân bằng tải xử lý SSL, bạn cần đảm bảo cấu hình đúng, vá kịp thời và theo dõi sát. Sai sót có thể tạo lỗ hổng hoặc làm đứt giao tiếp an toàn.
Tính quan sát trở nên quan trọng hơn
Điều này liên quan đến điểm phức tạp tăng thêm. Bạn cần logging, metrics và tracing mạnh để hiểu luồng yêu cầu qua hệ thống. Nếu thiếu quan sát tốt, một bộ cân bằng tải “hành” có thể khó phát hiện, và còn khó sửa hơn.
Nói cho rõ, không điều nào trong số này là lý do không dùng cân bằng tải. Đó chỉ là thực tế của việc xây dựng hệ thống bền bỉ: mỗi lớp bạn thêm có thể giúp ích, nhưng cũng mang theo thách thức mới cần quản lý.
Xu hướng tương lai trong cân bằng tải
Giống mọi thứ trong công nghệ, cân bằng tải đang tiến hóa. Khi hệ thống trở nên phức tạp, phân tán và động hơn, các cách tiếp cận truyền thống bị kéo căng và chiến lược mới được thử nghiệm.
Cân bằng tải dựa trên AI và ML
Điều này khá hiển nhiên trước xu hướng công nghệ toàn cầu. Nền tảng hiện đại bắt đầu tích hợp machine learning để dự đoán mẫu lưu lượng và đưa ra quyết định định tuyến thông minh hơn. Thay vì chỉ phản ứng với tải hiện tại, hệ thống có thể dự liệu đột biến (như ra mắt sản phẩm hoặc tin nóng) và điều chỉnh trước luồng lưu lượng. Vẫn là giai đoạn đầu, nhưng tiềm năng hạ tầng tự tối ưu là có thật.
Nếu bạn muốn khám phá hướng này, bài hướng dẫn về Machine Learning, Pipelines, Deployment and MLOps của chúng tôi là điểm khởi đầu tuyệt vời.
Cân bằng tải nhận thức ứng dụng
Bộ cân bằng tải truyền thống không thực sự biết ứng dụng của bạn làm gì; chúng chỉ nhìn lưu lượng. Cân bằng tải nhận thức ứng dụng đi sâu hơn. Nó có thể quyết định dựa trên danh tính người dùng, loại thiết bị, hoặc mức độ quan trọng về kinh doanh của yêu cầu. Ví dụ, có thể ưu tiên người dùng đã đăng nhập khi có đột biến, hoặc định tuyến lưu lượng nhạy cảm đến cụm bảo mật cao hơn.
Môi trường đa đám mây và lai
Khi doanh nghiệp phân tán khối lượng công việc giữa nhiều nhà cung cấp đám mây (hoặc kết hợp on-prem với đám mây), bộ cân bằng tải cũng thích nghi. Chúng cần nhận biết vị trí tốt hơn, hỗ trợ failover xuyên đám mây và quản lý định tuyến giữa các môi trường rất khác nhau. Hãy kỳ vọng có thêm các “điều phối viên” lưu lượng toàn cầu và dàn nhạc ở tầng DNS trong các thiết lập này.
Edge và cân bằng tải cục bộ hóa
Với sự trỗi dậy của điện toán biên (edge), cân bằng tải đang dịch gần người dùng hơn. Thay vì đưa mọi thứ qua đám mây trung tâm, yêu cầu được phục vụ từ các nút biên, giảm mạnh độ trễ. Cân bằng tải ở edge phải nhẹ, thông minh và siêu cục bộ.
Hệ thống tự trị và dựa trên agent
Một số nền tảng thử nghiệm đang khám phá cân bằng tải dựa trên agent, nơi từng dịch vụ tham gia quyết định luồng lưu lượng dựa trên quan sát cục bộ. Cách này phân tán hơn và phản hồi nhanh với biến động nhỏ, nhưng cũng tăng thách thức phối hợp.
Rõ ràng là tất cả xu hướng này cùng hướng đến một điều: cân bằng tải ngày càng động, thông minh và nhận thức ngữ cảnh hơn. Thời của round-robin đơn giản vẫn còn (hà cớ gì bỏ cái đang hiệu quả?), nhưng chúng bắt đầu nhường “sân khấu” cho những hệ thống biết học, thích ứng và quyết định theo thời gian thực dựa trên nhiều yếu tố hơn là chỉ tải máy chủ.
Kết luận
Xuyên suốt bài viết, chúng ta đã tìm hiểu cân bằng tải là gì, vì sao quan trọng, và cách nó vận hành bên trong. Chúng ta đã nói về thuật toán, kiến trúc và ứng dụng thực tế, và hy vọng đã giúp mọi thứ bớt “huyền bí”. Hy vọng bạn đã có cái nhìn rõ ràng hơn về cách mọi thứ ăn khớp với nhau!
Bước tiếp theo, nếu bạn muốn học thêm, hãy đăng ký các khóa học chuyên đề của chúng tôi. Tôi khuyên bạn học khóa Introduction to Kubernetes và khóa AWS Cloud Technology and Services Concepts.
Cân bằng tải là một khái niệm xuất hiện ở nhiều nơi hơn bạn nghĩ.
Hãy hình dung một sáng thứ Bảy trong siêu thị đông nghịt mà chỉ có một quầy thanh toán mở. Mười lăm người xếp hàng, ai cũng bực bội, còn tội nghiệp thu ngân thì trông như đang cân nhắc lại mọi quyết định cuộc đời đưa họ đến khoảnh khắc này. Căng thẳng dâng cao thì bất ngờ 3 nhân viên xuất hiện, mở thêm vài làn và hướng dẫn khách sang các hàng ngắn hơn. Mọi thứ nhanh hẳn, áp lực giảm, và dòng người bắt đầu di chuyển bình thường. Về bản chất, đó chính là cân bằng tải.
Trong bài viết này, tôi sẽ dẫn bạn qua cân bằng tải là gì, vì sao nó quan trọng, cách nó hoạt động bên trong, và cách nó giúp thế giới số không sụp đổ khi quá tải. Bạn không cần kiến thức đặc biệt để theo dõi, nên đừng lo nếu bạn không rành về mạng hay kiến trúc đám mây! Hướng dẫn này sẽ giữ mọi thứ rõ ràng, thực tế và (hy vọng) hơi vui một chút.
Cân bằng tải là gì và vì sao quan trọng?
Trong công nghệ, cân bằng tải là cách chúng ta phân phối lưu lượng hoặc tác vụ đến nhiều máy chủ hay tài nguyên. Thay vì để một máy đơn lẻ kiệt sức gánh mọi thứ, bộ cân bằng tải trải đều công việc để hệ thống giữ được tốc độ, ổn định và khả năng mở rộng. Nó có mặt ở khắp nơi trong hạ tầng hiện đại: nền tảng đám mây dùng để xử lý hàng triệu người dùng, pipeline AI dựa vào nó để phân tán dữ liệu giữa các nút, và các trang thương mại điện tử trông cậy vào nó để sống sót qua Black Friday.
Giả sử ứng dụng của bạn không có bộ cân bằng tải. Một máy chủ nhận tất cả yêu cầu, tất cả lưu lượng, tất cả áp lực. Có thể nó trụ được một lúc, cho đến khi (tất yếu) không còn trụ nổi. Nó chậm lại, người dùng bực bội, thậm chí sập hẳn. Trong khi đó, các máy chủ khác thì “ngồi chơi xơi nước”.
Không có cân bằng tải, về cơ bản bạn sẽ mắc kẹt với:
Giờ thêm một bộ cân bằng tải vào, bức tranh sẽ khác hẳn. Nó ngồi trước các máy chủ backend, theo dõi tình trạng từng máy và phân phối yêu cầu đến nơi khỏe mạnh nhất hoặc ít bận nhất. Một số còn giám sát thời gian phản hồi hay tài nguyên máy chủ theo thời gian thực.
Bạn sẽ nhận được:
Nếu vẫn nghĩ về ví dụ siêu thị, hãy tưởng tượng hàng 15 người được chia thông minh sang 5 quầy. Không ai hoảng, không ai la ó, và bạn đến quầy pizza đông lạnh nhanh hơn. Đó là mục tiêu.
Cách cân bằng tải hoạt động
Chúng ta đã nói về vì sao cân bằng tải hữu ích. Giờ cùng xem nó thực sự vận hành thế nào bên trong.
Ở mức khái quát, bộ cân bằng tải nằm giữa client (người hoặc hệ thống gửi yêu cầu) và các máy chủ backend (nơi xử lý công việc). Nhiệm vụ của nó là nhận mỗi yêu cầu đến và quyết định gửi đi đâu.
Luồng cơ bản như sau:
Về lý thuyết khá đơn giản, nhưng phía sau có nhiều thứ diễn ra, và có vài khái niệm then chốt để mọi thứ vận hành trơn tru:
Cân bằng tải vs. bộ cân bằng tải
Lưu ý nhanh: “cân bằng tải” là khái niệm (phân phối lưu lượng), còn “bộ cân bằng tải” là công cụ hay dịch vụ thực thi điều đó. Hai thuật ngữ này thường được dùng lẫn nhau, nhưng biết sự khác biệt vẫn hữu ích.
Thuật toán cân bằng tải
Dù đôi khi bộ cân bằng tải chọn máy chủ ngẫu nhiên, thực tế có những chiến lược gọi là thuật toán cân bằng tải quyết định cách phân phối lưu lượng đến tài nguyên backend.
Một số thì khá đơn giản, dễ đoán; số khác điều chỉnh theo thời gian thực dựa trên hiệu năng máy chủ, số kết nối hoặc tốc độ phản hồi. Hãy chia chúng thành hai nhóm lớn.
Thuật toán tĩnh
Những thuật toán này không thích ứng với tình trạng hệ thống; chúng chỉ làm theo quy tắc định sẵn. Do đó dễ triển khai và dự đoán, nhưng không phải lúc nào cũng lý tưởng trong áp lực thực tế.
Thuật toán tĩnh. Ảnh: Tác giả
Thuật toán động
Những thuật toán này thích ứng dựa trên tình trạng thực tế trong hệ thống. Thông minh hơn, nhưng đòi hỏi giám sát và nhận biết hệ thống nhiều hơn.
Thuật toán động. Ảnh: Tác giả
Thuật toán tĩnh phù hợp khi lưu lượng có thể dự đoán và máy chủ đồng đều. Thuật toán động tỏa sáng khi mọi thứ hỗn loạn hơn đôi chút.
Được rồi, giờ nói về các loại bộ cân bằng tải: phần cứng, phần mềm, gốc đám mây, và hơn thế.
Các loại bộ cân bằng tải
Không phải bộ cân bằng tải nào cũng giống nhau. Có loại ở dạng phần cứng, có loại chạy dưới dạng phần mềm, có loại đi kèm dịch vụ đám mây, và có loại chuyên cho các trường hợp đặc thù. Bạn dùng loại nào tùy thuộc kiến trúc, quy mô, và đôi khi là ngân sách.
Theo cách triển khai
Bộ cân bằng tải phần cứng
Là các thiết bị vật lý đặt trong trung tâm dữ liệu, được xây dựng chuyên biệt để cân bằng lưu lượng. Mạnh và nhanh, nhưng đắt và khó mở rộng theo nhu cầu. Phù hợp doanh nghiệp lớn và hạ tầng on-prem.
Bộ cân bằng tải phần mềm
Chạy như ứng dụng trên máy chủ mục đích chung. Công cụ như HAProxy, nginx (thuộc F5), hoặc Envoy thuộc nhóm này. Chúng rẻ hơn, linh hoạt hơn và dễ tích hợp vào hầu hết môi trường.
Bộ cân bằng tải gốc đám mây
Nếu bạn dùng AWS, Azure, hoặc GCP, rất có thể bạn đã dùng bộ cân bằng tải gốc đám mây, như AWS ELB, Azure Load Balancer, hoặc GCP Load Balancing. Chúng được quản lý sẵn, tự động mở rộng và tích hợp tốt với dịch vụ khác.
Nếu bạn muốn làm quen cách AWS xử lý phần này (và nhiều mảnh ghép hạ tầng khác), hãy xem khóa học AWS Cloud Technology and Services Concepts của chúng tôi.
Bạn có thể đã nghe về bộ cân bằng tải “elastic”. Chúng được thiết kế để co giãn theo khối lượng công việc. Thường là một phần của hệ thống gốc đám mây, nhưng “elastic” đơn giản là có thể thích ứng động với lưu lượng — lý tưởng cho tải tăng giảm thất thường.
Theo lớp OSI
Mô hình OSI là khung khái niệm mô tả dữ liệu di chuyển trong mạng. Có bảy lớp, từ dây vật lý đến ứng dụng trên trình duyệt. Với cân bằng tải, lớp liên quan nhất là lớp 4 và 7.
Bộ cân bằng tải lớp 4 (Lớp Vận chuyển)
Ra quyết định định tuyến dựa trên địa chỉ IP, cổng, và lưu lượng TCP/UDP. Nhanh và hiệu quả, nhưng không biết gì về nội dung truyền đi.
Bộ cân bằng tải lớp 7 (Lớp Ứng dụng)
Xem xét nội dung thực của yêu cầu, như HTTP header, cookie, hoặc URL. Nhờ đó có thể làm những việc nâng cao như định tuyến theo đường dẫn URL, A/B testing, hoặc ưu tiên ngôn ngữ. Ví dụ, nếu bạn muốn /api/ vào một cụm và /login vào cụm khác, bạn sẽ cần lớp 7.
Các loại chuyên biệt
Bộ cân bằng tải máy chủ toàn cầu (GSLB)
Dùng để phân phối lưu lượng giữa các trung tâm dữ liệu phân tán theo địa lý. Hữu ích cho thiết lập đa vùng, độ trễ thấp, hoặc khôi phục thảm họa.
Bộ cân bằng tải nội bộ
Hoạt động hoàn toàn trong mạng riêng, dùng để cân bằng lưu lượng giữa các dịch vụ bên trong đám mây hoặc cụm.
Bộ cân bằng tải Diameter
Chuyên cho hệ thống viễn thông dùng giao thức Diameter, thường gặp trong mạng di động để định tuyến, xác thực và xử lý yêu cầu tính cước.
Bộ cân bằng tải HTTP(S)
Được tối ưu để xử lý riêng lưu lượng HTTP và HTTPS. Thường bao gồm SSL termination, định tuyến theo URL, và bảo vệ DDoS tích hợp.
Mỗi loại giải một bài toán khác nhau. Có loại tập trung vào mở rộng, có loại ưu tiên độ trễ, bảo mật, hoặc dễ dùng. Biết chọn đúng loại sẽ tạo khác biệt lớn cho độ trơn tru (hay đau đầu) khi vận hành hạ tầng.
Kiến trúc và tô-pô bộ cân bằng tải
Đến giờ chúng ta đã nói bộ cân bằng tải làm gì và các loại có thể dùng, nhưng còn cách chúng được xây dựng bên trong thì sao? Kiến trúc của hệ thống cân bằng tải ảnh hưởng đến mọi thứ, từ khả năng mở rộng đến mức độ “êm ái” khi gặp sự cố.
Mô hình leader-follower
Đây là thiết lập kinh điển: một nút “leader” đưa ra quyết định và phân phối công việc cho nhiều nút “worker”. Đơn giản, dễ hiểu, nhưng leader có thể thành nút cổ chai hoặc điểm lỗi đơn nếu không có dự phòng phù hợp.
Cân bằng tải phân tán
Thay vì một “bộ não” trung tâm, mỗi bộ cân bằng tải đều biết về các “đồng nghiệp” và chia sẻ công việc. Điều này cải thiện khả năng chịu lỗi và mở rộng, nhưng việc phối hợp sẽ khó hơn. Bạn thường thấy ở hệ thống quy mô lớn với định tuyến anycast hoặc phân phối dựa trên DNS.
Trong môi trường container, đặc biệt với Kubernetes, cân bằng tải càng thú vị. Services, ingress controller và sidecar phối hợp để định tuyến thông minh trong cụm. Nếu bạn mới bắt đầu với thế giới đó, khóa học Introduction to Kubernetes của chúng tôi là cách thực hành vững chắc để học các nền tảng.
Work stealing
Trong thiết lập này, worker rảnh có thể “cướp” tác vụ từ worker bận. Thường dùng trong môi trường tính toán nặng như hàng đợi tác vụ hoặc pipeline xử lý dữ liệu, nhưng ít dùng cho lưu lượng web. Dù vậy, đây là mẫu hữu ích cho cân bằng tải không thể dự đoán.
Phân cấp nhiều tầng
Một số hệ thống xếp tầng bộ cân bằng tải, như có một tầng ở mức toàn cầu (ví dụ giữa các vùng), một tầng ở mức trung tâm dữ liệu, và tầng nữa trong một cụm dịch vụ cụ thể. Cách này giúp quản lý độ phức tạp và giữ mỗi tầng tập trung vào một phạm vi nhất định.
Kiến trúc cân bằng tải.
Mỗi kiến trúc đều có đánh đổi. Mô hình tập trung dễ hiểu nhưng dễ thành nút thắt, mô hình phân tán mở rộng tốt hơn nhưng tăng phức tạp, còn tô-pô nhiều tầng thì mô-đun hóa nhưng có thể thêm độ trễ nếu thiết kế không khéo. Như thường lệ, không có câu trả lời “chuẩn cho mọi nhà”. Tùy thuộc vào quy mô hệ thống, mô hình lưu lượng và mức chịu rủi ro của bạn.
Thách thức và hạn chế
Cân bằng tải rất mạnh, nhưng không phải phép màu. Dù giúp hệ thống đáng tin cậy, mở rộng và hiệu quả hơn, nó cũng mang đến lớp phức tạp mới và những điểm có thể hỏng. Hãy nói về vài đánh đổi mà kỹ sư thường gặp, cả về kỹ thuật lẫn vận hành.
Thách thức chung trong cân bằng tải
Bản thân bộ cân bằng tải có thể thành nút thắt
Trớ trêu thay, công cụ để phân phối lưu lượng lại có thể trở thành điểm lỗi đơn nếu kiến trúc không đúng, đặc biệt trong mô hình tập trung hay dựa trên leader. Vì vậy nhiều hệ thống dùng nhiều bộ cân bằng tải, cơ chế failover, hoặc thậm chí cân bằng ở tầng DNS để san sẻ rủi ro.
Tăng overhead
Dù nhanh đến đâu, bộ cân bằng tải vẫn thêm một bước trung gian giữa client và backend. Điều này có thể gây độ trễ, nhất là trong kiến trúc nhiều tầng hoặc định tuyến ở lớp ứng dụng (lớp 7).
SSL termination hữu ích nhưng tốn kém
Xử lý HTTPS tại bộ cân bằng tải (SSL termination) giúp giảm tải CPU cho backend, nhưng cũng đồng nghĩa bộ cân bằng làm nhiều hơn và chịu trách nhiệm cho thiết lập bảo mật, chứng chỉ nhạy cảm.
Duy trì phiên so với tính stateless
Sticky session hữu ích để giữ người dùng gắn với cùng backend (như lúc đăng nhập), nhưng làm phức tạp việc mở rộng và khó vận hành dịch vụ hoàn toàn stateless. Kỹ sư thường phải chọn giữa trải nghiệm người dùng và sự tinh gọn kiến trúc.
Cấu hình phức tạp rất nhanh
Logic định tuyến càng thông minh, càng nhiều chỗ cho lỗi, định tuyến sai, hoặc các vấn đề hiệu năng tinh vi khó truy vết. Bạn sẽ thấy mình thật thông minh khi thiết lập xong, và ít thông minh hẳn khi bị gọi dậy lúc 2 giờ sáng để debug health check chập chờn.
Thách thức thực tế cho kỹ sư và quản trị viên
Tinh chỉnh thuật toán không có công thức chung
Mỗi ứng dụng phản ứng khác nhau dưới tải. Chọn giữa thuật toán tĩnh hay động và tinh chỉnh ngưỡng kết nối, khoảng kiểm tra sức khỏe… đòi hỏi nhiều thử-sai và kinh nghiệm.
Khắc phục sự cố khó hơn khi có lớp trung gian
Khi có trục trặc, bộ cân bằng tải thêm một nơi phải kiểm tra. Tuyến cấu hình sai, yêu cầu bị rơi, lớp cache, hay kết quả health check không nhất quán đều làm mọi thứ rối rắm.
Bảo mật làm tăng độ phức tạp
Nếu bộ cân bằng tải xử lý SSL, bạn cần đảm bảo cấu hình đúng, vá kịp thời và theo dõi sát. Sai sót có thể tạo lỗ hổng hoặc làm đứt giao tiếp an toàn.
Tính quan sát trở nên quan trọng hơn
Điều này liên quan đến điểm phức tạp tăng thêm. Bạn cần logging, metrics và tracing mạnh để hiểu luồng yêu cầu qua hệ thống. Nếu thiếu quan sát tốt, một bộ cân bằng tải “hành” có thể khó phát hiện, và còn khó sửa hơn.
Nói cho rõ, không điều nào trong số này là lý do không dùng cân bằng tải. Đó chỉ là thực tế của việc xây dựng hệ thống bền bỉ: mỗi lớp bạn thêm có thể giúp ích, nhưng cũng mang theo thách thức mới cần quản lý.
Xu hướng tương lai trong cân bằng tải
Giống mọi thứ trong công nghệ, cân bằng tải đang tiến hóa. Khi hệ thống trở nên phức tạp, phân tán và động hơn, các cách tiếp cận truyền thống bị kéo căng và chiến lược mới được thử nghiệm.
Cân bằng tải dựa trên AI và ML
Điều này khá hiển nhiên trước xu hướng công nghệ toàn cầu. Nền tảng hiện đại bắt đầu tích hợp machine learning để dự đoán mẫu lưu lượng và đưa ra quyết định định tuyến thông minh hơn. Thay vì chỉ phản ứng với tải hiện tại, hệ thống có thể dự liệu đột biến (như ra mắt sản phẩm hoặc tin nóng) và điều chỉnh trước luồng lưu lượng. Vẫn là giai đoạn đầu, nhưng tiềm năng hạ tầng tự tối ưu là có thật.
Nếu bạn muốn khám phá hướng này, bài hướng dẫn về Machine Learning, Pipelines, Deployment and MLOps của chúng tôi là điểm khởi đầu tuyệt vời.
Cân bằng tải nhận thức ứng dụng
Bộ cân bằng tải truyền thống không thực sự biết ứng dụng của bạn làm gì; chúng chỉ nhìn lưu lượng. Cân bằng tải nhận thức ứng dụng đi sâu hơn. Nó có thể quyết định dựa trên danh tính người dùng, loại thiết bị, hoặc mức độ quan trọng về kinh doanh của yêu cầu. Ví dụ, có thể ưu tiên người dùng đã đăng nhập khi có đột biến, hoặc định tuyến lưu lượng nhạy cảm đến cụm bảo mật cao hơn.
Môi trường đa đám mây và lai
Khi doanh nghiệp phân tán khối lượng công việc giữa nhiều nhà cung cấp đám mây (hoặc kết hợp on-prem với đám mây), bộ cân bằng tải cũng thích nghi. Chúng cần nhận biết vị trí tốt hơn, hỗ trợ failover xuyên đám mây và quản lý định tuyến giữa các môi trường rất khác nhau. Hãy kỳ vọng có thêm các “điều phối viên” lưu lượng toàn cầu và dàn nhạc ở tầng DNS trong các thiết lập này.
Edge và cân bằng tải cục bộ hóa
Với sự trỗi dậy của điện toán biên (edge), cân bằng tải đang dịch gần người dùng hơn. Thay vì đưa mọi thứ qua đám mây trung tâm, yêu cầu được phục vụ từ các nút biên, giảm mạnh độ trễ. Cân bằng tải ở edge phải nhẹ, thông minh và siêu cục bộ.
Hệ thống tự trị và dựa trên agent
Một số nền tảng thử nghiệm đang khám phá cân bằng tải dựa trên agent, nơi từng dịch vụ tham gia quyết định luồng lưu lượng dựa trên quan sát cục bộ. Cách này phân tán hơn và phản hồi nhanh với biến động nhỏ, nhưng cũng tăng thách thức phối hợp.
Rõ ràng là tất cả xu hướng này cùng hướng đến một điều: cân bằng tải ngày càng động, thông minh và nhận thức ngữ cảnh hơn. Thời của round-robin đơn giản vẫn còn (hà cớ gì bỏ cái đang hiệu quả?), nhưng chúng bắt đầu nhường “sân khấu” cho những hệ thống biết học, thích ứng và quyết định theo thời gian thực dựa trên nhiều yếu tố hơn là chỉ tải máy chủ.
Kết luận
Xuyên suốt bài viết, chúng ta đã tìm hiểu cân bằng tải là gì, vì sao quan trọng, và cách nó vận hành bên trong. Chúng ta đã nói về thuật toán, kiến trúc và ứng dụng thực tế, và hy vọng đã giúp mọi thứ bớt “huyền bí”. Hy vọng bạn đã có cái nhìn rõ ràng hơn về cách mọi thứ ăn khớp với nhau!
Bước tiếp theo, nếu bạn muốn học thêm, hãy đăng ký các khóa học chuyên đề của chúng tôi. Tôi khuyên bạn học khóa Introduction to Kubernetes và khóa AWS Cloud Technology and Services Concepts.