일반적으로 부하분산기는 IP 주소와 포트를 기반으로 부하분산을 하는 Layer 4 방식과 HTTP의 URL, Cookie 등의 어플리케이션 내의 식별자를 주소로 부하분산을 하는 Layer 7방식이 존재한다. 부하분산기들은 어느 정보를 주소로 활용하느냐에 상관없이 모두 동일한 부하분산 알고리즘을 사용하는데 대표적인 기술로는 Round-Robin, Least Connection, 응답시간에 기반한 부하분산기법, 서버의 상태나 부하 정보를 이용한 부하분산 기법들을 사용한다.
도 1은 종래의 부하 분산기가 사용되는 일반적인 상황을 나타내는 블록도이다. 일반적인 부하분산 기술들은 대부분 사용자(101) 혹은 사용자(101)의 요청과 서버1,2,3,(104,105,106)간의 연결을 서버에 적절하게 분산하는 기법으로서, 이러한 연결들을 각각 관리하기 위해서 사용하는 최소 단위로 세션(session) 혹은 커넥션(connection)이라는 단위를 사용한다. 이러한 알고리즘들은 부하분산기내에 세션 당 일정크기의 메모리를 할당하여 사용하므로 사용자(101) 또는 사용자(101)의 요청이 증가하는 경우 세션수가 늘어나 부하분산기의 메모리 사용량이 비례적으로 증가하는 문제를 가지며 수많은 세션을 고속으로 찾기 위하여 해싱 기법을 도입하여 세션을 찾는 방법을 사용한다.
그러나 이러한 세션기반 부하분산 방식은 유한한 해싱 테이블 내에서 무한한 세션을 찾는 방식으로 많은 사용자(101)로 인하여 세션의 수가 늘어날 경우 이에 비례하여 검색시간이 늘어나 부하분산기 처리속도에 영향을 주며, 세션의 한계치가 유한한 메모리의 크기에 비례한다는 단점을 가진다.
또한, 부하분산기(103)들은 어플리케이션 서버1,2,3(104,105,106)들 간에 사용자(101)의 접속이나 식별정보를 공유할 수 없는 경우 서버1,2,3(104,105,106)들 간의 부하분산과 함께 사용자(101)와 서버1,2,3(104,105,106)간의 연결보장성(stickiness)을 유지해야한다. 이 경우에는 주로 사용자(101) 측에서 서버에 접속을 시도하거나 정보를 요청할 때 자신의 식별 정보를 첨부하여 보내야 하며, 부하분산기(103)는 상기 식별정보를 일정시간 동안 보관하여야 하며, 일정 시간 내에 상기 식별정보를 가진 요청이 들어오는 경우 이를 동일한 서버로 전달하여야 한다. 만일 이러한 상황에서 연결성을 보장하지 못하는 경우에는 정상적으로 어플리케이션을 사용하지 못하는 문제가 발생한다. 이것이 세션기반 부하분산 알고리즘이 주로 사용되는 이유 중의 하나이다.
세션기반 부하분산 알고리즘에 속하지 않는 해싱 알고리즘은 부하분산 대상 서버 수에 기반한 해싱함수를 사용하며 세션을 기록하지 않고 단지 해싱함수에서 나오는 값을 부하분산 결과로 판단하고 해당 서버로 사용자(101)의 요청을 전달한다. 또한, 상기 방식에 있어서 사용자(101)와 사용자(101)의 요청을 출발지 IP주소, 출발지 IP주소와 포트(port), HTTP의 Cookie, URL, URI 등의 정보를 해싱함수를 통하여 해싱값으로 변환하여 서버를 선택한다.
해싱 알고리즘을 이용하는 종래 서버 부하 분산방식을 예를 들어 들어 설명하면 다음과 같다.
서버 그룹내 서버 대수가 6대, 서버 0, 서버1, .. 서버 5가 있다고 가정하자. 사용자의 요청 패킷내 출발지 IP 주소값에 모듈로 6을 적용하여 그 결과값 (0~5)으로 해당 서버를 결정한다.
해싱기반 부하분산 알고리즘은 세션기반 부하분산 알고리즘과 달리 해싱함수를 이용하기 때문에 서버의 부하정보를 전혀 고려하지 않으며 사용자(101) 및 사용자(101)의 요청 각각에 대해서 세션을 할당하지 않기 때문에 외부의 사용자(101)나 사용자(101)의 요청수가 늘어나도 부하분산기내 메모리의 증가가 없어 무한대의 사용자(101) 또는 사용자(101)의 요청을 처리할 수 있는 장점이 있다.
또한, 사용자(101) 또는 사용자(101)의 요청이 특정 서버로만 전달되는 점에 있어서 연결보장성(stickiness)과 서버의 캐싱 효과가 증가 하는 효과를 얻을 수 있다.
하지만 해싱값으로 해당 서버(104)(105)(106)가 결정되기 때문에 부하분산이 정교하게 되지 않으며, 그리고 해싱함수의 입력 값을 출발지 IP 주소만을 사용하는 경우 프락시나 SNAT(Source Network Address Translation)을 통해 들어온 사용자(101)들의 요청은 하나의 사용자(101)로 보여 특정 서버로 부하가 집중되는 현상을 보인다. 또한 서버의 추가/삭제/장애 현상이 발생하였을 때, 서버수에 기반한 해싱함수를 사용하는 알고리즘은 사용가능한 서버수 변경으로 인해 해싱함수가 변경되어 사용자의 요청과 서버와의 연결관계가 바뀌게 되어 결과적으로 사용자(101) 또는 사용자(101)와 서버간의 연결보장성(stickiness)을 보장하지 못하는 문제점이 있으며 이는 서버 어플리케이션의 특성에 따라서 접속이 끊기거나 어플리케이션이 오동작하는 문제점을 가질 수 있다.
해싱기반 알고리즘을 사용하는 경우 서버그룹중 임의의 서버가 과부하 상태가 되어 그 서버가 담당하던 세션중의 일부를 다른 서버로 재배치해야 하는 경우에도 위에서 설명하는 사용자(101) 또는 사용자(101)의 요청과 서버간의 연결보장성(stickiness)을 보장하지 못하는 문제점이 있다.
기존 해싱기반 부하분산 알고리즘에서 서버그룹내 사용가능한 서버 대수가 변경되면 해싱함수가 변경되어 사용자와 서버간의 연결보장성(stickness)이 깨진다. 이러한 서버 대수가 변경되는 상황들은 크게 3가지로 나눌 수 있다. 임의의 서버에서 장애가 발생한 상황, 서버 그룹내 서버 평균부하가 너무 낮거나 유지서버 목적으로 특정서버를 down하고자 하는 경우에 서버 삭제하는 상황, 서버그룹내 서버 평균 부하가 너무 높아 서버를 추가하는 상황이다. 서버 대수는 변경은 없으나 연결보장성(stickness)가 깨지는 또 다른 상황은 서버 그룹내 특정 서버의 부하가 너무 높아 그 서버가 담당하던 사용자요청들을 다른 서버들에게 재분배하는 상황이 발생하는 경우 발생할 수 있다. 위 상황 중들에서 임의의 서버에서 장애가 발생하는 경우에는 세션기반 부하분산 알고리즘을 사용하는 경우에도 연결보장성은 유지될 수 없다.
해싱 기반 부하 분산 기법에 관한 내용은 이 기술 분야에서 알려진 기술이다. 예를 들어, 2007년 4월 25일에 등록된 특허 제0713625호의 부하 분산 시스템의 과부하 제어 방법 및 그 장치에 관한 특허 명세서에도 기재되어 있으므로 여기서는 해싱 기반 부하 분산 기법에 대한 구체적인 설명은 생략한다.
본 발명은 전술한 종래 기술의 문제점을 해결하기 위해서 안출된 것으로서, 본 발명의 목적은 해싱 알고리즘의 장점인 낮은 메모리 사용률과 무한대의 세션 처리 능력 그리고 고속의 처리속도를 그대로 유지하면서 세션 기반의 알고리즘들의 장점인 부하분산의 정교함과 서버의 추가/삭제/과부하시 해싱함수의 변화로 인하여 사용자와 서버간의 연결성을 보장하며 캐싱 효과를 향상시키는 동적 해싱 기반의 부하 분산 시스템을 제공하는데 있다.
본 발명의 다른 목적은 단순한 부하분산 알고리즘을 통하여 효율적인 부하분 산기를 제공하며 이를 통해 소형 시스템에도 고성능의 기능을 제공하는 동적 해싱 기반의 부하 분산 시스템을 제공하는데 있다.
본 발명의 또 다른 목적은 해싱 알고리즘의 장점인 낮은 메모리 사용률과 무한대의 세션 처리 능력 그리고 고속의 처리속도를 그대로 유지하면서 세션 기반의 알고리즘들의 장점인 부하분산의 정교함과 서버의 추가/삭제/과부하시 해싱함수의 변화로 인하여 사용자와 서버간의 연결성을 보장하며 캐싱 효과를 향상시키는 동적 해싱 기반의 부하 분산 방법을 제공하는데 있다.
본 발명의 또 다른 목적은 단순한 부하분산 알고리즘을 통하여 효율적인 부하분산기를 제공하며 이를 통해 소형 시스템에도 고성능의 기능을 제공하는 동적 해싱 기반의 부하 분산 방법을 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 동적 해싱 기반의 부하 분산 시스템은 사용자의 요청을 서버그룹들에 분산하여 전달하는 해싱기반의 부하분산기에 있어서, 사용자의 요청에서 임의의 정보를 해싱값으로 계산하는 해싱값 추출기; 계산된 해싱값을 이용하여 처리가능한 서버그룹중 어느 하나의 서버를 선택하게 하며, 서버의 추가/삭제/장애/과부하시 상기 선택된 어느 하나의 서버를 변경하기 위해 해싱값을 이동하는 해싱테이블; 서버그룹의 어느 하나의 서버의 추가/삭제 또는 어느 하나의 서버 과부하시 사용자의 요청과 서버그룹의 서버들 간의 연결성을 보장하면서 해싱값과 서버와의 연결관계를 동적으로 바꾸기 위해 해싱값 이동시간, 세션기록시간 그리고 해싱값에 대한 과부하 상태 정보와 같은 해싱값이 이동할 수 있는 상황 정보를 포함하는 해싱값이동정보테이블; 서버의 추가/삭제 또는 과부하시 해싱값 이동을 원활하게 하기 위하여 일정시간 동안 사용자 요청에 대한 세션 정보를 기록할 수 있는 세션테이블; 상기 테이블들의 정보를 이용하거나 또는 테이블들의 정보를 갱신하면서 사용자 요청을 전달할 대상서버를 서버그룹 중에서 하나를 선택하면서, 주기적으로 서버들의 상태를 확인하여 장애가 발생하면 그 선택된 서버를 후보에서 제외하는 기능을 포함하는 부하분산제어 및 장애감시부로 구성되어 있는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산시스템은 상기 해싱값 추출기가 해싱값 계산을 위해 사용자 요청 정보내 임의의 일부 정보가 사용될 수 있으며; 이러한 정보는 IP 주소, TCP/UDP 포트, HTTP에 포함된 Cookie, URL, 또는 URI 인 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 상기 부하분산제어 및 장애감시부는 부하분산 서버그룹내 하나의 임의 서버에 장애가 발생한 경우에 상기 서버가 처리했던 해싱값이 나머지 부하분산대상 서버에게 고르게 분배하기 위해, 각 해싱값에 대한 부하정보 평균값을 이용하여 해싱값을 고르게 분산하거나 또는 해싱값의 개수를 고르게 분배하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 상기 부하분산제어 및 장애감시부가 서버 그룹내 하나의 임의 서버가 삭제된 경우에 상기 서버가 처리했던 해싱값이 나머지 부하분산대상 서버에게 고르게 분배하기 위해, 각 해싱값에 대한 부하정보 평균값을 이용하여 해싱값을 고르게 분산하거나 또는 해싱값의 개수를 고르게 분배하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 상기 부하분산제어 및 장애감시부가 부하분산 서버그룹내 새로운 서버4가 추가되는 경우에 서버들이 처리했던 해싱값이 새로 추가된 서버에게 고르게 분배하기 위해, 각 해싱값에 대한 부하정보 평균값을 이용하여 해싱값을 고르게 분산하거나 또는 해싱값의 개수를 고르게 분배하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 상기 부하분산제어 및 장애감시부가 서버그룹내 특정 서버가 계속 처리할 수 있으나 부하가 해싱값 이동정보테이블에 지정된 1차 과부하 임계치를 넘었을 때, 상기 특정서버의 해싱값의 부하정보를 이용하여, 이들 중 부하가 작은 해싱값들을 상기 서버보다 부하가 작은 서버들로 분배하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 또한 상기 부하분산제어 및 장애감시부가 부하분산 서버그룹내 특정 서버가 계속 처리 할 수 없는 상태가 되는, 해싱값 이동정보테이블에 지정된 2차 과부하 임계치를 넘었을 때, 상기 특정서버에서 과부하를 유발하는 해싱값을 찾아내어, 해당 해싱값으로 들어오는 사용자 요청을 모든 또는 부하가 작은 서버들에게 순차 분배하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 또한 해싱테이블에서 서버그룹의 서버 대수보다 더 많은 해싱값을 가지게 하며, 서버그룹에서 어느 하나의 서버의 장애/삭제/추가로 인하여 동작하는 서버그룹의 서버 대수가 변경되거나 어느 하나의 서버에서 과부하 발생시 타 서버로의 부하 재분배를 하고자 하는 경우를 포함한 서버 재배정 상황에서 해싱값 크기는 변경하지 않고 해싱테이블내 해싱값들이 서버그룹 중의 배정된 어느 하나의 서버들을 동적으로 변경함으로써, 해싱값 이동을 통하여 서버 재배정하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산 시스템은 또한 해싱테이블에서 서버그룹의 서버 대수보다 더 많은 해싱값을 가지게 하며, 서버그룹에서 어느 하나의 서버 삭제/추가로 인하여 동작하는 서버 대수가 변경되거나 어느 하나의 서버에서 과부하 발생시 타 서버로의 부하 재분배를 하고자 하는 경우를 포함한 서버 재배정 상황에서 모든 해싱값을 임의의 지정된 시간 없이 타 서버로 이동시키지 않고, 사용자의 요청과 서버와의 기존 연결성이 끊어지지 않도록 임의의 지정된 시간을 기준으로 이동하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산시스템은 또한 해싱테이블에서 서버그룹의 대수보다 더 많은 해싱값을 가지게 하며, 서버그룹에서 어느 하나의 서버 삭제/추가로 인하여 동작하는 서버들의 대수가 변경되거나 어느 하나의 서버에서 과부하 발생시 타 서버로의 부하 재분배를 하고자 하는 경우를 포함한 서버 재배정 상황에서, 서버 재배정 상황이 발생한 시점부터 사용자의 요청과 서버와의 연결성이 끊이지 않게 해싱값 이동들이 끝날 때 까지 사용자의 요청과 서버와의 연결 정보 저장 및 참조를 위하여 세션테이블을 운영하는 것을 특징으로 한다.
본 발명의 동적 해싱기반의 부하분산방법은 또한 해싱테이블에서 서버그룹의 서버 대수보다 더 많은 해싱값을 가지게 하며, 서버그룹에서 어느 하나의 서버 삭제/추가로 인하여 동작하는 서버의 대수가 변경되거나 어느 하나의 서버에서 과부하 발생시 타 서버로의 부하 재분배를 하고자 하는 경우를 포함한 서버 재배정 상황에서, 사용자의 연결성을 보장하기 위하여 타 서버로 이동이 결정된 해싱값에 대하여 지정된 시간동안 상기 해싱값으로 들어온 사용자의 요청에 대한 세션정보를 생성하며; 상기 생성된 세션 정보는 일정시간동안 유지하며; 일정 시간 내에 기존 세션에 대한 사용자의 요청이 들어오면 지정된 시간만큼 세션을 더 유지시키며; 상기 유지 되고 있는 세션에 대해서는 서버와의 접속을 지정된 시간동안 유지하며; 기존 세션이 서버와의 접속을 유지하는 상기 지정된 시간 내에 세션에 등록되지 않은 사용자의 요청에 대해서는 사용자의 요청에서 임의의 정보를 해싱값으로 계산하고, 계산된 해싱값을 이용하여 처리가능한 서버를 선택하는 해싱방법에 의하여 사용자의 요청을 전달하며; 세션이 기록된 사용자의 요청은 일정 시간이 지난 이후에 사용자의 요청에서 임의의 정보를 해싱값으로 계산하고, 계산된 해싱값을 이용하여 처리가능한 서버를 선택하는 해싱방법에 의하여 새로운 서버 또는 다른 서버에 전달하는 것을 특징으로 한다.
삭제
본 발명의 동적 해싱 기반의 부하 분산 시스템 및 그 방법은 서버 추가/삭제/장애/과부하 상황에서 사용자의 요청이 서버들 사이로 불균등하게 분포되는 기존 방법(부하의 불균등)과는 달리 상황에 무관하게 사용자의 요청을 서버들 사이로 균등하게 분포시킨다(부하의 균등). 또한 동적 해싱 기반의 부하 분산 시스템 및 그 방법은 서버 추가/삭제/장애/과부하 상황에서 사용자의 요청과 서버간에 지속적인 연결 관계가 성립되지 못하는 기존 방법과 달리 상황에 무관하게 사용자의 요청과 서버간에 지속적인 연결 관계가 성립한다.
이하 첨부도면을 참조하여 본 발명을 보다 상세히 설명하면 다음과 같다.
도 1은 종래의 부하분산기(103)가 사용되는 일반적인 상황을 나타낸다. 사용자(101)는 인터넷 망(102)을 통해 웹 서비스 등을 요청하면 서버1(104), 서버2(105), 서버3(106)들 앞단에 설치된 부하분산기(103)가 해당 요청을 가장 빠르게 처리할 수 있는 서버로 사용자(101)의 요청을 보낸다. 이때, 부하 분산 정책에서 해싱을 사용하게 되면 동일한 사용자(101)의 요청을 동일한 서버로 1:1로 매핑할 수 있다. 예를 들어, 사용자(101) 요청 1을 서버 1(104)이 처리하였다면 이후의 사용자(101) 요청 1이 다시 요청되면 이를 처리하던 서버 1(104)이 다시 처리하게 된다.
도2는 종래의 해싱 기반 부하분산기(200)의 구조를 나타내는 블록도이다. 종래의 부하분산기(200)는 해싱값 추출기(220), 해싱테이블(230), 부하분산제어 및 장애감시부(210)로 구성되어 있다.
해싱값 추출기(220)는 사용자의 요청에서 임의의 정보를 해싱값으로 계산하는 기능을 담당하고, 해싱테이블(230)은 계산된 해싱값을 이용하여 처리 가능한 서버를 선택할 수 있도록 하는 기능을 담당한다. 부하분산제어 및 장애감시부(210)는 해싱테이블 정보를 이용하여 사용자 요청을 전달할 대상 서버를 여러 서버중에서 하나를 선택하면서, 주기적으로 서버들의 상태를 확인하여 장애가 발생하면 해당 서버를 후보에서 제외하는 기능을 담당한다.
도 3은 종래의 해싱 기반 부하분산기(320)가 사용자의 요청(310)을 처리하는 과정을 나타내는 블록도이다. 부하분산기(320)는 사용자 요청(310) 정보에서 해싱값추출기(321)를 통해 1이라는 해싱값을 추출하고, 해싱테이블(322)에서 해싱값 1에 할당된 서버(330) 2를 찾아 사용자의 요청을 서버(330) 2로 보내는 역할을 수행한다.
도 4는 본 발명의 동적 해싱 기반의 부하분산기(400)의 구조를 나타내는 블 록도이다.
본 발명에 따른 동적 해싱 기반의 부하분산기(400)는 해싱값 추출기(420), 해싱테이블(430), 해싱값 이동정보테이블(440), 세션테이블(450), 부하분산제어 및 장애감시부(410)로 구성되어있다.
해싱값 추출기(420)는 사용자의 요청에서 임의의 정보를 해싱값으로 계산하는 기능을 담당하고, 해싱테이블(430)은 계산된 해싱값을 이용하여 처리 가능한 서버를 선택할 수 있도록 하는 기능을 담당한다.
해싱값 이동정보테이블(440)은 서버 추가/삭제 또는 특정 서버의 과부하시 사용자의 요청과 서버간의 연결성을 보장하면서 해싱값과 서버와의 연결관계를 동적으로 바꾸기 위해 해싱값 이동시간, 세션기록시간 그리고 해싱값에 대한 과부하 상태 정보 등 해싱값이 이동할 수 있는 상황 정보를 포함한다.
세션테이블(450)은 서버의 추가/삭제 또는 과부하시 해싱값 이동을 원활하게 하기 위하여 일정 시간 동안 사용자 요청에 대한 세션 정보를 기록하는 역할을 수행한다. 부하분산제어 및 장애감시부(410)는 상기테이블 정보를 이용하거나 또는 테이블 정보를 갱신하면서 사용자 요청을 전달할 대상 서버를 여러 서버 중에서 하나를 선택하면서, 주기적으로 서버들의 상태를 확인하여 장애가 발생하면 해당 서버를 후보에서 제외하는 기능을 담당한다.
도 5는 본 발명의 동적 해싱 기반의 부하분산기가 사용자의 요청(510)을 처리하는 과정을 나타내는 블록도이다.
서버 삭제/장애/추가/과부하와 같은 상황이 발생하지 않는 일반적인 상황에서 본 발명인 동적 해싱 기반의 부하분산기(400)가 사용자의 요청(510)을 처리하는 과정은 종래의 부하분산기(320)가 사용자의 요청(310)을 처리하는 과정과 동일하다. 부하분산기(400)는 사용자 요청(510) 정보에서 해싱값추출기(420)를 통해 5라는 해싱값을 추출하고, 해싱테이블(430)에서 해싱값 5에 할당된 서버그룹(530)의 서버2를 찾아 사용자의 요청(510)을 서버 2로 보내는 역할을 수행한다.
그러나 서버그룹(530)의 서버 삭제/장애/추가/과부하와 같은 특수한 상황에서는 본 발명의 실시 예를 나타내는 도 7, 8, 9, 10을 따른다.
도 6a 및 도 6b는 본 발명의 동적 해싱 기반의 부하분산기 내 해싱값 이동정보테이블(440)과 세션테이블(450)의 구조를 나타내는 블록도이다.
해싱값 이동정보테이블(440)은 이동시간, 세션기록시간, 과부하 1단계의 임계값, 과부하 2단계의 임계값으로 구성된다. 이동시간은 스케줄링에 의해 실제 해싱값이 이동하는데 걸리는 시간을 나타내고, 세션기록시간은 이동할 해싱값의 세션을 기록하는 시간을 나타낸다. 서버의 상황에 따라 이동이 결정된 해싱값은 스케줄링에 의해 이동시간 60초 안에 다른 서버로 이동이 수행되어야 한다. 세션기록시간은 해당 해싱값을 이동해도 되는지를 판단하는 기준으로 사용된다. 부하분산기는 세션기록시간을 기반으로 60초 동안 더 이상의 요청이 없는 세션일 경우 세션을 더 이상 유지할 필요가없다고 판단하여 해당 해싱값만을 이동한다. 과부하의 임계값은 서버의 부하와 비교되는 값으로 서버의 부하가 과부하 1단계의 임계값 80과 과부하 2단계의 임계값 100 사이라면 부하분산기는 서버가 과부하 1단계 상황이라고 판단한다. 또한 서버의 부하가 과부하 2단계의 임계값 100과 같다면 부하분산기는 서버 가 과부하 2단계 상황이라고 판단한다. 세션테이블(450)은 출발지 주소 및 포트, 목적지 주소 및 포트, 실제 서버 주소 및 포트, 해싱값으로 구성된다.
일반적인 해싱 기반의 부하 분산 방법은 서버 삭제/장애 및 추가의 경우 사용가능한 서버의 수를 이용하여 해싱값을 재계산하기 때문에 이전의 사용자와 서버의 연결 상태가 보전되지 않고 재계산된 형태로 연결이 변경된다. 이러한 경우, 웹 어플리케이션의 경우 사용자의 접속이 종료되고, 캐싱 서버의 경우 히트율이 급격이 저하된다. 도 7과 도 8은 이러한 문제를 해결하기 위해 서버의 삭제/장애 및 추가의 경우에 해싱값의 재계산을 최소화하는 방법에 대한 것이다.
도 7은 본 발명의 동적 해싱 기반의 부하분산기(400)를 이용하여 서버의 삭제/장애 시에 이를 처리하는 동작 과정을 나타내는 블록도이다. 예를 들어, 서버 3이 삭제 혹은 장애가 발생하면 서버 3이 처리하던 해싱값이 서버1과 2로 옮겨진다. 이 예에서는 서버 3이 처리하던 해싱 값 6과 7이 서버 1로 옮겨지며(화살표 721, 722), 서버 3이 처리하던 해싱 값 8이 서버 2로 옮겨진다(화살표 723). 서버 장애시에는 사용자 요청과 서버와의 연결성보장이 깨질 수밖에 없으므로 위의 해싱값 이동이 바로 일어나게 된다. 반면에 서버 삭제의 경우 사용자 요청과 서버와의 연결성보장을 위해서 해싱값 이동을 점진적으로 수행할 수 있다. 서버 삭제가 필요한 상황이 되면 일정시간동안 들어오는 세션에 대한 정보들을 세션테이블에 기록하게 된다. 그 후에 사용자 요청이 들어오게 되면 일단 세션테이블을 검색하여 기존 세션인지 여부를 판단한다.
만일 신규 세션이라면 위에서 정한 재배정 원칙에 따라 예를 들어 해싱값이 8이면 서버 2로 배정한다. 만일 기존 세션이라면 일정시간안에 들어온 요청여부를 판단한다. 만일 일정 시간동안에 다시 들어온 사용자 요청이라면 기존 서버 3에 배정하며(이는 도 11 F123 단계에 의하여 결정된다. 서버 3이라는 정보는 해당 세션에 등록되어 있는데 도 6b의 세션테이블(450)내 해당 세션에서 실제서버 주소/port 필드에 서버 3에 관한 정보가 들어 있다고 할 수 있다),
일정 시간후에 들어온 요청이라면 세션을 계속 유지하지 않아도 된다고 판단하여 위에서 정한 재배정 원칙에 따라 예를 들어 해싱값이 8이면 서버 2로 배정한다. 기존 서버 3에서 처리되는 요청들이 다 끝나서 더 이상 서버 3이 담당하는 일이 없게 될 경우 서버 3을 삭제하게 된다. 서버 삭제시 해싱값을 이동하는 과정에 있어서 해싱값 이동정보테이블(440)에 있는 해싱 이동시간, 세션기록 시간 정보들을 이용하여 점진적으로 해싱값을 이동한다. 세션테이블은 해싱값 이동을 위해 한시적으로만 운영한다.
도 8은 본 발명의 동적 해싱 기반의 부하분산기(400)를 이용하여 서버의 추가 시에 이를 처리하는 동작 과정을 나타내는 블록도이다. 예를 들어, 서버 4가 새로이 추가되면 기존 서버들이 가지던 해싱값들이 새로운 서버 4로 옮겨진다. 예에서는 서버 2가 처리하던 해싱값 5가 서버 4(832)로 옮겨지며(화살표 821), 서버 3이 처리하던 해싱값 8이 서버 4(832)로 옮겨진다(화살표 822). 여기에서 해싱값 이동도 사용자 요청과 서버와의 연결보장성을 보장하기 위해 도 7의 서버 삭제과정에서 설명한, 해싱값 이동정보테이블(440) 정보를 이용한 점진적인 이동방식과 동일한 방법으로 처리된다.
일반적인 해싱 기반의 부하 분산 방법은 사용자의 요청이 하나 혹은 일부의 서버로 과부하됨으로써 전체적인 서버들의 성능이 요청이 과부하되는 서버에 의존하는 경향이 존재한다. 도 9와 도 10은 이러한 문제를 해결하기 위해 요청 과부하가 발생하는 상황에서 사용자의 요청을 서버들이 균일하게 처리하는 방법에 관한 것이다.
도 9는 본 발명인 동적 해싱 기반의 부하분산기(400)를 이용하여 서버가 계속 처리할 수 는 있으나 과부하 상태인 1차 과부하가 걸렸을 때 이를 처리하는 동작 과정을 나타내는 블록도이다. 예를 들어, 사용자의 요청(921)이 들어와 서버 2(941)에 1차 과부하가 걸린 경우 서버 2가 처리하고 있는 해싱 값 중 다른 서버로 옮기는 방법으로 동작한다. 1차 과부하의 임계값은 도 6의 해싱값 이동정보테이블(440)에 명시되어 있다. 이 예에서는 서버 2(941)가 처리하고 있는 해싱 값 3이 서버 1로 이동하고(화살표 931), 해싱 값 5가 서버 3으로 이동하여(화살표 932) 사용자의 요청들을 서버들에게 균등하게 분산(해싱값의 이동 후 모든 서버들이 100인 부하를 가짐)됨을 볼 수 있다. 여기에서 해싱값 이동도 사용자 요청과 서버와의 연결보장성을 보장하기 위해서 도 7의 서버 삭제과정에서 설명한, 해싱값 이동정보테이블(440) 정보를 이용한 점진적인 이동방식과 동일한 방법으로 처리된다.
도 10은 본 발명인 동적 해싱 기반의 부하분산기(400)를 이용하여 서버가 더 이상 계속 처리할 수 없는 과부하 상태인 2차 과부하가 걸렸을 때 이를 처리하는 동작 과정을 나타내는 블록도이다. 예를 들어, 서버 2(941)가 2차 과부하에 걸린 경우 서버 2가 이를 혼자서 처리할 수 없기 때문에 다른 서버들과 함께 라운드 로빈의 형태로 재 분산 처리한다. 2차 과부하의 임계값은 도 6의 해싱값 이동정보테이블(440)에 명시되어 있는데 예를 들면 100이다. 서버 2에서 혼자서 처리할 수 없는 해싱 값 4를 가지는 요청(1021)이 들어와 2차 과부하라고 판단하면 그 다음부터 해싱값 4로 오는 사용자 요청은 스케줄링 방식(라운드 로빈)으로 서버를 결정한다 (이는 도 11 F140 단계에 의해 처리된다).
예를 들면, 첫 번째 요청은 서버 1이 처리하고(화살표 1031), 두 번째 요청은 서버 2가 처리하고(화살표 1032), 세 번째 요청은 서버 3이 처리하고(화살표 1033), 네 번째 요청은 서버 1이 다시 처리하는(화살표 1031) 방법으로 분산 처리된다.
본 발명의 동적 해싱 기반의 부하 분산 기법을 도 11, 도 12, 도 13을 참조하여 구체적으로 설명한다.
도 11은 본 발명의 실시 예에 따른 사용자 요청에 대한 전체적인 세션 처리 과정을 나타내는 흐름도이다.
F101: 전체적인 동작을 시작한다.
F110: 세션을 수신한다.
F120: 세션 테이블에 해당 세션이 있는지 확인한다.
F121: 세션 테이블에 해당 세션이 존재하면 세션이 만료되었는지 확인한다.
F122: 세션이 만료되었다면 세션 정보를 파기한다.
F123: 세션이 만료되지 않았다면 세션 테이블에 기록된 서버를 선택한다.
F130: 세션 테이블에 해당 세션이 없다면 해싱값을 계산하고 서버를 선택한다.
F140: 해싱값에 대한 부하 분산이 라운드 로빈인가를 확인한다.
F141: 해싱값에 대한 부하 분산이 라운드 로빈이라면 라운드 로빈으로 서버를 선택한다.
F150: 해싱값에 대한 부하 분산이 라운드 로빈이 아니라면 해싱값에 대한 세션 기록이 활성화되어 있는지 확인한다.
F151: 해싱값에 대한 세션 기록이 활성화되어 있다면 세션 기록을 종료한다.
F152: 세션을 기록한다.
F160: 세션을 전송한다.
F170: 전체적인 동작을 종료한다.
도 12는 본 발명의 실시 예에 따른 도 11의 해싱값 계산 및 서버를 선택(F130)하기 전에 서버의 상태 변화를 관리하는 흐름도를 나타낸다.
F201: 전체적인 동작을 시작한다.
F210: 서버가 삭제되었는지 확인한다.
F211: 서버가 삭제되었다면 삭제된 서버의 해싱값을 남아 있는 서버로 분산한다. 구체적인 예는 도 7을 따른다.
F220: 서버가 삭제되지 않았다면 장애가 발생한 서버가 있는지 확인한다.
F221: 장애가 발생한 서버가 존재한다면 장애 서버의 해싱값을 남아 있는 서버로 분산한다. 구체적인 예는 도 7을 따른다.
F230: 장애가 발생한 서버가 존재하지 않는다면 서버가 추가되었는지 확인한다.
F231: 서버가 추가되었다면 기존 서버에서 추가된 서버로 이동할 해싱값에 대한 세션을 기록하도록 설정한다. 구체적인 예는 도 8을 따른다.
F232: 추가된 서버로 보낼 해싱값을 기존 서버들의 부하율 및 상태에 따라 선정한다.
F240: 추가된 서버가 없다면 서버의 상태가 서버가 처리할 수 있는 과부하 1의 상태인지 확인한다.
F241: 서버의 상태가 서버가 처리할 수 있는 과부하 상태 1이라면 서버들의 부하율 및 상태에 따라 이동할 해싱값을 선정한다. 구체적인 예는 도 9를 따른다.
F242: 이동할 해싱값은 스케줄링 정책에 따라 서서히 이동한다.
F250: 서버의 상태가 서버가 처리할 수 있는 과부하 상태 1이 아니라면 서버의 상태가 서버가 처리할 수 없는 과부하 상태 2인지를 확인한다.
F251: 서버의 상태가 서버가 처리할 수 없는 과부하 상태 2라면 과부하 상태의 해싱값을 라운드 로빈으로 변경하여 스케줄링을 수행한다. 구체적인 예는 도 10을 따른다.
도 13은 본 발명의 실시 예에 따른 도 12의 스케줄링 정책에 의하여 해싱값을 이동(F242)하는 동작 과정을 나타내는 흐름도이다.
F301: 전체적인 동작을 시작한다.
F310: 세션 기록을 시작한 해싱값이 있는지 확인한다.
F311: 세션 기록을 시작한 해싱값이 있다면 해싱값에 대한 세션 기록 시간이 만료되었는지 확인한다.
F312: 해싱값에 대한 세션 기록 시간이 만료되었다면 해싱값에 대한 세션 기록을 중지한다.
F320: 세션 기록을 시작한 해싱값이 없다면 타 서버로 이동할 해싱값이 있는지 확인한다.
F321: 타 서버로 이동할 해싱값이 있다면 지정된 스케줄링 방식에 의하여 해싱값을 이동한다.
본 발명의 동적 해싱 기반의 부하 분산 기법은 서버의 추가/삭제/장애/과부하 상황에서 사용자의 요청을 서버들 사이로 균등하게 분산하고(부하의 균등분산) 사용자의 요청과 서버간에 지속적인 연결 관계가 성립되도록 한다. 이러한 분산 및 연결은 해당 서버들을 사용하는 모든 사용자에게 서버 추가/삭제/장애/과부하로 인한 지연 시간 없는 안정적인 서비스를 보장한다.
본 발명은 기재된 구체 예에 대해서만 상세히 설명되었지만 본 발명의 사상과 범위 내에서 다양하게 변경 또는 변형할 수 있음은 본 발명이 속하는 기술 분야의 담당자에게는 명백한 것이며, 따라서 그러한 변경 또는 변형은 첨부된 특허청구의 범위에 속한다 해야 할 것이다.