/
core clustering

core clustering

Hazelcast기반 클러스터 구성

 

 

현재 구현의 주요 특징

1. Pub/Sub 구현

  • ITopic를 활용한 Pub/Sub:

    • cacheSyncTopic을 통해 메시지를 발행하고 구독하는 구조.

    • 토픽 기반으로 Hazelcast 노드 간 동기화 처리.

  • 구체적 구현:

    • cachePublish, eventPublish, topicPublish 메서드를 통해 메시지를 발행.

    • 메시지를 Reliable Topic(getReliableTopic)으로 관리하여 안정적인 메시지 전달을 보장.

    • 각 메시지는 CacheMessage 객체로 처리.


2. 클러스터링 기능

  • 클러스터 노드 관리:

    • MembershipListener를 사용하여 노드 추가 및 제거 이벤트를 감지.

    • serviceMember 맵에 노드 상태를 관리하여 클러스터 동작을 최적화.

  • 마스터 노드 관리:

    • isMasterMember, getMasterMember 메서드로 마스터 노드를 확인.

    • 마스터 노드를 활용한 클러스터 작업 조율 가능.


3. 데이터 및 이벤트 동기화

  • Replicated Map:

    • getClusterStatus, getMemberStatus, putLocalMemberStatus 등을 통해 노드 간 상태를 공유.

    • 세션 동기화를 위한 Replicated Map(getSessionMap) 구현.

  • Queue 및 Ringbuffer:

    • EventQueue를 활용한 비동기 이벤트 처리.

    • Ringbuffer를 사용해 메시지 보관 및 순서 유지.


현재 구현의 강점

  1. 강력한 분산 이벤트 시스템:

    • Reliable Topic 및 메시지 큐를 활용하여 클러스터 내 이벤트를 안정적으로 처리.

    • 메시지 유실 방지를 위한 Reliable Topic 활용.

  2. 노드 상태 관리:

    • 클러스터 노드 상태를 효과적으로 관리하며, 장애 및 복구를 자동으로 처리.

  3. 확장 가능성:

    • MembershipListener와 같은 Hazelcast 이벤트를 통해 동적 확장 및 축소 가능.

  4. 분산 데이터 동기화:

    • Hazelcast의 Replicated Map과 Reliable Topic으로 클러스터 상태와 데이터를 동기화.


개선 및 추가 제안

1. Pub/Sub의 확장성 강화

  • 현재 상태:

    • Pub/Sub은 클러스터 내부에서 Reliable Topic으로 안정적으로 작동.

  • 제안:

    • 클러스터 외부 서비스와의 통신이 필요하다면, Kafka 또는 RabbitMQ와 같은 외부 메시징 시스템과 통합.

    • 이를 통해 클러스터 외부의 MSA 서비스와의 이벤트 연계도 가능.


2. 장애 감지 및 복구 최적화

  • 현재 상태:

    • MembershipListener로 노드의 추가/제거 이벤트를 감지.

  • 제안:

    • Heartbeat 기반 장애 감지:

      • 노드가 비정상 상태일 때 빠르게 탐지할 수 있도록 Heartbeat 메커니즘을 강화.

    • Timeout 관리 개선:

      • 현재 checkReadTimeout에서 timeoutMembers를 관리하고 있으나, 타임아웃 정책을 동적으로 변경 가능하도록 개선.


3. 모니터링 및 로깅

  • 현재 상태:

    • Logger를 통해 클러스터 상태를 출력하고 있음.

  • 제안:

    • 분산 모니터링 도구 통합:

      • Prometheus 및 Grafana를 연동하여 클러스터 상태와 Pub/Sub 메시지 전송량, 노드 상태를 실시간으로 모니터링.

    • 토픽 상태 모니터링:

      • Reliable Topic의 상태(cacheSyncTopic.getLocalTopicStats)를 주기적으로 로그에 기록하거나 대시보드로 시각화.


4. 메시지 보장 수준

  • 현재 상태:

    • Reliable Topic을 사용하여 기본적인 메시지 안정성을 제공.

  • 제안:

    • 메시지 전송의 Exactly Once 보장이 필요하다면, Hazelcast Jet와 통합하거나 외부 메시징 시스템(Kafka 등)을 활용.

    • 예: 중요한 데이터 동기화 또는 재처리 로직 추가.


5. 클러스터 구성의 동적 관리

  • 현재 상태:

    • 클러스터 노드 구성은 ConfigurationManager에서 관리하며, Kubernetes 환경을 지원.

  • 제안:

    • Dynamic Membership:

      • Hazelcast의 Discovery SPI를 사용하여 클라우드 환경(AWS, GCP)에서 동적 클러스터 구성 지원.

    • 자동 스케일링:

      • Kubernetes의 HPA(Horizontal Pod Autoscaler)와 연계하여 클러스터 노드 수를 자동으로 조정.


6. 코드 간소화 및 모듈화

  • 현재 상태:

    • ClusterServiceImpl에 클러스터링 관련 로직이 모두 포함되어 있음.

  • 제안:

    • 클러스터링 관련 책임을 분리하여 각 기능을 모듈화:

      • Pub/Sub 관리 모듈

      • 노드 상태 관리 모듈

      • 데이터 동기화 모듈

    • 코드 유지보수성을 높이고, 새로운 기능 추가 시 더 쉽게 확장 가능.


결론

현재 Hazelcast를 활용한 클러스터링과 분산 이벤트 처리는 잘 설계되어 있으며, 안정성과 성능 면에서 강점이 있습니다. 위에서 제안한 개선 사항을 단계적으로 도입하면 더 높은 확장성과 유지보수성을 확보할 수 있습니다.