Cùng mình tìm hiểu về Load Balancer và cách hoạt động nhé.
1. Load Balancer là gì ?
Load Balancer là một kỹ thuật được sử dụng để phân phối lưu lượng mạng trên một nhóm máy chủ được gọi là cụm máy chủ. Nó tối ưu hóa hiệu suất mạng, độ tin cậy và dung lượng, giảm độ trễ vì yêu cầu được phân bổ đồng đều giữa nhiều máy chủ và tài nguyên tính toán.
2. Cách thức hoạt động của Load Balancer
2.1 Nguyên lý hoạt động
Để miêu tả cách mà Load balancer hoạt động một cách dễ hiểu nhất thì chúng ta có thể hình dung Load Balancer như một người cảnh sát giao thông đứng ở phía trước server và routing đang điều hướng các request của client (phương tiện giao thông có nhu cầu di chuyển đến sever) đi đến servers có khả năng thực hiện các request đó.
Load Balancer có nhiệm vụ phân phối các request sao cho tối ưu về tốc độ và hiệu suất nhất và đảm bảo rằng không có server nào phải hoạt động quá mức. Nếu một server đơn lẻ bị hỏng load balancer sẽ chuyển hướng lưu lượng truy cập đến các server trực tuyến còn lại. Nó tương tự như cách mà người cảnh sát giao thông có nhiệm vụ điều hướng các phương tiện di chuyển một cách có trật tự để tránh việc ùn tắc giao thông vậy.
Thú vị hơn là khi một server mới được thêm vào nhóm máy chủ, Load Banlacer sẽ tự động bắt đầu gửi yêu cầu đến máy chủ mới này.
2.2 Cách Load Balancer phản hồi khi nhận yêu cầu từ người dùng.
Load Balancer có 2 cách phản hồi khi nhận yêu cầu từ người dùng, dưới đây là 2 ví dụ để các bạn dễ hình dung về 2 cách phản hồi.
2.2.1 Ví dụ về Static Load Balancing (Bộ cân bằng tải tĩnh):
Một công ty lưu trữ một trang web có nội dung phần lớn là tĩnh. Kịch bản này sẽ lý tưởng cho bộ cân bằng tải tĩnh vì nhu cầu lưu lượng truy cập có thể dự đoán được và nhất quán. Công ty có thể sử dụng hai (hoặc nhiều) máy chủ web giống hệt nhau để bộ cân bằng tải tĩnh có thể phân phối lưu lượng truy cập.
2.2.2 Ví dụ về dynamic load balancing ( Bộ cân bằng tải động):
Một công ty gặp phải tình trạng lưu lượng truy cập tăng, tăng đột biến và giảm (ví dụ: Những sàn thương mại điện tử lớn và chúng sẽ có những sự gia tăng truy cập khi có ngày lễ mua sắm lớn). Các tổ chức này sẽ tận dụng được hết những lợi ích từ Load Banlacer mang lại .
Một số sự gia tăng đột biến về lưu lượng và nhu cầu có thể được lên kế hoạch, nhưng một số thì không thể (ví dụ: Một tổ chức cứu trợ có thể cần ứng phó trực tuyến nhanh chóng với thảm họa thiên nhiên).
Trong những trường hợp này, những thuật toán Load Balancer sẽ giúp đảm bảo quyền truy cập vào ứng dụng và tài nguyên khi khách hàng và người dùng cần chúng nhất.
3. Vấn đề gì sẽ xảy ra nếu không có Load Balancer?
Nếu bạn đã theo dõi những phần trên thì phần nào chúng ta cũng đã biết được Load Balancer được sử dụng cho hệ thống có nhiều server chạy song song nhau (Multi Server).
Chắc hẳn ở đây mọi người sẽ đặt ra 2 câu hỏi: “Tại sao không sử dụng một server để xử lý tất cả yêu cầu, vậy thì khi đó đâu cần sự xuất hiện của Load Balancer nữa?” và “Khi sử dụng nhiều server để xử lý các yêu cầu nhưng không sử dụng Load Balancer?”.
Nếu bạn đang có những có những câu hỏi tương tự thì hãy cùng 200Lab giải đáp những thắc mắc của bạn nhé :)
3.1 Nếu chỉ sử dụng một server để xử lý tất cả yêu cầu thì sẽ như thế nào?
Khi sử dụng 1 server để xử lý mọi công việc chắc chắn sẽ tồn tại những khó khăn nhất định. Dễ nhận thấy nhất đó chính là không đảm bảo được tính sẳn sàng của dịch vụ doanh nghiệp (vì khi server có sự cố thì không có server nào để thay thế và tiếp tục các tiến trình đang thực hiện dẫn đến website sẽ dẫn đến tính trạng downtime.
Điều này ngoài việc không đảm bảo tính sẳn sàng mà còn gây ảnh hưởng nghiêm trọng tới trải nghiệm người dùng, ảnh hưởng tới doanh thu, và hiệu quả hoạt động của doanh nghiệp.
3.2 Sẽ như thế nào khi sử dụng nhiều server để xử lý các yêu cầu nhưng không sử dụng Load Balancer ?
Đầu tiên ta phải công nhận rằng nó mang lại nhiều hiệu quả hơn nhưng không vì thế mà nó không có khuyết điểm. Lấy minh chứng cụ thể: “Khi triển khai nhiều server, tức là đồng thời sở hữu nhiều địa chỉ của các cloud server. Trong khi đó, 1 domain không thể trỏ đến nhiều server cùng lúc” vậy nên khi server ta đang trỏ đến gặp vấn đề thì nó cũng không thể tự điều hướng để một server khác để xử lý những yêu cầu đang thực hiện”.
Không có Load Balancer sẽ gây ra nhiều vấn đề nghiêm trọng, ảnh hưởng đến hiệu suất, độ tin cậy, và giảm khả năng mở rộng của hệ thống.
Việc không có sự giúp đỡ của Load Balancer trong hệ thống có thể gặp một số vấn đề như sau:
- Không có sự phân phối tải công việc đồng đều.
- Giảm khả năng mở rộng.
- Tăng rủi ro về độ tin cậy.
- Quản lý và bảo trì phức tạp.
- Hiệu suất không tối ưu.
Đây cũng là lúc ta thấy rõ được sự quan trọng của Load Balancer trong hệ thống sử dụng nhiều server.
4. Những thuật toán triển khai Load Balancer.
Có 5 thuật toán thông dụng để triển khai Load Balancer.
- Round Robin
- Weighted Round Robin
- Source Hash IP
- Least Connection
- Least Response Time
4.1 Round Robin
Thuật toán Round Robin là một phương pháp cân bằng tải tĩnh đơn giản trong đó các yêu cầu được phân phối trên các máy chủ theo cách tuần tự hoặc luân phiên.
Nó rất dễ thực hiện nhưng nhược điểm của nó là không kiểm soát sức chịu tải trên các máy chủ nên có thể tồn tại nguy cơ một trong các máy chủ có sức chịu tải thấp và trở nên quá tải trong quá trình vận hành.
Và đây cũng là thuật toán default của Load Balancer.
Đây cũng là cách mà thuật toán Round Robin hoạt động, thuật toán này đảm bảo mỗi máy chủ đều được phân phối như nhau.
4.2 Weighted Round Robin
Thuật toán Weighted Round Robin cũng là một phương pháp cân bằng tải tĩnh rất giống với kỹ thuật round-robin. Sự khác biệt duy nhất là mỗi máy chủ trong danh sách đều được cung cấp điểm có trọng số. Tùy thuộc vào điểm số có trọng số, yêu cầu sẽ được phân phối đến các máy chủ này.
Những điều cần lưu ý:
- Việc phân phối theo chu kỳ, tương tự như kỹ thuật quay vòng, nhưng với mỗi máy chủ nhận được một số yêu cầu tỷ lệ thuận với trọng lượng của nó.
- Trong quá trình triển khai Weighted Round Robin cơ bản, có thể không có giới hạn rõ ràng về số lượng yêu cầu mà mỗi máy chủ có thể xử lý.
- Hạn chế xuất phát từ dung lượng của mỗi máy chủ và thuật toán giả định rằng mỗi máy chủ có thể xử lý tỷ lệ yêu cầu được phân bổ.
- Nếu máy chủ đạt đến khả năng xử lý, nó có thể bắt đầu từ chối hoặc xếp hàng các yêu cầu bổ sung, tùy thuộc vào hành vi cụ thể của máy chủ.
- Có thể có những tình huống trong đó trọng số có thể được điều chỉnh linh hoạt dựa trên tình trạng máy chủ, tải hoặc các yếu tố khác.
Thuật toán Weight Round Robin cũng họat động như vậy trọng số được quản trị viên chỉ định cho mỗi máy chủ sẽ quyết định tỉ lệ request được điều hướng đến máy chủ đó. Cũng có thể hiểu theo hướng là nó sẽ giao nhiều nhiệm vụ hơn cho máy chủ có khả năng giải quyết yêu cầu tốt hơn.
4.3 Source IP Hash
Thuật toán cân bằng tải Hash IP nguồn là một phương pháp được sử dụng trong cân bằng tải mạng để phân phối các yêu cầu đến giữa một nhóm máy chủ dựa trên hash value của địa chỉ IP nguồn. Thuật toán này nhằm mục đích đảm bảo rằng các yêu cầu bắt nguồn từ cùng một địa chỉ IP nguồn sẽ được chuyển hướng nhất quán đến cùng một máy chủ.
Chúng ta cần triển khai thuật toán cân bằng tải để phân phối các yêu cầu đến trên một nhóm máy chủ dựa trên hàm hash của địa chỉ IP nguồn. Mục đích là để đảm bảo rằng các yêu cầu đến từ cùng một địa chỉ IP nguồn được định tuyến nhất quán đến cùng một máy chủ.
4.4 Least Connection
Thuật toán Least Connection là một phương pháp cân bằng tải động, gán các yêu cầu mới cho máy chủ có ít kết nối hoạt động nhất. Ý tưởng của thuật toán này là phân phối khối lượng công việc đến theo cách giảm thiểu tình trạng quá tải hiện tại trên mỗi máy chủ, nhằm mục đích phân phối cân bằng các kết nối trên tất cả các tài nguyên có sẵn.
- Để thực hiện điều này, bộ cân bằng tải cần thực hiện một số tính toán bổ sung để xác định máy chủ có số lượng kết nối ít nhất.
- Điều này có thể tốn kém hơn một chút so với phương pháp Round Robin nhưng phương pháp này sẽ giảm bớt được rủi ro về vấn đề quá tải dựa trên việc đánh giá dựa trên tải hiện tại trên máy chủ.
Ví dụ trên đã mô tả phần nào cách thuật toán Least Connect hoạt động. Thuật toán cân bằng tải phân phối các yêu cầu đến một nhóm máy chủ, giảm thiểu số lượng kết nối đang hoạt động trên mỗi máy bằng cách chuyển các yêu cầu mới đến máy chủ có ít kết nối hoạt động nhất. Điều này đảm bảo phân phối khối lượng công việc cân bằng và ngăn chặn tình trạng quá tải trên từng máy chủ.
4.5 Least Response Time
Phương pháp Least Response Time là phương pháp cân bằng tải động nhằm mục đích giảm thiểu thời gian phản hồi, bằng cách chuyển các yêu cầu mới đến máy chủ với thời gian phản hồi nhanh nhất.
- Nó xem xét hiệu suất lịch sử của máy chủ để đưa ra quyết định về nơi định tuyến các yêu cầu đến, tối ưu hóa để xử lý nhanh hơn.
- Yếu tố động đến từ việc liên tục theo dõi thời gian phản hồi của máy chủ và bản chất thích ứng của thuật toán, để định tuyến các yêu cầu đến máy có thời gian phản hồi thấp nhất trong lịch sử.
Thuật toán cân bằng tải Least Response phân phối các yêu cầu đến một nhóm máy chủ, nhằm mục đích giảm thiểu thời gian phản hồi bằng cách chuyển các yêu cầu mới đến máy có thời gian phản hồi tích lũy ít nhất. Điều này đảm bảo phân phối cân bằng khối lượng công việc và giúp tối ưu hóa hiệu suất hệ thống tổng thể.
5. Kết luận
Trong bài blog này, các bạn đã cùng 200Lab tiềm hiểu về khái niệm và tầm quan trọng của Load Balancer trong hệ thống mạng và ứng dụng web hiện đại.
Ngoài ra, chúng ta đã giải đáp được vấn đề tại sao lại phải sử dụng Load Balacer và đây cũng là tiền đề cho chúng ta nhận biết được tầm quan trọng của Load Balacer trong hệ thống.
Load Balancer đóng vai trò không thể thiếu trong việc duy trì, nâng cao hiệu suất của các dịch vụ trực tuyến. Việc hiểu rõ và triển khai đúng cách các thuật toán Load Balancer sẽ giúp hệ thống của bạn hoạt động mượt mà hơn, đảm bảo trải nghiệm tốt nhất cho người dùng.
Nếu bạn yêu thích các bài viết về lập trình thì có thể tham khảo các bài blog tại 200Lab nhé: