2013-03-14 4 views
2

현재 distributed, fault tolerant, ETL ecosystem을 개발하기 위해 POC을 수행 중입니다. 내 clustering (data+notification) 목적으로 Hazelcast을 선택했습니다. Hazelcast 리소스를 통한 인터넷 검색은 to this link이고지도 기반 솔루션을 사용하여 내가 어떻게 생각하고 있는지 정확히 일치시킵니다.Hazelcast write-through지도 저장시 사전 채우기 저장

한 점을 이해해야합니다. 그 전에 우리 아키텍처에 대한 표준 아이디어를 제공 할 수있게하십시오 :

Say we have 2 nodes A,B running our server instance clustered through hazelcast. 그 중 하나는 요청을 수락하는 청취자입니다 (단, 페일 오버시 변경할 수 있음). 대답

A 요청을 받고이를 분산 된 맵에 넣습니다. 이 맵은 지속적 저장소에 의해 백업 된 후기 기입이고 단일 메모리 백업은 노드에 구성됩니다.

각 인스턴스에는 로컬 맵 항목 수신기가 있으며, 항목 추가 이벤트시 (asynchronous/queuing) 항목을 처리 한 다음 분산 맵에서 제거합니다.

예상대로 작동합니다.

질문 :

(10 개) 요청을받은 각 노드에서 5와 함께 배포했다고 밝혔습니다. 각 노드의 2 개 항목이 처리되었으며 두 인스턴스가 모두 충돌합니다.

이제 백킹 데이터 저장소에 총 6 개의 항목이 있습니다.

이제 우리는 두 인스턴스를 모두 가져옵니다. 문서에 따라 - "As of 1.9.3 MapLoader has the new MapLoader.loadAllKeys API. It is used for pre-populating the in-memory map when the map is first touched/used"

우리는 단순히 저장소에있는 모든 키 값을로드하여 loadAllKeys()을 구현

  1. 그래서 그 두 인스턴스가 이제 6을로드 할 가능성이 의미한다. 항목과 (따라서 중복 처리의 결과)를 처리? 그로드가 클러스터에 한 번만 수행되도록 또는 그것이 동기화 된 방식으로 처리입니까?
  2. On server startup I need to process the pending entries

    는 (있는 경우). 나는 데이터가 볼 로드되었지만 entryAdded 이벤트는 시작되지 않습니다. entryAdded 이벤트를 시작하려면 어떻게해야합니까? (또는 시작시 보류중인 항목이 있다는 것을 알 수있는 다른 우아한 방법)?

제안 요청.

감사합니다, Sutanu 초기화에

+0

두 번째 문제는 "로컬"keySets를 "가져 와서"처리하는 방법입니다. 이것은 Hazelcast가 초기화 된 직후에 한 번 호출됩니다. 이것이 내가 할 수있는 최선인지 궁금 해서요. –

답변

1
  1. , 영구 저장소에있는 모든 6 키를 반환하는()를 호출됩니다 loadAllKeys. 그런 다음 각 노드는 소유하고있는 키만 선택하여로드합니다. 따라서 B가 나머지 4를로드하는 동안 A는 2 개의 항목을로드 할 수 있습니다.

  2. store.load는 항목 수신기를 시작하지 않습니다. 이것에 대해서 어떻습니까? 초기화 직후에 청취자를 등록한 후에 localEntries를 가져 와서 기존의 것을 처리 할 수 ​​있습니다.

+0

1을 확인해 주셔서 고마운. 2를 위해, 지금 내가 언급했던 것과 유사한 무엇인가하고있다, 그것이 받아 들일 수있는 길일 것인지 궁금하게 생각하고 있었다. –

+0

나는 하나 더 질문했다. 그런 아키텍처에서 하나의 노드에 장애가 발생해도 백업 수가 0으로 유지되면 해당 항목은 데이터 저장소에 계속 남아 있지만 새 노드가없는 한 다른 노드로는 장애 조치되지 않습니다. 노드가 시작됩니다). 이것이 올바른 이해입니까? 기본적으로 데이터 저장소가있는 클러스터가 백업 된 맵을 이해하는 방법에 관심이 있지만 백업은 작동하지 않습니다. 당신의 도움을 주셔서 감사합니다. –