2012-01-08 25 views
5

Với ba máy chủ A, B, C trong đó A có thể xử lý 50% lưu lượng, B có thể xử lý 30% lưu lượng và C có thể xử lý 20% lưu lượng truy cập. để phân phối tải hiệu quả. Tải trọng hiện tại của các máy chủ cũng là một đầu vào cho hàm.Tìm máy chủ được tải ít nhất

Tôi không thể tìm ra "công thức" mà anh ta yêu cầu. Có câu trả lời cụ thể nào cho câu hỏi này không?

+0

Tôi dường như nhớ lại câu hỏi này được hỏi vài tháng trước về SO. Có thể đã được di chuyển sang ServerFault. Tôi luôn tò mò câu trả lời là gì. – selbie

+0

Tiêu đề của câu hỏi này được gọi là "tìm máy chủ được tải ít nhất", nhưng văn bản ngụ ý đến với thuật toán cân bằng tải? Trong mọi trường hợp, nếu tải hiện tại là đầu vào cho phương trình, thì tại sao không phải là câu trả lời, "chọn máy chủ được tải ít nhất". Do tải và lưu lượng truy cập không có nghĩa là cùng một điều? – selbie

+0

Tôi giả sử bạn tính toán cho mỗi máy chủ tải hiện tại bằng cách sử dụng số lượng kết nối mạng/lưu lượng truy cập, sau đó định tuyến kết nối mới đến máy chủ có tải nhỏ nhất? –

Trả lời

5

Có một vài cách khác nhau để phân phối tải có thể áp dụng tại đây.

Trường hợp 1. nhiệm vụ ngẫu nhiên thiên vị tương ứng với mỗi máy chủ tải:

for each request 
    let x = uniformly distributed random number between 0 and 1 
    if x <= 0.5 
    goto A 
    else if x <= 0.8 
    goto B 
    else 
    goto C 

Trường hợp 2. Round-Robin thiên vị tương ứng với mỗi máy chủ tải:

let x = new list 
push A on x 5 times 
push B on x 3 times 
push C on x 2 times 

for each request 
    y = pop x 
    goto y 
    push y to back of x 

Trường hợp 3. Quên về giả năng lực và cuộc thăm dò cho tải hiện tại

let La = A, load of A 
let Lb = B, load of B 
let Lc = C, load of C 

goto argmin (La,Lb,Lc) 
2

Về cơ bản, tính toán chi phí tương đối cho dịch trên mỗi máy chủ và trong một khoảng thời gian cố định nhỏ, tổng tổng chi phí của các yêu cầu được gửi tới máy chủ được nói. Một cái gì đó như:

Cost_A = 20/50 
Cost_B = 20/30 
Cost_C = 20/20 

Running_Total_A = 0 
Running_Total_B = 0 
Running_Total_c = 0 

while true: 
    If One minute has passed: 
    Running_Total_A = 0 
    Running_Total_B = 0 
    Running_Total_c = 0 

    IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_A): 
    Running_Total_A += Cost_A 
    RouteTo(A) 
    ELSE IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_B): 
    Running_Total_B += Cost_B 
    RouteTo(B) 
    ELSE IF (Min(Running_Total_A,Running_Total_B,Running_Total_C) == Running_Total_C): 
    Running_Total_C += Cost_C 
    RouteTo(C) 
Các vấn đề liên quan