아키텍쳐

[강의 정리] Distributed System 2.3: System models

hayz 2023. 3. 10. 00:11

# 강의 영상


정리

앞선 글에서 "두 장군 문제"와 "비잔티움 문제" 들을 살펴보며 여러 노드가 같이 일을 할 경우 서로간의 메시지가 누락될 수도 있고 특정 노든는 합의한 대로 동작을 하지 않을 가능성이 있다는 것을 알아보았습니다. 그렇기 때문에 우리는 언제나 노드나 노드를 구성하고 있는 네트워크가 정상적이지 않은 상황이 있다는 것을 가정하고 진행해야 합니다. 이는 분산 시스템을 구성하는 가장 기초적인 개념입니다. 

 

실제로 예를 들어 해저에 깔린 네트워크 케이블을 상어가 손상 시킨 일이 있다고 합니다. (육지에서는 소가 밟고..)

이렇듯 분산 시스템을 구성하는 요소들의 장애를 항상 고려하고 시스템을 설계해야 하는데요 

그중에서 중요한 세가지 요소를 살펴보겠습니다. 

 

1. 네트워크 

   - 네트워크는 앞선 예시들 처럼 언제 도착할지 모르는, 어딘가에서 손실될 지 모른다는 가정이 필요로 합니다.

 

2. 노드

 - 노드 안에서 실행중인 프로세스가 온전히 아무 문제 없이 작동할 것이라고 보장할 수 있을까요? 

 - 노드안에서 메모리, cpu, 등의 문제로 제대로 실행되지 않거나 의도한 알고리즘 대로 동작하지 않아 악의적인 동작을 수행할 수있다고 가정해야 합니다. 

 

3. 타이밍 

  - 동기적인지, 비동기적인지에 따른 차이점이 존재합니다. 

  - 동기적이란 최대 지연 (latency) 시간 내로 응답이 오는 경우를 말하지만, 비동기적이란 이 메시지가 보내지면 언제 응답이 올지 모르고 기다리는 케이스를 말합니다.  (일반적인 CS 에서의 개념과 관점이 다릅니다. CS 에서는 반대로 동기가 요청을 보내고 응답이 올때까지 계속 기다리는 상황을 말하죠)

 

 

요약하자면, 분산 시스템 설계를 들어가기 전 이 주요한 요소들을 알고 이 요소들이 언제든 고장날 수 있다는 것을 염두해 둬야 한다는 것을 알면 좋겠습니다.