2013년 11월 24일 일요일

인피니스팬 핫로드 C++ 클라이언트 6.0.0

핫로드 프로토콜을 설계할 때의 주요 목적 중 하나는 핫로드를 언어 중립적으로 하여 다른 언어로 쓰여진 애플리케이션이 인피니스팬 데이터그리드에 저장된 데이터를 사용할 수 있도록 하는 것이었다. 지능적인 클라이언트가 그리드 내에 어떻게 데이터가 저장되어 있는지 알고 더 뛰어난 성능을 제공할 수 있다는 점에서 핫로드 프로토콜은 특별하다. 우리는 세가지의 클라이언트 지능 레벨을 제공한다.


  • L1: 단순 클라이언트로 고정된 서버 주소의 리스트를 사용하여 라운드 로빈(round-robin)으로 그리드에 연결한다.
  • L2: 클라이언트는 그리드의 위상(topology)을 알고, 새로운 서버가 참여하거나 그리드로부터 제거될 때 알림을 받는다.
  • L3: 클라이언트는 그리드 위상과 키 해시를 사용하여 특정 데이터 항목을 소유하고 있는 주 소유자에 직접 연결 가능하다. 따라서 서버 노드간 원격 호출을 줄인다.


하지만 최근까지는 세 종류의 클라이언트만 있었다.


  • 모든 기능을 가진 자바 클라이언트 (L1, L2, L3)
  • 단순 파이썬 클라이언트 (L1)
  • Sunimal Rathnayake가 Google Summer of Code에서 개발한 C# 클라이언트 (L1)


이제 L1, L2, L3 모두 지원하는 핫로드 C++ 클라이언트의 6.0.0.Final 버전을 발표하려한다. 이 클라이언트는 리눅스, 유닉스, 위도우에서 컴파일 된다.

SIA와 지금까지 훌륭한 작업을 해준 Lorenzo Fili에게 특히 감사한다.

이 클라이언트가 자바 클라이언트와 동등한 기능을 갖추기 위해 아직 원격 질의와 OpenSSL을 추가하여야 한다. 이 기능들은 다음 개발 사이클에 이루어질 것이다.

한 번 다운로드 해보고 만약 도움을 주고 싶다면 깃허브의 우리 프로젝트로 오라.

원문:
Thursday, 21 November 2013, Infinispan HotRod C++ Client 6.0.0.Final

인피니스팬 6.0.0 최종버전이 나왔습니다!

인피니스팬 커뮤니티 여러분께,

인피니스팬 6.0.0  최종 릴리즈 버전인 "Infinium"을 발표합니다. 이 버전은 예전에 발표한 적과 같이 인피니스팬 최초로 아파치 라이선스 v2.0을 따르는 안정 버전이 되겠습니다.

이 버전은 다수의 안정성 확장과 버그 수정 이외에도 많이 요청되었던 기능들을 포함합니다:

  • 원격 질의 지원. 핫로드 클라이언트가 새로운 질의 DSL을 사용하여 인피니스팬 그리드에 질의를 던질 수 있습니다. 이 기능은 아파치 루씬과 구글 프로토버퍼를 기반으로 작성되었으며 이 기술들은 정보를 저장하고 언어에 중립적으로 인피니스팬 서버에 질의하기 위한 기반이 됩니다. 자바 핫로드 클라이언트는 이미 이것을 지원하기 위한 확장이 끝났고, 곧 발표될 C++ 핫로드 클라이언트도 또한 이 기능을 포함할 예정입니다. (읽기/쓰기가 먼저, 이후에 전체 질의 기능이 구현 될 예정)
  • C++ 핫로드 클라이언트.  C++ 애플리케이션이 인피니스팬 서버로부터 정보를 읽고 쓸 수 있게 되었습니다. 토폴로지(level2) 와 컨시스턴트 해시(level3)를 지원하는 (topology and consistent hash aware) 충분한 기능을 가진 핫로드 클라이언트이며 몇 일 안에 출시될 것입니다. 원격 질의와 SSL 지원 같은 기능을 다음 버전에 포함하여 자바 버전과 동등한 기능을 유지하게 될 것입니다.
  • 향상된 영속 통합. 우리는 캐시로더 API에 전반적으로 다시 손을 봤고 그 결과에 꽤 만족합니다. 인피니스팬 6.0의 새로운 영속 API(Persistence API)는 저장된 엔트리에 대한 병렬 순환(parallel iteration)을 지원하고, JSR-107 스펙에 맞춰 직렬화에 대한 오버헤드를 줄였습니다. 이는 구현을 더 이식 가능하게 합니다.
  • 더 효율적인 파일 캐시 스토어(FileCacheStore) 구현체. 이 파일 스토어는 만들어질 때부터 효율성을 염두에 두었으며 기존의 파일 스토어보다 몇 배의 빠른 성응을 냅니다. 이를 위해 비용이 드는 데 키가 메모리에 저장될 필요가 있습니다. 기여해준 칼스텐 블리스(Karsten Blees)에게 감사드립니다.
  • 불균질적 클러스터 지원. 이번 버전까지, 클러스터의 모든 멤버는 같은 만큼의 클러스터 데이터를 소유하고 있었습니다. 만약 하나의 장비가 다른 클러스터내 장비보다 더 강력할 때 이는 잘 동작하지 않았습니다. 이 새로운 기능은 특정 장비가 가지는 데이터를 평균과 비교하여 지정할 수 있도록 합니다.
  • 새로운 사용/성능 측정 통계치가 CloudTM 프로젝트 아래에서 개발되었습니다.
  • JCache(JSR-107) 구현 업그레이드. 인피니스팬 5.3.0에서 첫번째로 출시되었던 표준 캐시 지원이 1.0.0-PFD로 업그레이드 되었습니다.

이번 릴리즈에 포함된 기능과 수정된 버그 등의 완전한 리스트를 확인하려면 릴리즈 노트를 참고하세요.
이번 릴리즈의 사용자 문서는 개정되어 신규 웹사이트로 이전되었습니다. 우리는 훨씬 좋아졌다고 여기며, 여러분도 그렇게 생각하길 바랍니다.
이 릴리스는 코어 개발팀, QE팀 그리고 우리의 성장하는 커뮤니티의 지속적인 노력에 의해 5개월의 기간에 이루어졌습니다. 관련된 모두에게 깊은 감사를 드립니다!
최근 릴리즈를 찾으려면 다운로드 페이지를, 질문을 하기 위해서는 포럼이나 메일링 리스트를 확인하거나 또는 IRC에서 직접 우리를 찾으면 됩니다.

감사합니다.
애드리안(Adrian)

원문:
Tuesday, 19 November 2013, Infinispan 6.0.0.Final is out!

2013년 11월 11일 월요일

인피니스팬 아퀼리언(Arquillian) 컨테이너 1.1.0.Alpha1 릴리스

인피니스팬 사용자 여러분,

인피니스팬 아퀼리언 컨테이너의 새로운 버전이 메이븐 아티펙트(artifact)로 제이보스 메이븐 저장소에 릴리스 되었습니다. 이전 버전은 이 포스트에서 발표되었으며, 그 포스트는 제이보스 메이븐 저장소의 주소와 그 설치 방법, 인피니스팬 아퀼리언 컨테이너 자체의 주소 등의 정보를 포함하고 있습니다.

버전 5.3 부터 인피니스팬 서버가 JBoss AS 7에 기반하고 infinispan-arquillian-container라는 서브모듈이 지워질 수도 있기 때문에, 아마도 이제 우리는 이 프로젝트를 인피니스팬 아퀼리언 컨테이너 보다는 인피니스팬 아퀼리언 확장이라고 불러야 할 것 입니다.

결과적으로 인피니스팬 서버를 위한 아퀼리언 설정은 간단해졌습니다.


인피니스팬 서버를 사용한 테스트 개발

이제 arquillian.xml 파일을 작성하는 단 한가지 방법만 존재합니다.


 
    
        
            
                /path/to/infinispan/server1
                9999
                testuser
                testpassword
                clustered.xml
                -Djava.net.preferIPv4Stack=true -Djboss.node.name=node0
            
        
        
            
                /path/to/infinispan/server2
                10099
                testuser
                testpassword
                clustered.xml
                -Djava.net.preferIPv4Stack=true -Djboss.node.name=node1 -Djboss.socket.binding.port-offset=100
            
        
    


ispnHome 속성은 더이상 존재하지 않습니다. 인피니스팬 서버를 가리키는 패스는 이제 jbossHome으로 지정합니다. serverConfg 속성은 해당 서버의 설정을 지정합니다.

인피니스팬 아퀼리언 확장을 사용하여 테스트를 실행하기 위해, 아래의 의존성들을 사용합니다.
org.jboss.as:jboss-as-arquillian-container-managed:jar:7.2.0.Final:test
org.infinispan.arquillian.container:infinispan-arquillian-impl:jar:1.1.0.Alpha1:test

이제 우리의 테스트에서 서버를 실행하기 위한 설정을 마쳤습니다. 이젠 테스트를 좀 더 효과적으로 할 수 있도록 하는 약간의 추가작업을 소개합니다.


RemoteInfinispanServers

@InfinispanResource를 RemoteInfinispanServer 타입의 인스턴스 변수에 붙여서 실행되고 있는 인피니스팬 서버에 대한 참조를 여전히 주입시킬 수 있습니다.

@InfinispanResource("container1")
RemoteInfinispanServer server1;

주입 대상의 인피니스팬 서버가 여러개라면 각각의 서버를 주입하는 대신 이제 아래 코드를 사용 가능합니다.

@InfinispanResource
RemoteInfinispanServers servers;

그리고 서버 변수 위에서 .getServer(이름)을 호출하여 각각의 서버를 얻어 올 수 있습니다. 이름은 반듯이 arquillian.xml에 존재하는 컨테이너 정의와 대응하여야 합니다. 이 호출의 결과로 RemoteInfinispanServer를 얻습니다.


WithRunningServer

지금까지 사용자는 전체 테스트 묶음(mode="suite") 전이나 각각의 별도의 클래스(mode="class") 테스트 전에 인피니스팬 서버를 시작해야만 했었습니다. WithRunningServer 애노테이션은 테스트 메소드 이전에 자동으로 서버를 시작하고 이후에는 서버를 정지하게 합니다. 예를 들면,

@WithRunningServer({ "container1", "container2" })
public void testMethod() { ... }

이런 경우에 컨테이너는 arquillian.xml 파일에 mode="manual"라고 표시해서 인피니스팬 아퀼리언 확장이 자체적으로 이 서버들의 라이프사이클을 책임진다는 것에 주의하세요.

@WithRunningServer 애노테이선이 클래스에 붙을 때, 그 서버는 테스트 클래스 내의 첫번째 메소드 호출 전에 시작되고 JUnit의 @AfterClass 이벤트가 불려질 때 정지하게 됩니다.


IPv6 지원

인피니스팬 아퀼리언 확장은 이제 IPv6 상에서 실행되는 인피니스팬 서버와 동작 가능하고 이는 JMX를 통해 서버에 접속 가능하기 때문입니다.


내장모드 인피니스팬 테스트하기

인피니스팬 서버 대신 인피니스팬 라이브러리와 테스트를 실행하는 것은 지난 번 버전으로 부터 변화가 없습니다. 이것에 대해서는 이전 블로그 포스트를 읽기 바랍니다.

이 프로젝트를 한 발짝 더 가게 도와준 Michal Linhard와 Vitalii Chepeliuk에게 감사드립니다.

감사합니다.
마틴(Martin)

원문:
Tuesday, 5 November 2013, Infinispan Arquillian Container 1.1.0.Alpha1 released