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
를 사용해 메시지 보관 및 순서 유지.
현재 구현의 강점
강력한 분산 이벤트 시스템:
Reliable Topic 및 메시지 큐를 활용하여 클러스터 내 이벤트를 안정적으로 처리.
메시지 유실 방지를 위한 Reliable Topic 활용.
노드 상태 관리:
클러스터 노드 상태를 효과적으로 관리하며, 장애 및 복구를 자동으로 처리.
확장 가능성:
MembershipListener
와 같은 Hazelcast 이벤트를 통해 동적 확장 및 축소 가능.
분산 데이터 동기화:
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를 활용한 클러스터링과 분산 이벤트 처리는 잘 설계되어 있으며, 안정성과 성능 면에서 강점이 있습니다. 위에서 제안한 개선 사항을 단계적으로 도입하면 더 높은 확장성과 유지보수성을 확보할 수 있습니다.