이번 단계에서는 강력한 infinispan의 clustering에 대해 알아볼 것이다. Multiple node간 데이터를 어떻게 공유할 수 있는지를 보여줄 것이다. 이 multiple node는 동일 physical host에 있을 수도 있고, 분리된 VM이나 따로 떨어진 machine에 있을 수도 있다. 이 tutorial의 목적에 맞도록 동일한 host에서 모든 node를 실행하는 것은 network이나 firewall에 대한 변경작업이 필요 없이 때문에 가장 쉬운 방법이다. 최고의 결과를 위해 vertical splitting (여러 개의 터미널 윈도우 사용)을 지원하는 terminal을 사용하라. (Linux : Terminator, OSX : iTerm2, Windows : ConEmu)
CacheManager를 Cluster에 속하도록 설정하기 위하여 특별히 전송이 가능한 "global" configuration을 설정해야 한다.
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder(); global.transport().clusterName("WeatherApp");
cacheManager = new DefaultCacheManager(global.build(), config.build());
우리는 편리한 defaultClusterBuilder() method를 사용하여 쉽게 갔지만, GlobalConfigurationBuilder를 구성하고 필요한 파라미터들을 수정함으로 동일한 결과를 얻을 수 있다. Clustered CacheManager를 만드는 것만으로는 충분하지 않다. 우리는 Clustered Cache를 원한다. 이 예제에서는 default cache configuration을 수정하여 기본적으로 2곳에 데이터를 저장하는 distributed synchronous cache를 사용할 것이다.
config.clustering().cacheMode(CacheMode.DIST_SYNC);
우리가 저장한 Entries들은 network을 통해 node간 전송되어야 하기 때문에, key와 value에 대해서 java.io.Serializable interface를 통해 구현할 필요가 있다. Entry들은 key를 hash하여 cluster member들 사이에 분산처리 된다. 2곳에 저장하도록 설정했기 때문에, 각 entry는 primary owner와 backup owner를 가질 것이다. 이제 여러 개의 terminal을 띄워 놓고 다음과 같이 해보자.
git checkout -f step-5
mvn clean package exec:exec # from terminal 1
mvn exec:exec # from terminal 2
서로간에 "wait"하도록 설정하지 않았기 때문에 첫번째 instance가 시작되자마자 두번째 instance를 시작하라. 최종 결과는 이전 단계와 유사하겠지만 (2곳에서 보여짐), 서로 간의 node discovery와 관련된 추가적인 logging을 볼 수 있을 것이다. 우리는 이런 동작을 통제하기 위해서 다음 단계에서는 listener를 추가할 것이다.
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/672