개발/대용량트래픽
Redis와 Gossip 프로토콜: 빠른 네트워크 상태 동기화 기술
난중후니
2024. 1. 25. 20:57
728x90
반응형
Gossip 프로토콜
- Gossip 프로토콜은 분산 시스템에서 정보를 빠르게 전파하기 위한 방식입니다.
- 각 노드는 주기적으로 이웃 노드에게 정보를 전달하며, 이를 통해 네트워크 내의 모든 노드에게 정보가 빠르게 전파됩니다.
PING / PONG 메커니즘
- PING 메시지
Redis 노드는 주기적으로 이웃 노드들에게 PING 메시지를 보냅니다.
PING 메시지에는 전송하는 노드의 상태와 일부 랜덤하게 선택된 다른 노드들의 상태 정보가 포함됩니다.
- PONG 메시지
PING 메시지를 받은 노드는 자신의 상태 정보를 담아 PONG 메시지를 응답으로 보냅니다.
- 상태 업데이트
PING 또는 PONG 메시지를 받으면, 노드는 메시지에 포함된 다른 노드들의 상태 정보를 사용하여 자신의 뷰를 업데이트 합니다.
이웃 노드 파악 방법
- 노드 목록 유지
각 Redis Cluster 노드는 네트워크 내의 모든 다른 노드에 대한 정보를 가지고 있습니다.
이 목록에는 각 노드의 주소, 포트, 노드 ID, 마지막으로 수신된 PING 또는 PONG 메시지의 시간과 같은 다양한 상태 정보가 포함됩니다.
- 부분적인 PING 메시지
노드가 PING 메시지를 보낼 때, 해당 메시지에는 전체 노드 목록의 모든 정보가 포함되는 것이 아니라 일부 랜덤하게 선택된 노드들의 정보도 포함됩니다.
이렇게 함으로써 각 노드는 자신이 직접적으로 알고 있는 정보의 일부만을 주기적으로 공유하게 됩니다.
- 정보의 전파
PING / PONG 메시지가 교환되면서, 각 노드는 수신한 메시지 내의 정보를 기반으로 자신의 노드 목록을 업데이트 합니다.
이러한 방식으로, 노드 간의 부분적인 정보 교환을 통해 클러스터 전체의 상태가 빠르게 전파됩니다.
- 새 노드의 추가
새로운 노드가 클러스터에 추가될 때, 해당 노드는 기존의 노드 중 하나와 통신하여 클러스터의 상태 정보를 받아옵니다.
그 후에는 Gossip 프로토콜을 통해 다른 노드들과 정보를 주고받게 됩니다.
랜덤한 이웃 노드들에 대한 상태를 확인한다면 누락되는 정보가 생기지 않나요?
Gossip 프로토콜은 모든 노드와의 통신을 보장하지 않는 대신, 네트워크 트래픽을 크게 줄이는 방식입니다.
그렇기 때문에, 각 PING 메시지에서 랜덤하게 선택된 몇몇 노드에 대한 정보만 전달되므로, 한 번의 PING 메시지에서는 일부 노드의 상태 정보가 누락될 수 있습니다.
그러나 다음과 같은 이유로 큰 문제가 되지는 않습니다.
- 빈번한 PING 메시지
각 노드는 꾸준히 주기적으로 PING 메시지를 보냅니다.
따라서 한 번의 PING 에서 누락된 노드의 정보도 다음 PING에서 포함될 가능성이 높습니다.
- 다양한 정보의 전파
PING 메시지를 받은 노드는 PONG 메시지를 통해 응답하면서 자신이 가지고 있는 정보를 전달합니다.
이 응답은 받은 PING 메시지에 포함된 정보와ㅏ 더불어 그 노드가 알고 있는 다른 노드의 상태 정보도 포함할 수 있습니다.
- 빠른 전파
Gossip 프로토콜의 특성상 정보가 빠르게 전파됩니다.
즉, 한 노드가 특정 노드의 상태 변화를 감지하면, 이 정보는 곧바로 다른 노드들에게 전달되기 시작합니다.
이런 방식으로 전체 클러스터의 상태는 빠르게 동기화됩니다.
- 노드의 장애 감지
만약 한 노드가 장애가 발생하면, 이 정보는 다른 노드들에게 빠르게 전파되어야 합니다.
Gossip 프로토콜이 모든 노드와의 통신을 보장하지 않기 때문에, 장애 감지에는 일정한 시간이 걸릴 수 있습니다.
그러나 Redis Cluster의cluster-node-timeout
설정 값(기본 15초)으로 이 시간을 조절할 수 있으며, 이 값은 노드가 장애로 판단되기 전에 기다려야 하는 시간을 의미합니다.
728x90
반응형