Nginx의 Weight 중심의 Load Balancing이 서버를 할당하는 알고리즘에 대해

드뎌! 알아냈습니다. 

Upstream 서버 3대가 있다고 가정해봅시다. 

A서버에 weight=5

B서버는 Default

C서버는 Default

(Default는 weight가 1입니다. )

weight는 5, 1, 1이기 때문에 Total weight가 7(5 + 1 + 1)가 됩니다. 

라고 설정 했을때, 

       A    B    C

       0    0    0 

1.    5    1    1     

      ( 각각의 서버는 설정된 Weight값을 더합니다. )

      ( weight값이 제일 큰 수의 서버가 선택됩니다. "A"선택 )

2.   (3)   2    2 

      ( 선택된 A서버를 제외한 나머지 서버(B, C)에 각각의 weight값( 1, 1)을 더합니다.  )

      ( 선택된 A서버의 값은 TotalWeight(7)에서 나머지 서버( 2 + 2) 값을 뺀값으로 정해집니다. )

      ( A서버가 3이 됨으로서, 아직은 값이 제일 크기 때문에 A서버가 또 선택됩니다. )

3.   (1)   3     3

      ( 선택된 A서버를 제외한 나머지 서버(B, C)에 각각의 weight값( 1, 1)을 더합니다.  )

      ( 선택된 A서버의 값은 TotalWeight(7)에서 나머지 서버( 3 + 3) 값을 뺀값으로 정해집니다. )

      ( B와 C의 값은 같지만, B가 앞에 있으므로 B서버가 선택됩니다. )

4.    6   (-3)    4

      ( 선택된 B서버를 제외한 나머지 서버(A, C)에 각각의 weight값( 5, 1)을 더합니다.  )

      ( 선택된 B서버의 값은 TotalWeight(7)에서 나머지 서버( 6 + 4) 값을 뺀값으로 정해집니다. )

      ( A서버가 6이 됨으로서, A서버가 선택됩니다. )

5.    (4)   -2     5

      ( C서버 선택됨 )

6.    9     -1     -1

      ( A서버 선택됨 )

7.   7      0      0

      ( A서버 선택됨 )

-----------------------------------

      여기서부터 1번부터 다시 반복되는 알고리즘 입니다.

     weight 알고리즘이란것이 5, 1, 1로 정해졌을때 7번의 선택중에 A서버는 5번이 선택되어져야만 한다는 것으로 이해한다면, 

    선택되어진 회수를 보면 A가 5번, B가 1번, C가 1번 으로 정확하게 선택되어지네요.

    언놈이 알고리즘 만들었는지....간단한거 같으면서도 머리 좋다는 생각이 드는군요~