Cân bằng tải trong các ứng dụng Web

Vivek Viswanathan

Nội dung bài này nhằm mục đích cung cấp một số phương pháp để cân bằng tải trên các nhóm máy chủ (cluster) ứng dụng Web của bạn. Cluster là một nhóm các máy chủ chạy đồng thời một ứng dụng Web, quá trình thực hiện liên kết nhóm này làm cho các máy chủ hoạt động như một máy chủ riêng lẻ khi quan sát từ khía cạnh bên ngoài. Để cân bằng tải máy chủ, hệ thống cần phải phân phối các yêu cầu (request) đến nhiều nút khác nhau bên trong cluster máy chủ, với mục đích tối ưu hóa hiệu suất hệ thống. Điều này sẽ mang đến cho mạng của bạn hiệu suất cao hơn, khả năng mở rộng (scalability) - tránh rơi vào tình trạng túng thiếu tài nguyên mạng trong một doanh nghiệp hay một ứng dụng Web nào đó.

Khả năng có sẵn cao có thể được hiểu là tình trạng dư thừa. Nếu một máy chủ không thể quản lý một yêu cầu thì các máy chủ khác trong cluster đó có quản lý được nó không? Trong một hệ thống có khả năng cung cấp cao, nếu một Web Server bị lỗi thì máy chủ khác sẽ tiếp quản ngay để xử lý yêu cầu.

Khả năng mở rộng (Scalability) là khả năng của một ứng dụng có thể hỗ trợ được số lượng người ngày một tăng. Nếu nó cần 10ms để một ứng dụng có thể đáp trả cho một yêu cầu thì khoảng thời gian sẽ là bao lâu để nó đáp trả đến 10.000 yêu cầu cùng một lúc? Khả năng mở rộng vô hạn sẽ cho phép nó đáp trả các yêu cầu này chỉ trong khoảng 10ms. Khả năng mở rộng là đơn vị đo cho một loạt các hệ số như số lượng người dùng đồng thời mà một cluster có thể hỗ trợ và thời gian nó cần để xử lý một yêu cầu.

Có hai phương pháp chính để cân bằng tải đó là:

  • Luân chuyển vòng DNS
  • Sử dụng các bộ cân bằng tải bằng phần cứng

Luân chuyển vòng DNS

Hầu hết trong số các bạn có lẽ đều đã biết rằng, cơ sở dữ liệu DNS (Domain Name Server) bản đồ hóa tên host thành các địa chỉ IP.

Khi bạn nhập một URL vào trong trình duyệt (ví dụ như www.quantrimang.com) thì trình duyệt sẽ gửi một yêu cầu đến DNS yêu cầu nó trả về địa chỉ IP của site. Đây được gọi là việc tra cứu DNS. Sau khi trình duyệt Web có được địa chỉ IP cho site thì nó sẽ liên hệ với site bằng địa chỉ IP, và hiển thị trang mà bạn vừa yêu cầu. Máy chủ DNS thường có một địa chỉ IP được bản đồ hóa với một tên site nào đó. Trong ví dụ riêng của chúng tôi thì site là www.quantrimang.com bản đồ hóa thành địa chỉ IP là 222.255.31.160.

Để cân bằng tải bằng DNS, máy chủ DNS phải duy trình một số địa chỉ IP khác nhau cho cùng một tên site. Nhiều địa chỉ IP thể hiện nhiều máy trong một cluster, tất cả trong số chúng đều bản đồ hóa đến một tên site logic. Trong ví dụ của chúng ta, www.quantrimang.com có thể được cấu hình trên ba máy chủ trong một cluster với các địa chỉ IP dưới đây:

222.255.31.160
222.255.31.161
222.255.31.162

Trong trường hợp này, máy chủ DNS được bản đồ hóa như sau:

www.quantrimang.com 222.255.31.160
www.quantrimang.com 222.255.31.161
www.quantrimang.com 222.255.31.162

Khi yêu cầu đầu tiên đến được máy chủ DNS, nó sẽ trả về địa chỉ IP 222.255.31.160, máy đầu tiên. Khi có yêu cầu thứ hau, nó sẽ trả về địa chỉ IP thứ hai: 222.255.31.161. Tiếp tục như vậy, với yêu cầu thứ tư, địa chỉ IP đầu tiên lại được lặp lại.

Bằng cách sử dụng luân chuyển vòng DNS như ở trên, tất cả các yêu cầu đối với một site nào đó đều được phân phối đều đến tất cả các máy trong cluster. Chính vì vậy, với phương pháp cân bằng tải này, tất cả các nút trong cluster đều được sử dụng.

Ưu điểm của phương pháp luân chuyển vòng DNS

Các ưu điểm chính của phương pháp này nằm ở chỗ rẻ và dễ dàng:

Không đắt và dễ dàng thiết lập: Các quản trị viên hệ thống chỉ cần tạo một số thay đổi trong máy chủ DNS để hỗ trợ được việc luân chuyển vòng, và nhiều máy chủ DNS đã có sự hỗ trợ này. Nó không yêu cầu đến sự thay đổi mã của ứng dụng Web; trong thực tế, các ứng dụng Web không hề biết về cơ chế cân bằng tải mà nó bị thực hiện.

Đơn giản: Phương pháp này không yêu cầu đến các chuyên gia về mạng trong việc thiết lập hoặc giỡ rối hệ thống trong trường hợp có vấn đề nào đó xay ra.

Nhược điểm của phương pháp này

Có hai nhược điểm chính của phương pháp dựa trên phần mềm này là nó không cung cấp sự hỗ trợ mối quan hệ thời gian thực giữa các máy chủ với nhau và không hỗ trợ khả năng có sẵn cao.

- Không hỗ trợ mối quan hệ thời gian thực giữa các máy chủ. Mối quan hệ thời gian thực giữa các máy chủ là khả năng của hệ thống trong việc quản lý các yêu cầu của người dùng, máy chủ này hoặc bất kỳ máy chủ nào, phụ thuộc vào thông tin session được duy trì trên máy chủ hoặc tại mức cơ sở bản, mức cơ sở dữ liệu.

Không có được khả năng hỗ trợ mối quan hệ giữa các máy chủ, phương pháp luân chuyển vòng DNS dựa vào một trong ba phương pháp đã được đưa ra để duy trì sự kiểm soát session hoặc sự nhận dạng người dùng đối với các yêu cầu đang đến trên HTTP.

  • Các cookie
  • Các trường ẩn
  • Viết lại URL

Khi một người dùng thực hiện một yêu cầu đầu tiên, máy chủ Web sẽ trả một thẻ bằng văn bản duy nhất để phân biệt người dùng đó. Các yêu cầu tiếp theo có thẻ này để sử dụng cookie, viết lại URL hoặc các trường ẩn, cho phép máy chủ xuất hiện để duy trì một session giữa máy khách và máy chủ. Khi người dùng thiết lập một session với một máy chủ, thì tất cả các yêu cầu đến sau thường đều đi đến cùng một máy chủ.

Vấn đề ở đây là trình duyệt lưu địa chỉ IP của máy chủ đó. Khi Cache hết hạn, trình duyệt sẽ thực hiện một yêu cầu khác đối với máy chủ DNS để có được địa chỉ IP có liên kết với tên miền. Nếu máy chủ DNS trả về một địa chỉ IP khác, một máy chủ khác trong cluster, thì các thông tin về session sẽ bị mất.

- Không hỗ trợ cho khả năng có sẵn cao. Xem xét một cluster có n nút. Nếu một nút nào đó gặp vấn đề thì cứ yêu cầu thứ n đến máy chủ DNS đều hướng bạn đến một nút hỏng này. Một router thông minh có thể giải quyết được vấn đề này bằng cách kiểm tra các nút ở các khoảng thời gian nào đó, phát hiện ra các nút bị hỏng và gỡ bỏ chúng ra khỏi danh sách, chính vì vậy sẽ không có yêu cầu nào được gửi đến chúng nữa. Tuy vậy, vấn đề ở đây vẫn tồn tại nếu nút vẫn có nhưng ứng dụng Web đang chạy trên nút đã bị hỏng.

Thay đổi cluster sẽ mất nhiều thời gian để truyền bá đến toàn bộ phần còn lại của Internet. Một lý do ở đây là trong nhiều tổ chức lớn – các ISP, các công ty, hay đại lý – lưu các yêu cầu DNS của họ để giảm lưu lượng mạng và thời gian request. Khi người dùng bên trong các tổ chức như vậy thực hiện một request thì hệ thống sẽ được kiểm tra danh sách các tên DNS của Cache đã được bản đồ hóa địa chỉ IP. Nếu hệ thống phát hiện thấy một entry nào thì nó sẽ trả địa chỉ IP về cho người dùng. Nếu nó không phát hiện thấy entry nào trong Cache nội bộ thì ISP sẽ gửi request DNS này đến máy chủ DNS và lưu sự đáp trả.

Khi một entry đã được lưu hết hạn, ISP sẽ nâng cấp cơ sở dữ liệu nội bộ của nó bằng cách liên hệ với các máy chủ DNS khác. Khi danh sách các máy chủ của bạn thay đổi, nó có thể cần đến một khoảng thời gian ngắn cho các entry đã được lưu trên mạng của các tổ chức khác hết hạn và tìm kiếm danh sách các máy chủ đã được cập nhật. Trong suốt chu trình này, máy khách vẫn có thể thực hiện hành động “hit” nút máy chủ bị hỏng, nếu ISP của máy khách đó vẫn có một entry trỏ đến nó. Trong trường hợp như vậy, một số người dùng của ISP đó không thể truy cập vào site của bạn từ những lần truy cập ban đầu, thậm trí nếu cluster của bạn có các máy chủ dư thừa vẫn đang hoạt động.

Một vấn đề còn lớn hơn xuất hiên khi gỡ bỏ (removing) một nút so với việc bổ sung. Khi bạn bớt đi một nút, người dùng có thể đang thực hiện “hit” một máy chủ không tồn tại. Còn khi bạn thêm một nút thì máy chủ đó vẫn chưa được sử dụng cho tới khi địa chỉ IP của nó đến được tất cả các máy chủ DNS.

Mặc dù phương pháp này có thể cân bằng được một số lượng người dùng trên mỗi máy chủ, nhưng nó không hoàn toàn cân bằng tải máy chủ. Một số người dùng có thể yêu cầu mức tải cao hơn trong suốt một session của họ so với những người dùng khác ở trên máy chủ khác, và phương pháp này không thể bảo đảm chống lại được sự bất công bằng đó.

Phần II: Cân bằng tải dựa trên phần cứng

Thứ Hai, 24/03/2008 15:41
31 👨 2.133
0 Bình luận
Sắp xếp theo
    ❖ Kiến thức cơ bản