Infinispan에서 cluster내에 entries들을 분산하는 것은 consistent hashing algorithm 근거하여 이루어진다. algorithm entry key 사용하여 hash 계산하고, 어느 node primary owner인지, 나머지 node들이 backup owner 동작할 것인지 결정하는데 hash 사용한다. 분산에 대해 제어하는 것은 가능하다. 특히, performance 때문에 grouping algorithm 사용하여 연관된 entry들을 동일 node 같은 장소에 배치하는 것은 아주 유용하다. 이것 때문에 우리는 key 기반 group name 계산할 있는 Grouper class 생성할 필요가 있다. 예제는 다음과 같다.


public static class LocationGrouper implements Grouper<String> {

@Override

public String computeGroup(String key, String group) {

return key.split(",")[1].trim();

}

@Override public Class<String> getKeyType() {

return String.class;

}

}



위의 코드는 아주 간단하다. 단지 key comma delimiter 사용하여 분리하고, 두번째 항목 ("country") group으로 사용한다. Hashing algorithm key 대신에 group 사용하여 entry hash 계산할 것이다. 특정 grouper 사용하기 위해서는 configuration 추가해야 한다.


config.clustering().hash().groups().enabled().addGrouper(new LocationWeather.LocationGrouper());



이제 application 실행해 보자.


git checkout -f step-8

mvn clean package exec:exec # from terminal 1

mvn exec:exec # from terminal 2


이번 실행에서 node별로 output 조사해보면 동일한 country 속한 모든 entry 대한 event log "paired"되어 있음을 있을 것이다. 경우에는 "Romania" group 두번째 Node "hashed"되었다.


[Coordinator Output]


-- Entry for Bucharest, Romania modified by another node in the cluster
-- Entry for Cluj-Napoca, Romania modified by another node in the cluster



다음 단계에서는 node간에 전송된 entry들을 serialized form으로 어떻게 제어하는지를 살펴볼 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/675

트랙백 주소 :: http://www.yongbi.net/trackback/675

트랙백 RSS :: http://www.yongbi.net/rss/trackback/675

댓글을 달아 주세요

댓글 RSS 주소 : http://www.yongbi.net/rss/comment/675
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다