본문 바로가기

Distributed System/이론 공부

분산시스템) 목표(2) - Distribution transparency

Goals - Distribution transparency

정의

  • 사용자로 하여금 이 시스템이 커다란 하나의 시스템이라고 느끼게 해야 한다.

사용자로 하여금 리소스가 분산되어 있다는 사실을 가능하면 숨기고자 한다. 그 이유는 사용자가 분산 시스템의 존재 자체를 인식하지 않고 서비스를 편하게 이용하도록 하기 위해서이다.


숨김(transparent)이 보장되는 시스템은 사용자에게 그 사용자가 사용하는 애플리케이션이 마치 하나의 컴퓨터 시스템에서 제공하는 서비스를 이용한다는 느낌을 주는 게 가장 이상적이다. 사용자는 로컬에서 사용하고 있다고 느끼는 게 가장 이상적이라고 볼 수 있다.

종류

Transparency Description
Access Hide differences in data representation and how a resource is accessed
Location Hide where a resource is located
Migration Hide that a resource may move to another location
Relocation Hide that a resource may be moved to another location while in use
Replication Hide that a resource is replicated
Concurrency Hide that a resource may be shared by several competitive users
Failure Hide the failure and recovery of a resource

transparency는 항목별로 여러 종류가 있다. 각각의 transparency가 무얼 의미하는지 다음에서 설명한다.

Access transparency

데이터의 형태나 구성 방식이 달라지더라도 사용자 입장에서 그 데이터를 동일한 방식으로 쓸 수 있으면(access 할 수 있으면) Access transparency 하다.


분산 시스템에서 리소스가 사용자에게 데이터를 제공해주는 것이라 한다면, 그 리소스가 위치해 있는 물리적인 컴퓨터의 종류에 따라 데이터의 구성 방식이나 접근 방식이 다를 수 있다. 대표적인 예로는 파일이 있다. 파일은 파일의 표현(representation) 방식이나 관리하는 방식이 OS에 따라 다르다. 그럼에도 사용자 입장에서 그 데이터를 동일한 방식으로 접근할 수 있으면 Access Transparency가 제공된다고 본다. 접근(access)하는 방식을 동일하게 유지한다는 의미이다.


비슷한 예로는 드롭박스가 있다. 드롭박스에 저장된 ppt file을 윈도우에서 작업하다가 다음날 맥에서 작업하려고 파일을 열었을 때 아무 문제없이 열린다. 이는 드롭박스에서 Access transparency를 제공하여 OS에 상관없이 액세스 하는 방법이 동일하기 때문이다.

 


 

[리소스의 위치와 관련된 transparency]
리소스의 서버단의 위치가 어디에 있는지, 리소스가 이동이 되었는지 등 서비스를 제공해주는 서버 관리 측면에서는 리소스를 한 곳에 두는 것이 아니고 경우에 따라서는 컴포넌트에 따라 이동시키거나 복사해서 두기도 한다.

Location transparency

리소스가 어디에서 제공되는 것인지 숨기는 것을 말한다. 사용하고 있는 리소스의 물리적인 위치가 어디에 있는지는 사용자가 알지 못해도 된다.


예로 URL이 있다. URL을 통해 웹 환경에서 웹 도큐먼트를 웹 서버로부터 불러서 쓸 때, 해당 리소스가 물리적으로 어느 위치에 있는지 신경 쓰지 않아도 된다. www.konkuk.ac.kr에서 건국(konkuk), 대학(ac:academy), 대한민국(kr: korea)를 통해 논리적 위치를 파악할 수 있지만 논리적 위치가 항상 물리적 위치와 일치되는 것은 아니다.

Migration transparency

리소스가 제공되는 위치가 지난번과 달라졌는지(리소스의 이동 여부)를 숨기는 것이다. 오늘은 이 리소스가 서울에서 제공되더라도 고장이나 여러 이유로 내일은 미국에서 제공될 수도 있다. 리소스가 이동(migration)되었다는 사실을 사용자가 느끼지 못한다면 Migration transparency가 제공된다고 볼 수 있다.

Relocation transparency

리소스가 제공되는 위치가 사용 중인 동안에 달라졌는지 여부를 숨기는 것인데, Migration과 다른 점은 Relocation은 해당 리소스를 사용중인 동안에 위치가 변경될 때를 나타낸다는 것이다.


예로는 모바일 디바이스를 사용하는 유저가 유튜브 같은 것을 보며 걷고 있었다고 가정해보자. 걸어가는 동안에는 유저와 가까운 곳에 있는 무선 네트워크 리소스를 이용한다. 어느 정도 거리가 되는 순간 현재 쓰고 있던 액세스 포인터는 연결을 못하고 다른 액세스 포인터에 연결이 되어야 한다. 액세스 포인터가 변경됐음에도 끊김 없이 리소스를 이용할 수 있다면 Relocation transparency가 제공된다고 볼 수 있다. 해당 예시는 분산 시스템 중에서도 로우 레벨에 해당하지만 어찌 됐든 리소스가 제공되는 위치가 변경되는 상황을 가정한 것이다.

 

난이도로 보자면 Location < Migration < Relocation 순이다.

 


Replication transparency

Replication은 복제한다는 의미다. Replication은 분산 시스템에서 사용자에게 좋은 서비스를 제공해주기 위해 자주 사용하는 기법 중 하나이다. Replication은 리소스의 가용성(availability)을 향상하기 위해 사용된다. 가용성에 대해 예를 들면, A라는 영화 파일이 있는데 A라는 파일이 인기 있는 파일이라서 많은 사용자가 필요로 하는 파일이다. 그 전에는 인기가 없었지만 A라는 파일을 요구하는 사용자가 점점 많아지는 상황이라고 가정해보자. 전 세계의 사용자들이 한국 쪽 서버에 리퀘스트가 다 몰려서 서버에 부하가 많이 걸릴 것이다. 이를 해결하기 위해 한 곳에 몰리는 서버의 부하를 분산시켜야 한다. 이를 위해 같은 서비스를 여러 서버에서 해줘야 한다. A라는 파일을 미국, 일본 등의 서버에도 복제해두는 것이다.


어느 한 리소스를 요청하는 사용자가 많으면 해당 리소스를 복사해서 여러 서버에서 제공하면 좋다. 이때 사용자는 리소스가 복제된 사실을 모르면 Replication transparency이 제공되었다고 본다.

Concurrency trancparency

Concurrency는 동시성을 의미하며 Concurrency transparency는 동시에 이루어진다는 사실을 숨긴다는 의미이다. 어느 한 리소스를 사용 중인데 동시에 다른 사용자가 해당 리소스를 필요로 할 수 있다. 이런 식으로 공유되는 리소스에 대해 사용자는 공유된다는 사실을 인지하지 못하면 Concurrency trancparency가 제공되었다고 본다.


예를 들어 서로 다른 두 사용자가 분산 시스템 서비스 중 스토리지를 이용한다고 가정해보자. 두 사용자가 같은 스토리지를 사용하고 있었지만 이를 인지하지 못한다면 가 Concurrency trancparency가 제공된 것이다.


Concurrency transparency는 분산 시스템에서 주요한 이슈 중 하나이다. 두 사용자가 read만 한다면 지켜지기 쉽겠지만 어떤 파일을 수정 중인데 그 파일을 다른 사용자가 액세스 하면 conflict문제가 생길 수 있다. 이때엔 transparency와 별개로 concurrency 제어를 해야 한다.

Failure transparency

실패가 발생했다는 사실을 사용자에게 숨기는 것이다. 분산 시스템 서버의 컴퓨터 중 일부가 고장 났을 때 사용자에게 제공하던 서비스를 계속 제공해주면서 실패가 발생했다는 사실을 숨길 수 있으면 Failure transparency 하다고 말한다. 이러한 시스템을 fault tolerant system이라 한다. 고장이 나더라도 버틸 수 있다는 의미이다. 방법으로는 back-up server를 두거나 할 수 있다.

Degree of transparency

숨기는 것이 모든 상황에서 좋은 것은 아니다.

어떤 사용자가 전자신문을 사용자에게 이메일로 매일 오전 7시에 전달해주는 서비스를 이용한다고 가정해보자. 사용자는 서비스를 요청한 서버가 어디 있는지 신경 쓰지 않고 이 사용자의 서버는 한국에 고정되어 있다. 이 사용자가 미국으로 출장을 갔는데 미국에도 서버가 있지만 한국 시간에 맞춰 오전 7시에 메일이 온다. 사용자는 원하는 시간에 메일을 받지 못해 불편을 초래하게 된다. 이런 경우 사용자에게 서버 위치를 노출시켜 사용자 위치가 바뀐다는 정보를 서비스에 요청할 수 있도록 해야 한다. 사실 좋은 서비스는 알아서 탐지해서 자동으로 어댑테이션을 해주는 것이다.

숨기려 해도 아예 숨길 수 없는 상황도 있다.

미국 샌프란시스코에서 네덜란드 암스테르담으로 데이터를 요청했다고 가정해보자. 아무리 빨리 보내도 35ms이내로 보낼 수 없다. 이때에는 떨어져있다는 사실을 숨기고 싶어도 숨길 수 없다.

transparency와 성능(performance)은 Trade-off 관계에 있다.

서버에 연결이 다 된 후에 다음 작업을 할 수 있는 인터넷 애플리케이션이 있다고 가정해보자. 클라이언트 프로그램이 내부적으로 서버 연결에 실패해서 반복적으로 다른 서버에 연결을 시도하는 상황이다. 이 때 사용자는 그 사실을 모른다. 성능 측면에서 오히려 앱 클라이언트가 어느 정도 커넥트에 실패했으면 시도하는 걸 포기하고 사용자에게 에러 메시지를 보내는 게 나을 수 있다.


다른 예시로 여러 프린터가 있다고 가정해보자. 사용자가 프린트 요청을 했을 때 프린터의 위치는 고려하지 않고 당장 바쁘지 않은 프린터에게 job을 맡긴다. 이럴 경우 location transparency가 제공되는 건데 사용자는 한국에 있는데 미국에 있는 프린터에서 job을 맡을 수 도 있다. 이때는 사용자에게 어디에 어떤 프린트가 있다고 노출시켜주는 게 더 좋다.