[ad_1]
Lcác ứng dụng phân tán lớn xử lý hơn hàng nghìn yêu cầu mỗi giây. Tại một thời điểm nào đó, rõ ràng là việc xử lý các yêu cầu trên một máy không còn khả thi nữa. Đó là lý do tại sao các kỹ sư phần mềm quan tâm đến chia tỷ lệ ngang, nơi toàn bộ hệ thống được tổ chức nhất quán trên nhiều máy chủ. Trong cấu hình này, mọi máy chủ chỉ xử lý một phần của tất cả các yêu cầu, dựa trên dung lượng, hiệu suất và một số yếu tố khác.
Yêu cầu giữa các máy chủ có thể được phân phối theo nhiều cách khác nhau. Trong bài viết này, chúng tôi sẽ nghiên cứu các chiến lược phổ biến nhất. Nhân tiện, không thể phác thảo chiến lược tối ưu: mỗi chiến lược có thuộc tính riêng và phải được chọn theo cấu hình hệ thống.
Bộ cân bằng tải có thể xuất hiện ở các lớp ứng dụng khác nhau. Ví dụ, hầu hết các ứng dụng net bao gồm các lớp frontend, backend và database. Do đó, một số bộ cân bằng tải có thể được sử dụng trong các phần ứng dụng khác nhau để tối ưu hóa định tuyến yêu cầu:
- giữa người dùng (máy khách) và máy chủ lối vào;
- giữa máy chủ frontend và backend;
- giữa máy chủ phụ trợ và cơ sở dữ liệu.
Mặc dù có bộ cân bằng tải trên các lớp khác nhau, các chiến lược cân bằng giống nhau vẫn có thể được áp dụng cho tất cả các lớp.
Trong một hệ thống bao gồm nhiều máy chủ, bất kỳ máy chủ nào cũng có thể bị quá tải bất cứ lúc nào, mất kết nối mạng hoặc thậm chí ngừng hoạt động. Để theo dõi trạng thái hoạt động của chúng, hãy thường xuyên kiểm tra sức khỏe phải được thực hiện bởi một dịch vụ giám sát riêng biệt. Dịch vụ này định kỳ gửi yêu cầu đến tất cả các máy và phân tích câu trả lời của chúng.
Hầu hết thời gian, hệ thống giám sát kiểm tra tốc độ phản hồi được trả về và số lượng tác vụ hoặc kết nối đang hoạt động mà máy đang xử lý. Nếu máy không trả lời trong thời hạn nhất định, thì dịch vụ giám sát có thể khởi chạy trình kích hoạt hoặc quy trình để đảm bảo máy trở lại trạng thái hoạt động bình thường sớm nhất có thể.
Bằng cách phân tích các số liệu thống kê giám sát này, bộ cân bằng tải có thể điều chỉnh thuật toán của mình để tăng tốc thời gian xử lý yêu cầu trung bình. Về cơ bản, khía cạnh này liên quan đến các thuật toán cân bằng động (được thảo luận trong phần bên dưới) liên tục dựa vào trạng thái máy đang hoạt động trong hệ thống.
Thuật toán cân bằng có thể được chia thành hai nhóm: tĩnh và động:
- Thuật toán tĩnh là những chiến lược cân bằng đơn giản chỉ phụ thuộc vào các tham số tĩnh của hệ thống được xác định trước. Các thông số thường được xem xét nhất là CPU, hạn chế bộ nhớ, thời gian chờ, giới hạn kết nối, v.v. Mặc dù đơn giản nhưng các chiến lược tĩnh không mạnh mẽ để xử lý tối ưu các tình huống khi máy thay đổi nhanh chóng đặc tính hiệu suất của chúng. Do đó, các thuật toán tĩnh phù hợp hơn nhiều với các tình huống xác định khi hệ thống nhận được tỷ lệ yêu cầu bằng nhau theo thời gian và yêu cầu xử lý lượng tài nguyên tương đối giống nhau.
- Thuật toán độngMặt khác, dựa vào trạng thái hiện tại của hệ thống. Số liệu thống kê được giám sát được tính đến và sử dụng để thường xuyên điều chỉnh việc phân bổ nhiệm vụ. Bằng cách có nhiều biến số và thông tin hơn trong thời gian thực, các thuật toán động có thể sử dụng các kỹ thuật nâng cao để tạo ra sự phân bổ nhiệm vụ đồng đều hơn trong bất kỳ trường hợp cụ thể nào. Tuy nhiên, việc kiểm tra tình trạng thường xuyên cần có thời gian xử lý và có thể ảnh hưởng đến hiệu suất chung của hệ thống.
Trong phần này, chúng ta sẽ khám phá các cơ chế cân bằng phổ biến nhất và các biến thể của chúng.
0. Ngẫu nhiên
Đối với mỗi yêu cầu mới, phương pháp tiếp cận ngẫu nhiên sẽ chọn ngẫu nhiên máy chủ sẽ xử lý yêu cầu đó.
Mặc dù đơn giản nhưng thuật toán ngẫu nhiên hoạt động tốt khi các máy chủ hệ thống chia sẻ các thông số hiệu suất tương tự nhau và không bao giờ bị quá tải. Tuy nhiên, trong nhiều ứng dụng lớn, máy chủ thường chứa rất nhiều yêu cầu. Đó là lý do tại sao các phương pháp cân bằng khác nên được xem xét.
1A. Vòng tròn
Vòng Robin có thể nói là kỹ thuật cân bằng đơn giản nhất hiện có sau phương pháp ngẫu nhiên. Mỗi yêu cầu được gửi đến máy chủ dựa trên vị trí tuyệt đối của nó trong chuỗi yêu cầu:
- Yêu cầu 1 được giao cho máy chủ 1;
- Yêu cầu 2 được giao cho máy chủ 2;
- …
- Yêu cầu ok được gán cho máy chủ ok.
Khi số lượng máy chủ đạt đến mức tối đa, thuật toán Spherical Robin sẽ bắt đầu lại từ máy chủ đầu tiên.
1B. Robin vòng có trọng số
Spherical Robin có một biến thể có trọng số, trong đó trọng số thường dựa trên khả năng hiệu suất (như CPU và các đặc điểm hệ thống khác) được gán cho mọi máy chủ. Sau đó, mọi máy chủ nhận được tỷ lệ yêu cầu tương ứng với trọng số của nó, khi so sánh với các máy chủ khác.
Cách tiếp cận này đảm bảo rằng các yêu cầu được phân bổ đồng đều theo khả năng xử lý riêng của từng máy chủ trong hệ thống.
1C. Robin tròn dính
Trong phiên bản Sticky của Spherical Robin, yêu cầu đầu tiên của một máy khách cụ thể được gửi đến một máy chủ, theo các quy tắc Spherical Robin thông thường. Tuy nhiên, nếu máy khách thực hiện một yêu cầu khác trong một khoảng thời gian nhất định hoặc trong thời gian tồn tại của phiên, thì yêu cầu sẽ được chuyển đến cùng một máy chủ như trước.
Điều này đảm bảo rằng tất cả các yêu cầu đến từ bất kỳ máy khách nào đều được xử lý nhất quán bởi cùng một máy chủ. Ưu điểm của phương pháp này là tất cả thông tin liên quan đến các yêu cầu của cùng một máy khách chỉ được lưu trữ trên một máy chủ duy nhất. Hãy tưởng tượng một yêu cầu mới đang đến yêu cầu thông tin từ các yêu cầu trước đó của một máy khách cụ thể. Với Sticky Spherical Robin, dữ liệu cần thiết có thể được truy cập nhanh chóng chỉ từ một máy chủ, nhanh hơn nhiều nếu cùng một dữ liệu được lấy từ nhiều máy chủ.
2A. Ít kết nối nhất
Ít kết nối nhất là phương pháp động trong đó yêu cầu hiện tại được gửi đến máy chủ có ít kết nối hoạt động nhất hoặc yêu cầu hiện đang được xử lý.
2B. Các kết nối có trọng số ít nhất
Phiên bản có trọng số của thuật toán kết nối ít nhất hoạt động theo cùng cách như phiên bản gốc, ngoại trừ thực tế là mỗi máy chủ được liên kết với một trọng số. Để quyết định máy chủ nào sẽ xử lý yêu cầu hiện tại, số lượng kết nối đang hoạt động của mỗi máy chủ được chia cho trọng số của nó và máy chủ có giá trị kết quả thấp nhất sẽ xử lý các yêu cầu.
3. Thời gian phản hồi ngắn nhất
Thay vì xem xét máy chủ có ít kết nối hoạt động nhất, thuật toán cân bằng này sẽ chọn máy chủ có thời gian phản hồi trung bình trong một khoảng thời gian nhất định trong quá khứ là thấp nhất.
Đôi khi cách tiếp cận này được sử dụng kết hợp với số lượng kết nối đang hoạt động ít nhất:
- Nếu có một máy chủ duy nhất có ít kết nối nhất, thì nó sẽ xử lý yêu cầu hiện tại;
- Nếu có nhiều máy chủ có cùng số lượng kết nối thấp nhất, thì máy chủ có thời gian phản hồi thấp nhất sẽ được chọn để xử lý yêu cầu.
4A. Băm IP
Đôi khi, bộ cân bằng tải dựa trên các thuộc tính khác nhau của máy khách để đảm bảo rằng tất cả các yêu cầu và dữ liệu trước đó chỉ được lưu trữ tại một máy chủ. Điều này địa phương khía cạnh cho phép truy cập dữ liệu người dùng cục bộ trong hệ thống nhanh hơn nhiều mà không cần yêu cầu bổ sung đến các máy chủ khác để lấy dữ liệu.
Một trong những cách để đạt được điều này là kết hợp địa chỉ IP của máy khách vào hàm băm, liên kết một địa chỉ IP nhất định với một trong các máy chủ khả dụng.
Lý tưởng nhất là hàm băm được chọn phải phân phối đồng đều tất cả các yêu cầu đến giữa tất cả các máy chủ.
Trên thực tế, khía cạnh cục bộ của việc băm IP phối hợp tốt với băm nhất quáncái mà đảm bảo rằng dữ liệu của người dùng được lưu trữ linh hoạt ở một nơi vào bất kỳ lúc nào, ngay cả trong trường hợp máy chủ tắt.
4B. Băm URL
Băm URL hoạt động tương tự như băm IP, ngoại trừ URL của yêu cầu được băm thay vì địa chỉ IP.
Phương pháp này hữu ích khi chúng ta muốn lưu trữ thông tin trong một danh mục hoặc miền cụ thể trên một máy chủ, không phụ thuộc vào việc máy khách nào đưa ra yêu cầu. Ví dụ: nếu một hệ thống thường xuyên tổng hợp thông tin về tất cả các khoản thanh toán nhận được từ người dùng thì sẽ hiệu quả hơn nếu xác định một tập hợp tất cả các yêu cầu thanh toán có thể có và luôn băm chúng vào một máy chủ.
5. Kết hợp
Bằng cách tận dụng thông tin về tất cả các phương pháp trước đó, có thể kết hợp chúng để rút ra các phương pháp tiếp cận mới phù hợp với yêu cầu riêng của từng hệ thống.
Ví dụ, một bỏ phiếu chiến lược có thể được thực hiện khi các quyết định của N chiến lược cân bằng độc lập được tổng hợp. Quyết định xảy ra thường xuyên nhất được chọn làm câu trả lời cuối cùng để xác định máy chủ nào sẽ xử lý yêu cầu hiện tại.
Điều quan trọng là không nên làm mọi thứ trở nên quá phức tạp, vì các thiết kế chiến lược phức tạp hơn đòi hỏi thêm nhiều tài nguyên tính toán.
Cân bằng tải là một chủ đề quan trọng trong thiết kế hệ thống, đặc biệt đối với các ứng dụng có tải cao. Trong bài viết này, chúng tôi đã khám phá nhiều thuật toán cân bằng tĩnh và động. Các thuật toán này có độ phức tạp khác nhau và đưa ra sự cân bằng giữa chất lượng cân bằng và tài nguyên tính toán cần thiết để đưa ra quyết định tối ưu.
Cuối cùng, không có thuật toán cân bằng nào có thể là tốt nhất cho mọi tình huống. Lựa chọn phù hợp phụ thuộc vào nhiều yếu tố như cài đặt cấu hình hệ thống, yêu cầu và đặc điểm của các yêu cầu đến.
Tất cả các hình ảnh trừ khi có ghi chú khác là của tác giả.
[ad_2]
Source link