본문 바로가기

Distributed System/이론 공부

분산시스템) Introduction

분산시스템이란?

협동 분산 시스템인 이유는 분산된 리소스들이 협력하여 데이터를 관리하고 사용자에게 서비스를 제공한다. 경쟁 관계도 있지만 대부분은 협력 관계에 있다.

두 가지 기술적 이점

1980년대 중반 정도에 두 가지 큰 기술적 발전이 있었고 이를 계기로 분산 시스템이 대두되었다.

  • Powerful microprocessors: 컴퓨터의 계산 능력 발전
  • High-speed computer networks: 컴퓨터 네트워크 기술 발전

분산 시스템의 정의

  • A distributed system is a collection of independent computers that appears to its users as a single coherent system

분산 시스템은 독립적인(independent) 여러 대의 컴퓨터가 모여있고, 사용자 입장에서는 그 컴퓨터 집합이 하나 처럼 인식되는 것이다. 대표적인 예는 웹(WWW)이다. 그 다음으로 요새 많이 쓰이는 예는 클라우드 서비스이다. 드랍박스를 예로 들어보면, 사용자는 스토리지를 사용하고 싶어하고 그 스토리지는 사용자의 로컬 컴퓨터에서 제공되는 것이 아니고 어딘가에 자료를 저장해주는 서버가 존재한다. 그 서버는 한 개가 아니고 여러개의 집합체이지만 사용자는 데이터를 드랍박스의 폴더 안에 넣으면서 서버가 어디에 있고 몇 대가 있는지 궁금해하지 않는다. 그저 로컬 스토리지처럼 사용한다.

분산 시스템의 특징

분산 시스템의 주요한 특징 두 가지는 다음과 같다.

  • 분산 시스템은 자율적(autonomous)으로 돌아가는 컴포넌트(components) 즉 컴퓨터들로 구성된다.
  • 사용자(사람 또는 프로그램)는 하나의 커다란 시스템이 돌아간다고 느낀다. 여기서 autonomous는 위의 independet와 연결된다. 그렇다면 *autonomous하지 않은 컴퓨터도 있나?* 컴퓨터처럼 full functionality를 제공하지 않고 일부 기능만 제공되는 디바이스가 있다. 대표적인 예는 라우터이다. 라우터는 인터넷을 구성하는 컴포넌트 중 한 컴퓨터가 보내는 메세지를 목적지 컴퓨터까지 전달할 때 거쳐가는 기기이다. 라우터는 패킷을 목적지로 라우팅 해주기 위해서 패킷을 어느쪽 패스(path)로 건내줘야 하는지에 대한 자체 알고리즘을 가지고 있지만 컴퓨터의 모든 기능을 가지고 있지는 않다. 또 다른 질문은 *WWW는 분산 시스템인데 컴퓨터 네트워크는 분산 시스템인가?* 컴퓨터 네트워크를 구성하는 모든 컴퓨터가 independent 하지는 않다. 특히 라우터나 센서 같은 경우.

투명성(Transparency)

  • Differences between the various computers and the ways in which they communicate are mostly hidden from users

모든 분산 시스템이 그러한 것은 아니지만 분산 시스템은 기본적으로 사용자로 하여금 우리가 제공하는 서비스를 위해서 리소스가 다 흩어져있고 커뮤니케이션이 필요하다는 사실을 알지 못하게 한다. 사용자 입장에서는 모르는 것이 더 서비스를 편하게 이용할 수 있다.

개방성(Openness)

  • Users and applications can interact with a distributed system in a consistent and uniform way regardless of where and when interaction takes place

사용자 입장에서 분산 시스템에 서비스를 요청하고 제공받는 인터렉션을 할 때 일관적이고 획일적인 방법으로 이뤄지도록 한다. 상황에 따라 요청하고 받는 방법이 달라질 수 있다. 분산 시스템은 여러 대의 컴퓨터로 이뤄지므로 어느 한 쪽으로 연결될 때에는 A라는 방법을 쓰고 다른 한 쪽으로 연결될 때에는 B라는 방법을 사용해야 할 수도 있다. 이 때마다 사용자에게 다른 방식으로 제공된다고 한다면 좋은 디자인이라 할 수 없다. 분산 시스템의 컴포넌트들은 헤테로지니어스(heterogeneous)한 컴포넌트로 이루어지더라도 안의 구성이 어떻든 사용자 입장에서는 동일한 방법으로 서비스를 요청하고 동일한 방법으로 서비스를 제공 받을 수 있어야 한다. 방법 뿐만 아니고 그러한 인터렉션이 어느 장소에서, 어느 때에 이뤄지든 동일하게 서비스를 요청하고 제공받을 수 있으면 좋은 시스템이라 말할 수 있다.

확장 용이성(Scalability)

  • Distributed systems should be relatively easy to expand or
    • Having independent computers,
    • At the same time, hiding how these computers actually take part in the system as a whole

개발 입장에서 분산 시스템은 확장이 용이해야한다. 이 분야에서 가장 큰 화두는 scalability를 어떻게 서포트할까이다. 분산 시스템을 어떻게 확장성 있는 시스템으로 구축을 할까와 동일한 말이다. 확장성있는 분산 시스템이다 라는 의미는 필요한 경우에 스케일이 가능해야한다는 것이다. 리소스를 추가할 때 사용자의 서비스를 중단하지 않고 동시에 이뤄질 수 있어야 확장이 용이하다고 할 수 있다.

장애 허용(Fault-tolerant)

  • A distributed system will be normally continuously available – Although some parts may be temporarily out of order

분산 시스템은 끊김없이 이용가능해야 한다. 분산 시스템 컴포넌트 중 일부가 고장이 나는 등 장애가 발생하는 경우에도 전체적인 서비스는 사용자에게 끊김 없이 잘 제공해 줄 수 있으면 좋은 서비스다.