블로그 이미지
Max.

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

2008.07.29 19:06 이전글(~2009)

TC(Terracotta)는 Master/Worker pattern 예제를 제공하고 있다. 기존의 예제가 SVN에서  opendatagrid 와 WorkManager 로 제공하였는데, 최근 이 모두를 제거하고 새롭게 예제를 올렸다.

새롭게 올라온 예제는 총 4개를 제공하고 있는데 그중 첫번째 예제인 Web Spider는 과거 버젼을업데이트한 버젼이다. 이번엔 이것부터 테스트해 보자.

Web Spider는 Commonj를 이용해서 TC(Terracotta)와 연동하여 특정 URL이라는 job을 주면 해당 사이트의 특정 깊이까지 링크를 타고 들어가고 그 결과값을 공유하는 Master/Worker를 구현한 예제이다.

0. 테스트 환경은 이렇다.

JDK5.0 + Spring STS 3.4 + Terracotta2.6.3 + Maven2.x

1. Eclipse(Spring STS) SVN에서 아래주소로 소스를 다운받는다.

2. Dos창에서 받은소스 디렉토리로 이동후 Maven을 실행한다.

mvn install

사용자 삽입 이미지
많은 파일을 다운받은후 빌드성공이라는 메시지가 나오면 된다.
이것이 하는것은 소스코드를 다운받고, 빌드할 라이브러리를 다운받고, 빌드를 실행하는 것이다.

2. 이제 빌드안 실제 예제(Webspider)를 빌드하고 압축한다.

mvn pakage

사용자 삽입 이미지

이미 빌드 되어있다면, 여기서는 jar파일로 압축만 하게 된다.

3. 이제 준비를 다 했으니, TC를 기동해야 한다. 이번 예제는 기존의 예제와 달리 TC maven plug-in을 사용하고 있다. 따라서 아래와 같은 방법으로 TC를 기동한다.(이후 디렉토리는 모두 samples에서 진행된다.)

mvn tc:start

사용자 삽입 이미지
maven plug-in 때문에 많은 파일을 다운받는다. 간혹 잘못되어서 DSO TC서버가 기동되지 않을때는 다시한번 위 maven명령을 실행해 본다. 빌드성공 메시지가 나오면 TC서버가 정상적으로 기동중임을 확인한 것이다.

4. 이제 본격적으로 Master/Worker 를 실행할 차례다. 먼저 Master를 아래와 같이 실행한다.

mvn -DactiveNodes=master tc:run

사용자 삽입 이미지
로그를 자세히 보면 아래와 같다.

[INFO] [master] Starting Spider:
[INFO] [master]   start url                     = http://www.google.com
[INFO] [master]   max parse depth               = 5
[INFO] [master]   follow external links         = false
[INFO] [master] work manager node id: ClientID[0]

이것은 구글 웹사이트에서 5단계 깊이가지 링크를 추출해 낼것을 주문한것이다. 또한 현상 상태에서 Worker는 없는 상태이다.

5. 이제 Worker를 실행해 보자. Worker는 여러개를 실행할수 있으나 여기서는 두개만 해본다.
각각의 Dos창을 열고 samples 디렉토리에서 아래와 같은 명령을 실행한다.

mvn -DactiveNodes=worker tc:run

실행결과 아래와 같이 각각의 Worker는 Master로 부터 임무를 받고 실행한 결과를 공유한다.

[INFO] [master] created new channel for routing ID: ClientID[1]
[INFO] [master] registered channel with ID: ClientID[1]
[INFO] [master] Submitted URL: http://www.google.com
[INFO] [master] created new channel for routing ID: ClientID[2]
[INFO] [master] registered channel with ID: ClientID[2]

Worker가 실행되면 Master에서는 각각의 Worker로 부터 ID를 할당받아서 job을 분배한다.

Worker1

사용자 삽입 이미지
Worker2
사용자 삽입 이미지
Master
사용자 삽입 이미지

이 예제는 TC를 이용한 전형적인 Master/Worker 구현체이다. 이미 TC를 이해하고 Master/Worker 을 이해하였다면 어려운것이 아니지만, 새로 업데이트된 이번 예제는 이것 이외에도 3개가 더 있는데 이들이 모두 하나의 설정으로 되어 있어서 처음 접하는 사람에게는 복잡해 보일지도 모르겠다. 초기 스터디때 이 예제를 기반으로 Spring과 연동해 보았는데 어려룰께 없었다. 또한 다른 Spring Modules 프로젝트에 있는 Batch와 Integration과의 연동도 어렵지 않으리라 생각한다. 다음에는 예제의 소스코드 구조 및 흐름을 기준으로 어떻게 동작하는지 기술해 봐야 겠다. (사실 Master/Worker 패턴에 Work가 Webspider라는게 전부다.)

TC는 Hibernate처럼 단순 속도를 비교하면 느리지만, 그 수용성이 대단히 유연해서 엔터프라이즈 환경에서 응용가능성이 매우 많을것이라는 생각이다.
신고
posted by Max.