1 minute read

분산 시스템 위에서 동작하는 소프트웨어와 단일 시스템에서 동작하는 소프트웨어는 근본적으로 동작과 오류의 양상이 다르다. 신뢰할 수 없는 네트워크, 시각과 타이밍 문제 등이 대표적인 분산 시스템에서 겪을 수 있는 이슈다.

오류와 부분 실패

단일 시스템은 완전히 동작하거나 혹은 완전히 고장난 둘 중 하나로 귀결된다. 이러한 컴퓨터의 동작은 의도적인 설계된 것이다. 왜냐하면, 수학적으로 완벽한 계산을 하는 CPU의 연산이 필요하기 때문에, 데이터가 부분적으로 결함이 있지 않도록 하기 위해서다.

여러 컴퓨터에서 동작하는 소프트웨어는 네트워크를 통해 서로 연결되므로 현실세계의 댜양한 문제들과 부딪히게 된다. 일부분이 제대로 동작하더라도 일부분의 시스템 때문에 예측불가능한 문제를 야기할 수 있다. 이러한 비결정적(nondeterministic)인 문제를 부분 실패(partial failure)라고 한다.

클라우드 컴퓨팅과 슈퍼 컴퓨팅

거대한 스케일의 컴퓨팅 시스템에는 두 종류가 있다.

  • 고성능 슈퍼 컴퓨터: 수 천개의 CPU 연산을 통해 과학 연구의 정밀도에 쓰인다.
  • 클라우드 컴퓨터: 일반 상업용 컴퓨터 IP 네트워크로 연결되어 멀티-테넌트 데이터센터를 구성한다. 자원이 필요할 때 유연하게 할당할 수 있다.

두 시스템이 오류를 다루는 방식은 다르다.

슈퍼 컴퓨터는 영구 스토리지에 연산의 상태를 저장해둔다. 일부 노드가 실패하면 전체 시스템을 멈추고, 이전에 저장해둔 상태부터 다시 전체 시스템을 구동한다.

클라우드 컴퓨터의 특징을 슈퍼 컴퓨터와 비교해보면,

  • 애플리케이션이 온라인이다. 모든 노드가 낮은 레이턴시를 보장해야 한다.
  • 슈퍼컴퓨터의 특별한 하드웨어와 다르게, 클라우드 서비스는 일반 컴퓨터에서 구동되므로, 높은 실패 확률을 갖는다.
  • 거대 데이터 센터는 IP, Eternet 기반의 네트워크에서 동작한다. 슈퍼 컴퓨터는 고성능 작업에 유리한 커뮤니케이션 패턴을 갖는다.
  • 시스템이 커질 수록 노드 중 하나가 실패할 확률이 높아진다. 수천개의 노드로 구성되는 시스템은 항상 고장난 상태임을 가정하는 것이 이상적이다.
  • 슈퍼컴퓨터는 지리적으로 가깝게 노드를 배치한다. 클라우드 컴퓨터는 유저와 지리적으로 가깝게 배치한다.

신뢰성 없는 네트워크

여러 대의 컴퓨터 머신들이 네트워크를 매개로 연결된 분산 시스템을 shared-nothing 시스템이라고 한다.

인터넷 또는 내부 네트워크 기반의 데이터센터는 비동기 패킷 네트워크다. 비동기 네트워크의 문제점은 다음과 같다.

  • 네트워크 케이블이 플러그되지 않은 경우처럼, 요청 패킷이 유실될 수 있다.
  • 수신 노드의 과부하로 인해 요청이 늦게 도착할 수 있다.
  • 수신 노드가 다운될 수 있다.
  • 수신 노드가 요청을 처리했지만, 응답이 네트워크 상에서 유실 될 수 있다.
  • 수신 노드가 요청을 처리했지만, 응답이 지연될 수 있다.

이러한 문제점들의 일반적인 해결책은 타임아웃이다. 요청 패킷을 보내고 응답이 잘 도착할 때 까지 경과시간을 두는 것이다. 하지만, 응답패킷이 정상적으로 응답지에서 출발했지만 네트워크를 흐르는 중간에 위치한 대기 큐에 들어가 있다면 타임아웃도 여전히 문제가 된다.