2주동안 소스를 가지고 분석하려고 하였지만.( 물론 2주내내 시도를 한것은 아니지만 ) 

해석이 안됩니다. 누구 같이 분석하실분 없나요? 혼자힘으론 힘들어요.

그래서 Least Connection에 대한 일반적인 알고리즘을 소개하는것으로 진행을 해야할듯 합니다. 

Least Connection에는 걍Least와 Weighted Least Connection 방식이 있는데,

 

걍Least Connection방식은 

서버에 연결되어있는 Connection 개수만을 가지고 판단을 하는것입니다. 

Connection개수를 단순 비교하여 적은곳에 꽂아주는 기능입니다. 

 

Weighted Connection방식은 

서버에 부여된 Weight값을 기반으로 Connection수의 개수와 같이 고려하여 할등을 해주는 것인데,

이 방식은 뒷단의 서버의 Capacity가 다를 경우 주로 이용할 수 있습니다. 

A라는 서버는 Max로 받을수 있는 Connection 개수가 100개이고, B라는 서버는 200개라고 한다면,

10개씩 Connection이 물려있다고 하더라도,

A는 10%로의 비중인것이고, 

B는 5%로의 비중인것입니다. 

이러한 점으로 고려하면 A와 B에 할당되는 비율은 1:2의 비율을 갖고 꽂히게 되는거겠죠.

 

nginx는 걍Least Connection방식 + RoundRobin방식으로 이루어져있는듯 합니다. 

그럼 nginx 소스에 적혀있는 주석

 /*        

 * select peer with least number of connections; if there are       

 * multiple peers with the same number of connections, select         

 * based on round-robin         */  

을 기반으로 서버 할당 되는 시나리오를 만들어보면

(( 가중치 5, 1, 1을 가지고 있는 A, B, C서버가 있다고 한다면 ))

 

Connection 개수                               Server의 Weight값

A   B   C                                              

0    0    0                                             0    0    0 

===> 맺어진 커넥션이 없는것부터 차례대로 A선택

1    0    0                                             0    0    0 

===> 맺어진 커넥션이 없는것부터 차례대로 B선택

1    1    0                                             0    0    0 

===> 맺어진 커넥션이 없는것부터 차례대로 C선택

1    1    1                                             5    1    1   

===> 동일한 커넥션수를 가지고 있으니, Roung-Robin 알고리즘으로 5, 1, 1이 되므로 A선택

2    1    1                                            (3)    2    2                                                                    

===> B, C가 동일한 커넥션수를 가지고 있으니, Roung-Robin 알고리즘으로 B, C 중 B선택

2    2    1                                            8    -4    3                                                          

===> 다시 Least Connection알고리즘으로 C선택

2    2    2                                            8    -4    3                                                          

===> 동일한 커넥션수를 가지고 있으니, Roung-Robin 알고리즘으로 A선택

3    2    2                                            5    -3    4                                                          

.........

이런식으로 흘러가지 않을까 예상됩니다. 

단지, 같은 수의 Connection수를 가지고 있을때, 

해당 서버끼리만 Round-Robin을 돌리느냐, 아님 전체를 대상으로 Round-Robin을 하는것이가?

맨날 의문점이 남네요.