Cân bằng tải – giải pháp giảm tải cho máy chủ cung cấp dịch vụ

14:02 | 24/05/2012

Ngày nay, khi nhu cầu truy cập internet bùng nổ thì các máy chủ cung cấp dịch vụ đang trở nên quá tải. Việc lựa chọn một máy chủ đơn lẻ có cấu hình cực mạnh để đáp ứng nhu cầu này sẽ kéo theo chi phí đầu tư rất lớn. Giải pháp hiệu quả được đưa ra là sử dụng một nhóm máy chủ cùng thực hiện một chức năng, dưới sự điều khiển của một công cụ phân phối tải - Giải pháp cân bằng tải.

Cân bằng tải là một kỹ thuật để phân phối khối lượng công việc phải xử lý một cách đồng đều trên hai hoặc nhiều máy tính về các vấn đề liên kết mạng, CPU, ổ cứng... để có thể sử dụng tài nguyên một cách tối ưu, giảm thiểu thời gian hoạt động, tránh tình trạng quá tải.
Sử dụng nhiều dịch vụ với cân bằng tải thay vì một dịch vụ duy nhất có thể làm tăng độ tin cậy thông qua các máy dự phòng. Trong đó, cân bằng tải mạng là một kỹ thuật nhằm mở rộng hiệu năng của các máy chủ ứng dụng, chẳng hạn như máy chủ Web, nhờ phân phối các yêu cầu của máy khách cho các máy chủ trong nhóm. Khi đó, các máy chủ đều nhận gói IP đến nhưng gói chỉ được xử lý bởi một máy chủ nhất định. Các máy chủ trong nhóm sẽ đồng thời đáp ứng các yêu cầu khác nhau của các máy trạm. Với kỹ thuật cần bằng tải, quá trình xử lý và thời gian đáp ứng yêu cầu của máy trạm sẽ nhanh hơn nhiều (Hình 1).


Hình 1: Cân bằng tải trong cấu hình hệ thống

Chức năng của cân bằng tải
Cân bằng tải có một số chức năng cơ bản sau:
- Chặn lưu lượng mạng (chẳng hạn lưu lượng web) đến một trang web. Bản thân thiết bị cân bằng tải có thể là một Proxy hay một Firewall tầng ứng dụng (Application Layer), nó sẽ là đối tượng đầu tiên nhận các yêu cầu trước khi chia tải, do đó, chức năng này được coi như là thiết yếu của một cân bằng tải.
- Tách các lưu lượng thành các yêu cầu riêng biệt và quyết định máy chủ nào nhận các yêu cầu đó. Đây là chức năng chủ chốt của cân bằng tải. Tùy vào thuật toán áp dụng mà sẽ có từng cách thức khác nhau để phân chia cụ thể cho mỗi máy chủ.
- Duy trì một cơ chế ở những máy chủ đang sẵn sàng. Giữa  cân bằng tải và máy chủ luôn phải có liên lạc với nhau (Keep Alive) để biết được máy chủ đó còn “sống” hay không.
- Cung cấp khả năng dự phòng bằng cách sử dụng nhiều hơn một kịch bản fail- over.
- Cung cấp khả năng nhận thức nội dung phân tán bằng cách đọc URL, chặn cookie và biên dịch XML. Đây được coi là một trong những tiêu chí chia tải của hệ thống.

Ưu điểm của cân bằng tải
Khả năng của cân bằng tải thể hiện ở các mặt sau:
- Tính linh hoạt (Flexibility): Hệ thống cho phép bổ sung và loại bỏ các máy chủ bất kỳ khi nào cần và hiệu quả ngay tức thì. Thực tế, việc này không làm gián đoạn tới hoạt động của cả hệ thống, mà chỉ tại một điểm (node) trong hệ thống đó. Điều này cho phép duy trì, sửa chữa bất kỳ máy chủ nào trong hệ thống (thậm chí trong giờ cao điểm) mà ít tác động hoặc không có tác động nào tới hệ thống. Một cân bằng tải (Load Balancer) cũng có thể trực tiếp điều khiển lưu lượng mạng bằng cách sử dụng tập tin cookie, phân tích cú pháp URL, các thuật toán tĩnh/động... để tìm ra cách phân tải tối ưu cho hệ thống.
- Tính sẵn sàng cao (High availability): Hệ thống sẽ liên tục kiểm tra trạng thái của các máy chủ trong hệ thống và tự động “loại” bất kỳ máy chủ nào không “trả lời” trong một chu kỳ, cũng như tự động bổ sung máy chủ đó ngay khi nó hoạt động trở lại. Quá trình này là hoàn toàn tự động, thông qua cơ chế giao tiếp của cân bằng tải và các máy chủ, không cần có sự tham gia điều khiển trực tiếp của người quản trị. Do dó, một hệ thống cân bằng tải hướng đến tính dự phòng cho thiết bị chính trong trường hợp có thiết bị nào đó bị “hỏng”.
- Khả năng mở rộng (Scalability): Cân bằng tải chịu trách nhiệm phân phối tải tới nhiều máy chủ trong một hệ thống (Server Farm theo mặt vật lý và được gọi là Server Cluser – các bó Server), với mục đích là nâng cao hiệu quả, tăng sức mạnh phục vụ với số lượng lớn các máy chủ. Điều này mang lại lợi ích lớn về kinh tế, vì chỉ phải chi phí cho nhiều máy chủ nhỏ, thay vì đầu tư cho một máy chủ lớn, thiết bị chuyên dụng. Ngoài ra, trong quá trình hoạt động, số các máy chủ có thể thay đổi, thêm/bớt, loại bỏ, thay thế một cách dễ dàng mà không ảnh hưởng đến hoạt động của hệ thống, giữ cho hệ thống luôn có tính sẵn sàng cao.

   Thuật toán cân bằng tải

Thuật toán được sử dụng phổ biến là Weighted  Round Robin (WRR). Thuật toán này điều phối các máy chủ thực (real server) cũng luân phiên giống Round- Robin, nhưng nó còn kết hợp vào khả năng xử lý của từng máy chủ (Round - Robin xem như khả năng xử lý tất cả máy chủ bằng nhau). Mỗi máy chủ được đánh giá bằng một số nguyên (giá trị trọng số Weight – mặc định giá trị là 1), chỉ ra khả năng xử lý của nó. Ví  dụ, các  máy chủ thực A, B, C có weight lần lượt là 4, 3, 2 và thứ tự điều phối các yêu cầu AABABCABC, nó luân  phiên trong chu kỳ (mod sum(Wi)). Thứ tự chọn máy chủ thực phục vụ dựa vào số Weight của máy chủ.
Trong WRR, các máy chủ thực có giá trị trọng số cao sẽ nhận được kết nối mới đầu tiên và nhận nhiều kết nối hơn máy chủ có trọng số thấp, máy chủ có giá trị trọng số bằng nhau sẽ nhận sự phân tải các kết nối mới bằng nhau.
Ngoài thuật toán WRR còn có một số thuật toán như: Round Robin, Least Connection, Weighted Least Connection.

Kỹ thuật sử dụng trong cân bằng tải
Kỹ thuật được sử dụng phổ biến là Linux



Hình 2: Kiến trúc của LVS - NAT

Virtual Server (LVS) - Network Address Translation (NAT ). Kiến trúc LVS-NAT được mô tả trong hình 2:
Hoạt động của LVS - NAT như sau: khi một người dùng truy cập vào máy chủ ảo (virtual server - được cung cấp bởi cluster server), một gói yêu cầu (request packet) được gửi đến địa chỉ IP ảo (virtual IP address, IP chấp nhận yêu cầu cho Virtual service) và cân bằng tải. Cân bằng tải xác định địa chỉ đích và số hiệu cổng của gói. Nếu nó hợp lệ với máy chủ ảo được cung cấp bởi các máy chủ ảo dựa vào bảng quy tắc thì một máy chủ thực sẽ được chọn để phục vụ bằng các thuật toán cân bằng tải, thông tin về kết nối này được lưu vào bảng băm (hash) để ghi nhận kết nối. Tiếp theo, địa chỉ đích và số hiệu cổng của gói được ghi lại cho phù hợp với máy chủ được chọn và gói được chuyển tiếp đến máy chủ. Khi các gói tiếp theo của kết nối đã được thiết lập trước đó (kết nối này được tìm thấy trong bảng băm) và các gói này sẽ được ghi và chuyển đến cùng máy chủ đã phục vụ nó trước đó.
Ngoài ra còn một số kỹ thuật như sau: DNS (Domain Name Service) để chỉ định từng máy chủ cho mỗi nhóm người dùng được xác định trước; Kỹ thuật chia tải – giảm số người dùng cho mỗi máy chủ; Linux Virtual Server (LVS) - Tunnelling (TUN); Linux Virtual Server (LVS)- Direct  Routing.
Một số mô hình triển khai
Mô hình cân bằng tải LVS - Direct Routing gồm các thành phần chính sau (Hình 3):


HÌnh 3: Mô hình cân bằng tải LVS – Direct Routing

- Cân bằng tải 1 (Load Balancer 1) - Master (LDirector 1): được cấu hình để điều phối các yêu cầu từ bên ngoài tới các máy chủ thực bên trong, hoạt động ở chế độ Active.
- Cân bằng tải 2 (Load Balancer 2) - Backup (LDirector 2): được cấu hình tương tự như Master nhưng ở trạng thái chờ (Stand- by). Khi Master gặp sự cố thì Backup sẽ thay thế vai trò của Master.
- Máy chủ thực (Real Server): chứa nội dung dịch vụ Website.
- Kỹ thuật sử dụng: LVS – Direct Routing.
- Thuật toán sử dụng: Weighted Round Robin, thuật toán này điều phối các máy chủ thực luân phiên dựa vào khả năng xử lý của từng máy.
- Master và Backup sẽ dùng tín hiệu Heartbeat để trao đổi với nhau, nếu Master có sự cố thì Backup sẽ thay thế vai trò của Master. Khi Master xử lý xong sự cố thì Backup sẽ nhường lại vai trò cho Master.
- Master dùng LDirector để giám sát các máy chủ thực. Nếu một trong các máy chủ thực gặp sự cố thì Master chỉ chia yêu cầu cho các máy chủ thực còn lại. Khi máy chủ thực bị sự cố được khắc phục xong Master lại tiếp tục chia yêu cầu cho máy chủ thực đó.

Trên đây đã giới thiệu tổng quan về cân bằng tải và các thuật toán, chức năng, ưu điểm và một số kỹ thuật trong cân bằng tải. Nhằm giảm tải cho các máy chủ dịch vụ, nhà cung cấp và người sử dụng có thể sử dụng nhiều giải pháp khác nhau để máy chủ làm việc hiệu quả hơn, trong đó có giải pháp cân bằng tải