동시성(Concurrency)은 하나의 머신에서 동작한다. 주로 같은 메모리 공간을 갖는 멀티 쓰레드를 활용하기 때문에 공유 메모리 동시성(shared-memory concurrency)를 말한다. 이때는 데이터를 다른 쓰레드와 쉽게 공유할 수 있다.

분산 시스템에서는 다르다. 여전히 동시에 일어나긴 하지만, 프로그램이 병렬적으로 여러 대의 머신에서 동작하기 때문에, 공유하는 메모리 공간이 없다. 서로 다른 머신(컴퓨터)은 오직 네트워크를 통한 메시지를 주고 받아서만 통신할 수 있다.

분산 시스템에서 각각의 머신(컴퓨터)는 노드(node)라고 부른다. 여기서 머신(컴퓨터)은 아주 광범위한데, 데스크탑, 서버, 모바일 기기, 자동차, 센서 등을 모두 포함한다. 통신할 수 있는 모든 기기를 노드라고 하자.

저명한 Leslie Lamport는 분산 시스템을 아래와 같이 정의했다:

… a system in which the failure of a computer you didn’t even know existed can render your own computer unusable – Leslie Lamport

분산 시스템이란?

왜 만드는 걸까?

분산 시스템 같은 걸 대체 왜 만드는 걸까?

어떤 프로그램은 본질적으로 분산되어 있다. 모바일 기기 사이에서 문자를 전송하는 일은, 본질적으로 분산 시스템이다.

또 어떤 프로그램은 사실 머신 한대로도 할 수 있지만 더 좋은 신뢰성(reliability)을 위해서 분산되기도 한다. 시스템 안의 노드 하나가 죽어도(failure), 시스템 전체는 여전히 동작하도록 설계할 수 있다.

또 다른 이유로는 더 좋은 성능(performance)을 위한 것도 있다. 전 세계에 사용자가 어떤 서비스를 이용하는데, 만약 하나의 노드로만 서비스가 제공된다면, (빛이 끔찍하게 느리기 때문에) 끔찍한 성능을 낼 것이다.

마지막으로, 아주 큰 (large-scale) 데이터 처리나 연산 작업을 하고 싶은데 단순히 머신 한대에서 처리하기에 너무 큰 경우에도 분산 시스템은 필연적이다. 예를 들면 CERN 의 Large Hadron Collider의 연산에는 백만 개의 CPU와 1 엑사바이트의 저장 공간이 필요하다. 머신 한대로는 할 수 없다.

정리하자면, 분산 시스템을 만드는 이유는 다음 네 가지로 요약할 수 있다.

  1. 본질적으로 분산 시스템
  2. 더 좋은 신뢰성을 위해
  3. 더 좋은 성능을 위해
  4. 아주 큰 문제를 풀기 위해

하지만 모든 일은 잘못될 수 있고 시스템은 이런 잘못을 처리해야 하기 때문에, 분산 시스템에도 단점은 존재한다.

가장 먼저 네트워크가 부러질 수 있다. 이러면 노드끼리 통신을 못한다.

노드가 죽거나(crash), 평소랑 달리 엄청나게 느리게 동작하거나, 소프트웨어 버그 또는 하드웨어 오류로 이상하게 동작할 수도 있다. 이 모든 걸 죽는(crash) 걸로 퉁친다면, 어떤 노드가 죽는지 감시하면 되지 않을까? 라고 생각할 수 있지만, 이것조차 쉽지 않다. 노드나 네트워크는 아무런 경고도 없이 죽는다.

단일 머신에서 어떤 작업을 하는 도중에 머신의 일부(예를 들어 RAM)가 망가지면, 보통은 그 작업이 계속될 거라고 예상하지 않는다. 그냥 죽을 것이다. 하지만 분산 시스템에서는 보통 시스템의 일부가 부러져도 나머지는 계속해서 동작하길 기대한다. 예를 들면 노드 하나가 죽으면 (부분 고장; partial failure), 나머지 노드들은 여전히 서비스를 지탱할 수 있다.

시스템의 일부가 동작을 멈추는 것을 고장(fault)이라고 하고 많은

Last Update: 2023-01-25 11:46:55 PM