소개
본 장에서는 TmaxGrid의 기본 개념과 특징, 구성 요소들에 대해서 설명한다.
1. 개요
TmaxGrid는 멀티 노드 환경에서 in-memory 데이터를 동기화시키는데 목적을 두고 있다. 다수의 업무 프로그램에서 이 기능을 이용해서 분산 lock, queue 기능, 공유 설정을 별도의 구현 없이 쉬운 API를 통해서 멀티 노드에서 구현 할 수 있게 하는데 목적이 있다.
구성은 크게 TmaxGrid를 이용하는 Server, Client, TmaxGrid Server로 구성한다.
-
Server, Client
TmaxGrid를 사용할 수 있는 API를 이용하여 구성하는 업무 프로그램이다. 여기서는 API만을 구현하여 제공 한다.
-
TmaxGrid Server
Tmax 시스템 서버로 구성하며 데이터는 공유 메모리에 저장하고, 요청 처리는 Tmax 엔진(CLH), 서버에서만 처리한다. 클러스터를 위해서는 직접 TmaxGrid 서버 간에 통신을 수행한다. 같은 머신에 존재하는 프로세스들끼리는 UNIX 도메인 소켓을 사용하고, TmaxGrid 서버 간에는 UDP 소켓을 사용하여 통신을 수행한다. (성능상 이점)
제공하는 기능들을 확인하면 다음과 같다.
-
분산 Lock
특정 key를 이용하여 멀티 노드, 멀티 프로세스에서 배타 lock을 구성할 수 있다.
-
Watcher
특정 key에 대한 데이터의 이벤트에 따른 Callback 함수를 등록하여 통지받을 수 있다.
-
Data 제어
멀티 노드 상에서 같은 Key에 대한 data를 입력, 삭제, 수정할 수 있다.
-
장애/복구
다른 노드에 있는 시스템의 장애 발생을 감지하여, 장애가 발생하는 경우의 적절한 대응을 할 수 있다. 운영중 복구되는 시스템이 자동으로 참여가 가능하다.
-
관리
상태 모니터링과 데이터 모니터링을 수행하는 유틸리티를 제공한다. 설정에 대해서 정적, 동적 변경을 수행할 수 있다.
특징
다음은 TmaxGrid의 주요 특징이다.
-
키 기반 큐
모든 데이터를 key:value 쌍으로 가지고 있다.
Key는 다음의 조건을 만족해야 한다.
-
String 형으로 C 언어에서는 char * 타입이며, Java에서는 String 타입이다.
-
127Byte 이내로 표현해야 한다.
-
"/" 문자로 Parent-Child Key를 구분한다.
TmaxGrid는 Parent-Child Key 구조를 지원한다. UNIX의 파일 시스템처럼 구조화해서 Key를 구성할 수 있다는 의미이다.
예를 들어, 환율 정보를 표현할 경우 다음과 같이 사람이 알아볼 수 있는 논리적인 구조화가 될수 있다.
/ExchangeRate/Korea/USA, /ExchangeRate/Korea/Japan
ExchangeRate의 Child는 Korea이며, Korea의 Child는 USA이다. 또한, ExchageRate 아래의 변화에 관심이 있는 업무들은 ExchangeRate라는 Key만 알면, Child Key에 대해서 변화를 감지할 수 있도록 해주기도 한다. Value는 tpalloc으로 할당한 data만을 허용한다.
-
-
클러스터 방식
TmaxGrid는 변화가 있을 경우 모든 Node에 복제를 하여 모든 Node에서 같은 메모리 공간을 볼 수 있는 목적을 달성한다. 즉, 모든 Node의 key:value 데이터들이 동일해야 성공할 수 있는 조건이다. 이 시스템은 멀티 노드 상에서 전체 구성원 중 살아 있는 Node가 과반수 미만이라면, 복제를 한다 하여도 이 시스템이 고립되었는지 정상 상태인지 알 수 없기 때문에 동작을 수행하지 않는다.
만약, Node가 2대일 경우는 항상 2 Node 모두 동작 중이어야 이 시스템이 동작한다. 5대라면 3대까지 동작해야만 정상 동작하고, 2대가 서로 연결되어 있다고 해도 고립되었다고 판단하고 더 이상 진행하지 않는다.
이런 동작 방식은 모든 Node가 같은 값을 가지게 하기 위함이다. 한 Node가 장애가 발생하고 다시 복구가 되었을 경우에는 이미 동작하고 있는 시스템이 있다면 진행중이던 key:value를 복사받아 동일한 TmaxGrid를 제공한다.
각각의 노드는 최근의 변경 사항을 저장하는 히스토리를 가진다. 마스터 노드는 복구 요청이 왔을 때 대상 노드의 시퀀스 번호를 보고 자신의 히스토리를 찾아서 상대 노드의 히스토리 이 후 변경 사항을 전송하여 대상 노드를 복구 시킨다. 만약 대상 노드의 시퀀스 번호가 자신의 히스토리에 없다면 전제 key:value 데이터를 전송하여 대상 노드를 복구 시킨다.
-
모니터링 및 관리 기능 지원
tmadmin의 추가된 명령어를 통해서 현재 설정한 값과 상태를 확인, 약간의 제어 기능을 수행한다. 설정한 값들은 환경설정 파일에서 적용한 값들을 보여준다. 현재 GQS의 상태와 각 Key별 상태를 볼 수 있다. 제어는 GQS가 클라이언트의 명령을 수행하지 않고 멈춰 있을 수 있는 suspend 기능을 제공한다.
제약 사항
다음 TmaxGrid 서비스의 제약 사항에 대한 설명이다.
-
한 도메인 안에서 유효한 기능이다. 멀티 도메인 상에서 사용할 수 없다.
-
한 도메인 안에서 해당 기능을 활성화시키면 모든 Node들은 반드시 해당 기능을 함께 사용해야 한다. 부분적으로 사용/불가능은 지원하지 않는다.
-
Windows는 GQS를 제공하지 않는다.
-
UDP Multicast를 사용하고 있기 때문에 Node 사이에 UDP Multicast가 가능한 시스템이어야 한다.
-
UDP Multicast는 네트워크 부하를 증가시킬 수 있기 때문에 따로 네트워크를 구성하는 것을 권장한다.
-
하나의 value는 10000Byte를 넘을 수 없다.
2. 시스템 구성
TmaxGrid 시스템은 다음의 요소로 구성된다.
-
시스템 저장소
TmaxGrid를 저장할 수 있는 저장소로 관리자가 설정한 UNIX 시스템의 공유 메모리에 다음의 형식으로 정보를 저장한다.
key:value
저장되는 정보는 기타 필요한 정보들도 함께 저장한다. 실제 저장할 수 있는 Key 개수, Value 크기가 설정을 통해서 결정해야 한다. 실제로 해당 머신에서 제공하는 공유 메모리 크기까지 설정이 가능하다. 멀티 노드일 경우 제일 작은 값으로 맞춰주어야 한다.
TmaxGrid를 저장하고 멀티 노드 간의 TmaxGrid를 동기화 수행하는 서버 프로세스 GQS, 실제 기능을 담당하는 서버/클라이언트 라이브러리로 구분된다.
-
GQS
Tmax의 시스템 프로세스로 동작을 수행하고 한 Node에 하나의 프로세스만 기동한다. CLH와 서버 프로세스는 다른 GQS와의 통신을 수행한다. 해당 프로세스는 tmboot에 의해 Node 전체가 기동할 때 함께 기동하며 전체 tmdown될 때 함께 내려간다.
-
서버/클라이언트 라이브러리
C 언어용 일반, 스레드용 클라이언트 라이브러리와 TCS, UCS용 서버 라이브러리를 제공한다. 또한 Java 언어용 WebT 라이브러리를 제공한다.
라이브러리에서 개발자는 Key에 대한 create, destory, put, get, update, delete, enqueue, dequeue, watcher 등록을 수행할 수 있다.