블로그 이미지
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

'NAM'에 해당되는 글 1

  1. 2008.06.30 Terracotta + Spring 기반의 NAM 예제(8)
2008.06.30 05:36 이전글(~2009)

Terracotta란 무엇인가? 소개영상이다. 간단히 말해서 여러 JVM을 하나로 묶어준다.(클러스터링한다) 그리고 여기서 공유메모리(NAM: Network Attached Memory)를 이용해 다양한 효과를 낼수 있다.

NAM을 이용하는것은 단순히 비교하면, 기존의 방법보다 느리고 좋을게 없다.(NAM의 원리를 이해하면 알게 된다.) 그러나 잘 생각해 보면, 이것은 마치 Hibernate와 비슷한 효과가 있다. 단순질의, 단순효과 시간측정은 떨어질지라도 전체 시스템적인 효과는 매우 큰 장점을 가지고 있다.(이것이 Hibernate를 쓰는 이유이고, Terracotta의 장점이라 생각한다.)

간단한 예제를 만들어 보자.

1. 예제구성(Spring2.0.x + Terracotta.2.6.x)

사용자 삽입 이미지
TC(Terracotta)서버를 실행하고, 각각의 JVM이라고 여겨지는 Tomcat을 실행한다. 각각의 Tomcat은 TC 설정파일인 tc-config.xml파일 하나면 된다. 여기엔 NAM에서 이용할 객체와 instrumented class를 선언하고, 필요에 따라 lock도 걸수 있다.

2. Terracotta 설정파일(tc-config.xml)

 <application>
    <spring>
      <jee-application name="dso1">
        <application-contexts>
          <application-context>
            <paths><path>*/applicationContext.xml</path></paths>
            <beans><bean name="showService" /></beans>
          </application-context>
        </application-contexts>
 <instrumented-classes>
          <include>
            <class-expression>net.max.test.service.Show</class-expression>
          </include>
        </instrumented-classes>
     </jee-application>
    </spring>
  </application>
일반적인 DSO 설정은 여러가지 옵션이 존재한다. 여기서는 간단한 Spring 관련 설정만 본다. TC는 Spring 관련 설정 Tag를 따로 제공한다. 위의 설정은 showService Bean을 공유하고, Show객체를 instrumented class로 사용하겠다는 것이다.

3. Spring 설정 파일(applicationContext.xml)

 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
………(생략)……. "> 
<bean id="showService" class="net.max.test.service.ShowServiceImpl"/>
</beans>

Spring 설정파일에 해당 Bean이 설정되어 있을 것이다.

4. 소스코드 
public class ShowServiceImpl implements ShowService {
  private Show show = new Show();
  @Override
  public Show findShow(String id, String path) {
//---- 시작
synchronized (show) {
if("ok".equals(id))
this.show.setName("Max::"+path);
}
System.out.println("[요청 결과]"+path);
//----
return show;
  }
}

흔히 보는 간단한 구현 서비스 구현체이다.(여기에 log를 위해 AOP도 걸어 본다.)

5. 실행하기
사용자 삽입 이미지
 각각의 Tomcat 초기화면이다.
 여기서 8081 서버에서 add 버튼을 3번 클릭해 본다.
사용자 삽입 이미지
화면 결과로 로그 화면이다.
이제 8082서버에서 add버튼은 한번 클릭해 본다.
사용자 삽입 이미지

8081서버에서 실행한 결과값이 공유 되었다는것을 확인할수 있다. 8082서버의 요청은 평범하게 add버튼을 눌렸을 뿐이다. 이처럼 공유메모리를 이용해서 각각의 JVM의 메모리에 올라와 있는 객체를 공유할수 있다.

심지여, 8081, 8082 JVM 모두를 죽였다가, 다시 부팅해도 이 객체의 값은 보존 되어 진다.
TC의 NAM 때문이다. 이것은 여러가지 응용이 가능하다. TC홈페이지 소개된 여러가지 내용처럼...

사용자 삽입 이미지
그림 출처 [ http://www.theserverside.com/tt/articles/article.tss?l=DistCompute]

위 그림은 본 예제를 잘 표현한 구조라 생각되어져서 붙여본다.
(그림 출처의 아티클도 읽어보면 좋을듯 하다.)

신고
posted by Max.
prev 1 next