오늘은 분산시스템속 어떤 브로드캐스트 알고리즘이 있는지 알아보고 어떤 것을 코드에 적용해볼까 선택할려고 한다.
오늘 설정할 브로드캐스트 목표는 새로운 Peer가 등장할시 어떻게 새로운 Peer를 다른 Peer가 인식하도록 할까이다.
1. Flooding (플러딩)
Flooding은 모든 Peer가 새로운 Peer에 대한 정보를 모든 이웃 피어에게 전송하는 방법이다.
새로운 Peer A가 네트워크에 들어오면 -> Peer A는 자신의 정보를 인접 피어 B, C, D에게 전송 -> B, C, D는 연결된 피어에게 전송한다.
장점 : 단순한 구현
단점 : 네트워크 트래픽이 많아질 수 있다.
인접한 피어는 또 어떻게 구할것인가? 문제가 있는 거 같다.
2. Gossip Protocl(가십 프로토콜)
가십 프로토콜은 Peer들이 랜덤하게 선택된 몇몇 피어에게 정보를 전송해, 시간이 지남에 따라 네트워크 전체에 정보를 퍼지도록 하는 것이다. 그래서 전염병? 이라고 불리기도 한다.
예를들어 위 그렘에서 Node1 -> Node2/Node5에게 정보를 전송하면 Node2/Node5가 다른 Node에게 또 정보를 전송하는 것이다.
장점: 트래픽이 낮다.
단점: 모든 정보를 전송하기까지 시간이 걸릴수 있다.
Flooding이란 별차이가 없어 보이지만 Flooding은 인접한 모든 노드에게 전송한다. -> 이는 인접한 노드가 많다면 그 수만큼 트래픽이 증가할수 있다. 하지만 Gossip은 랜덤하게 고른 소수만 전송하기 때문에 트래픽이 낮다.
3. Tree-based Broadcast
트리 구조를 이용하여 브로드캐스팅 하는 방식이다. 새로운 Peer가 들어오면 트리 구조를 유지하며 정보를 전달한다.
예를 들어 새로운 Peer A가 들어오면 이진 트리를 업데이트 한다. B의 자식 A/C 그렇다면 Peer A의 부모 노드 B는 자신의 자식 Peer C등에게 새로운 Peer A에 대한 정보를 전송해서 트리구조를 만든다.
장점 : 트래픽 낮음, 분산처리 용이
단점: 트리 구조를 구성해야 한다. 조금 구현이 어렵지 않을까 싶다.
4. Publish-Subscribe(구독 기반)
구독 기반 브로드캐스트하는 방식이다. 새로운 Peer가 들어오면 특정 채널에 가입하여 구독하고 기존 Peer들은 해당 채널에 새로운 Peer정보를 추가한다.
예를들면 새로운 Peer A가 네트워크에 들어온다. -> Peer A는 Channel System에 가입한다. -> 기존 Peer들이 Channel System에 들어온 Peer의 정보를 업데이트 한다. Peer A는 채널을 통해 정보를 수신한다.
장점 : 채널을 통해 관리함으로써 확장성이 높을수 있다. 새로운 노드에 대한 추가가 용이하다.
단점 : 많은 구독자가 있다면 트래픽이 많을수 있다. 중개자를 설정해야 하는 문제가 있다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] ARP 프로토콜 (0) | 2024.04.20 |
---|---|
[네트워크] 로그란 무엇인가 (0) | 2023.03.05 |
[네트워크] Restful하게? Rest란 무엇일까? (0) | 2023.02.23 |
[네트워크] Protobuf란 무엇인가? (0) | 2023.02.21 |
[네트워크] JWT(Token)를 위주로 Cookie & Session 파헤치기 (0) | 2023.01.07 |