Fault Tolerance Basic Concepts
○ Fault Tolerance: 분산시스템상 어느 정도 Fault가 발생해도 시스템이 Crash 되지 않음
○ Fault Tolerance의 Dependability (Fault Tolerance의 요소)
- 가용성(Availability)
- 신뢰성(Reliability)
- 안정성(Safety)
- 유지보수성(Maintenance)










[그림 설명 - PBFT]
- C : Client , 0 : Primary Replica
① Reqeust : Client 가 상태 변환을 요청하는 Request 메시지를 Primary (0) 에게 전송한다.
② Pre-Prepare : Primary 는 나머지 모든 Node 에게 메시지를 전송한다.
③ Prepare : 메시지를 받고 문제가 없는 경우 (1,2 번 Node) 는 자신의 값을 다른 Node 에 전송한다
④ Commit : Pre-Prepare 메시지와 Prepare 메시지를 수집, 합의를 한 후 결과를 모든 Node에 전송한다.
⑤ Reply : 최종 합의 결과를 Client 에 전송한다.
RPC (remote procedure call) SemanticsinthePresenceof Failures

○ RPC 환경에서 발생할 수 있는 5가지 Failure
- 클라이언트가 서버의 위치를 알 수 없음
- 클라이언트의 요청 메시지가 서버에 도달 전 손실
- 요청을 수신한 서버가 Crash ☆
- 서버의 응답 메시지가 클라이언트에 도달 전 손실
- 클라이언트가 응답을 수신하고 Crash




Server Crashes(1)
(a) 일반적 상황
(b) 실행후 크래시
(c) 실행전 크래시
Server Crashe 시 메시지 보증 전략
- At Least Once : 적어도 한번 실행 시킨다. Clinet 가 요청을 확실하게 받았다고 응답할 때 까지 보낸다.
- At Most Once : 최대 한번만 수행해야한다. 못받은 것과는 무관하게 한번만 요청을 보내고 끝낸다.
- Guarantee Nothing : 아무것도 없을을 보증한다. Server Crashe 가 발생하면 클라이언트는 어떤 도움도 얻지 않고, 무엇이 발생한 건지도 모른다. 구현하기 가장 쉽다.
- Exactly Once : 정확하게 한 번의 메시지 전송을 보증한다. 중복과 유실을 허용하지 않기 때문에 구현이 어렵다. (BEST CASE)
Server Crashes (2) & Server Crashes (3)
○ 서버 Crash는 요청에 대한 처리를 수행하기 전과 처리를 수행한 뒤인가에 따라서 다름
- 3가지 Event로 살펴 본 Crash 동작
* M: Message 수신, P: Print, C: Crash 3!
• Crash가 나중에 일어남 M→P→C or P→M→C (시스템 영향이 가장 적음, Best)
• Crash가 중간에 일어남 M→C(→P) or P→C(→M) (괄호 안의 작업은 수행되지 못함)
• Crash가 처음부터 일어남 C(→M→P) or C(→P→M) (모든 작업이 수행되지 못함, Worst)
○ Fault에 대한 서버의 4가지 동작 방식
- at least once: 적어도 한 번 이상 재시도를 함
- at most once: 많아야 한 번 재시도
- Guarantee Nothing: Fault를 무시
- Exactly Once: 오직 한번에 완료 (Best Case)
○ Fault 동작에 따라 동일한 작업이 한 번에 끝 날 수도 반복될 수도 있음
- Always (문제 발생 시 항상 요청), Never (다시 요청 안함), Only When ACKed (Acked일 때 리이슈), Only when not ACKed (Acked가 없을 경우 리이슈)
- 4가지 재 요청 방식 중 어떤 것을 채택하더라도 모든 경우 OK 가 떨어지는 경우는 없다.
- 그래서 정책이 중요한데, 예를 들어 프린터가 안되는 경우는 없게 하라라고 정책을 정하면 Always 방법을 사용한다. (다만 2회 Print 가 될 수 도 있다.)
Basic Reliable-Multicasting Schemes

○ Multicasting환경에서 신뢰성을 보장받는방법
○ 원리
- Multicast 이후 Peer로부터 Feedback 수신
- Peer가 많을경우FeedbackImplosion 발생
• Feedback Implosion: 다수의 Peer가 Feedback을 발생시킴으로써 분산시스템 내에 Overload 또는 Congestion 발생
Nonhierarchical Feedback Control
○ Feedback Implosion을 해결하는 방법
- SRM(Scalable Reliable Multicast)
- Hierarchical
○ SRM - Nonhierarchical Feedback Control
- 정상인 경우에는 별도 ACK Message가 없어도 정상으로 가정하고 문제가 있을 경우에는 NACK 메세지를 Sender 측으로 전송하는 방식이다.
- 다만, 언제까지 데이터 패킷을 가지고 있어야 하는지 알 수 없기 때문에 시간을 정해 NACK 발생한 경우 순차적으로 NACK Message 를 전체 노드로 Multicastiong 한다.

- 동작
• ACK는 Default(Bypass), NACK만 동작
• NACK 응답을 각 Peer가 임의의 순서로 시간 간격을 두고 전송
• NACK 응답은 Broadcast 전송
• Broadcast 된 NACK 응답을 수신한 다른 Peer는 자신이 보낼 NACK 응답 유형과 같은 것이라면 NACK를 보내지 않음
Hierarchical Feedback Control
○ Peer들의 Group을 형성하고 Group 내에 Coordinator를 설정
○ Group 내 Peer들은 Coordinator를 통해 Communication
* 코디네이터끼리 센더 역활을 하며 리시버는 그룹내 센더에게 요청함

○ 동작
- Fail 발생 시 NACK 응답을 Coordinator에게 보냄
- Coordinator가 재전송 수행
Vitrual Synchrony (Multicasting 동기 문제 해결)


'컴퓨터공학 > 분산시스템' 카테고리의 다른 글
분산시스템의 일관성 및 복제(Consistency & Replication) (1) | 2023.12.20 |
---|---|
분산시스템의 동기화(synchronization) (0) | 2023.12.20 |
분산시스템의 네이밍 (1) | 2023.12.20 |
분산시스템의 커뮤니케이션 (1) | 2023.12.20 |
분산시스템에서의 프로세스 (1) | 2023.12.20 |