본문 바로가기

분산컴퓨팅

(19)
분산시스템) 커뮤니케이션 Communication Layered protocols shared memory와 같은 원격에의 메모리를 접근해서 쓰는 것이 없기 때문에 모든 통신은 low level로 메세지를 주고받는 것을 기반으로 해야한다. Agreement among communicating processes 통신을 주고받기 위해서 통신규약이 필요하다. 얼마나 센 전기신호를 1로 표시할지, 마지막 비트가 무엇인지 받는 곳은 어떻게 알지, 메세지가 손상되었는지 아닌지 받는 쪽에서는 어떻게 알지, 데이터 타입은 어떤것으로 할지 등을 정해야한다. OSI model 동의가 필요한 부분이 다양한 레벨에서 있다. 따라서 Open System Interconnection Reference model (OSI model)이 생겼다. 애플리케이..
분산시스템) 코드 마이그레이션 Code migration 더 크게 보면 process migration으로 볼 수 있다. 실행 중인 프로그램을 한 컴퓨터에서 다른 컴퓨터로 이동시키는 것이 좋을 때가 있다. 그때 이동을 어떤식으로 하는 것이 좋을까. 1. Reasons for migrating code Performance improvement 어떤 서버 프로세스가 어떤 머신에서 돌고 있었는데 해당 머신이 로드가 많이 걸린다고 가정해보자. 부하가 별로 없는 서버가 있다면 돌고 있는 프로세스를 해당 서버로 이동시키면 성능이 향상될 것이다. 분산 시스템에서 주로 성능 저하 문제가 발생하는 이유는 컴퓨팅 성능보다 통신 문제가 더 많다. 예를 들어 거대한 DB를 다루는 서버가 있다고 가정해보자. 디비 query를 요청하는 부분을 client에..
분산시스템) 서버 클러스터 Server clusters 서버들이 여러개가 있어서 클러스터로 구성되어 있는 것이다. 물리적으로 서버 랙같은 것이 있어서 판처럼 생긴 컴퓨터를 수평을 꽂고 초코속 로컬 랜으로 연결하여 구성해놓은 것이 서버 클러스터이다. 구성 First tier client로부터 요청을 받아들여서 전달해주는 스위치 역할을 해준다. 클라이언트의 요청을 다 받는 front역할을 한다. 클라이언트의 요청을 적절히 분배해주는 라우팅 역할을 한다. Second tier Second tier의 서버가 애플리케이션 서버로 클라이언트의 요청을 직접 처리하는 역할을 한다. Third tier 데이터베이스 서버라 생각하면 된다. Multiple services 서버 클러스터를 구성할 때 하나의 서비스보다 여러 서비스를 제공하는 경우가 많..
분산시스템) 서버 Server General design issues client의 경우 사용자 편의에 주안점을 둔다면 서버의 경우 서비스를 제공하는 입장이므로 performance가 주된 디자인 이슈가 된다. Organizing servers (1) Iterative server 서버 프로세스가 하나밖에 없어서 순차적으로 다 한다는 의미이다. single process. (2) Concurrent server 다중 스레드를 사용하여 concurrent 하게 task를 수행할 수 있도록 구성한다. iterative server보다 performance가 더 좋다. 멀티스레드나 fork를 통하여 새로운 프로세스 만들어서 할 수 있다. fork를 사용하는 대표적인 예는 UNIX systems이 있다. 메인 데몬 프로세스가 사..
분산시스템) 클라이언트 Client Networked user interfaces 클라이언트 머신의 주된 task는 UI를 제공하는 것이다. UI를 통하여 사용자가 원하는 서비스를 요청하면 사용자 대신 서버에게 요청하는 역할을 한다. 사용자가 서버와의 interaction을 할 수 있도록 해준다. Application specific protocol 클라이언트는 미들웨어를 통해 서버에게 서비스를 요청한다. (a)는 클라이언트 애플리케이션의 역할이 단순히 UI만 제공하는 것이 아니고 클라이언트 단에서의 어떤 프로세싱을 수행한다. 사용하는 애플리케이션의 종류에 따라 특성에 맞는 서비스를 직접 클라이언트 단에서 요청을 한다. 일반적으로 사용하는 소프트웨어가 이에 해당한다. 클라이언트와 서버 애플리케이션 사이에 애플리케이션마다 특화된..
분산시스템) 가상화 Virtualization CPU는 하나이지만 동시에 실행되고 있는 것 같은 환상을 주는 것으로 한 단계 더 확장시키면 자원을 가상화할 수 있다. 예를 들어 윈도우 머신으로 리눅스를 돌리고 싶으면 기본 OS나 하드웨어 플랫폼은 윈도우이지만 그 위에 리눅스의 역할을 흉내 낼 수 있는 가상 머신의 도움을 받아 가상으로 리눅스를 돌릴 수 있다. 1. 작동방식 어떤 애플리케이션인 프로그램이 있는데 특정 타겟 플랫폼을 목적으로 개발이 된다. 윈도우라면 윈도우용 개발 인터페이스를 이용해서 만들어진다. A라는 인터페이스를 이용해서 개발되었고 이 프로그램은 A라는 OS에서 돌아간다. 이것을 또 다른 시스템 B에서 돌아가게 하고 싶으면 B 인터페이스를 이용해서 다시 원래 프로그램 내용을 바꾸든지 해야 한다. 그러지 말고..
분산시스템) 프로세스와 스레드 Processes 이번 포스트에서는 분산 시스템에서 프로세스의 역할이 어떻게 될지, 원격지로 떨어져 있는 컴퓨터 사이에서 프로세스들 간의 관계를 어떻게 지어야 할지에 대한 설계를 고민해본다. Threads 로컬 컴퓨터에서 concurrent한 task가 동작될 수 있도록 해준다. 다중 스레드의 대표적인 예는 채팅 프로그램이다. 하나는 사용자가 입력하는 input을 기다리는 역할을 하는 스레드가 있고 상대가 보낸 데이터를 화면에 보여주는 역할을 하는 스레드가 필요하다. 따라서 두 개 이상의 스레드가 동시에 돌아가야 한다. 보통 프로그램을 작성할 때 task를 함수 단위로 작성한다. 프로세스와 cost를 비교해보면 스레드를 통해 concurrent 하게 돌리는 것이 context switching overh..
분산시스템) 시스템 아키텍쳐(3) - 미들웨어 Architectures vs Middleware 분산 시스템을 개발할 때 많은 경우 미들웨어 형태로 제공된다. 애플리케이션이 필요로하는 서비스를 미들웨어를 통해서 요청하면 된다. 코드 시스템도 일종의 미들웨어 역할을 하는 시스템이라 볼 수 있다. 애플리케이션이 요청만 하면 overlay 네트워크를 구성하고 데이터를 찾아주는 식의 P2P로 연결하는 서비스를 코드 시스템이 해준다. 노드들이 사용하는 미들웨어 아키텍쳐도 너무 정적으로 만들지 않고 다이나믹하게 adaptive하게 만드는 것이 좋다. Middleware의 장점 애플리케이션을 개발하는 것이 수월해진다. 모든 것을 애플리케이션이 개발할 필요 없고 미들웨어에서 제공하는 서비스는 요청해서 쓰면된다. 프로그래밍할 때 라이브러리를 사용하는 것과 같다. 개..
분산시스템) 시스템 아키텍쳐(2) - 비중앙 집중식 Decentralized architectures 중앙집중식 방식에서 중요한 것은 client-server 관점에서 컴포넌트를 어디에 둘지 수직적인 관점이었고 이와 반대로 수평적인 관점에서도 생각해 볼 수 있다. Decentralized architectures는 서버와 클라이언트의 구분이 없다. 모든 노드들이 동일한 기능을 수행한다. 따라서 client-server 대신 peer라는 용어를 사용한다. 소위 말하는 P2P 시스템이 Decentralized architectures이다. 장점 앞서 말했듯이 중앙집중식 방식은 single point of failure, bottleneck, 확장성 등의 문제가 있을 수 있다. 이를 해결하기 위해 나온 것이 Decentralized 방식이다. 한 지점이 문제가..
분산시스템) 시스템 아키텍쳐(1) - 중앙 집중식 System architectures 분산 시스템은 논리적으로 또는 물리적으로 어디에 위치해 있어야 하는지, 시스템 소프트웨어의 역할에 따라 시스템 아키텍쳐를 고려할 수 있다. 이는 크게 Centralized architectures와 Decentralized architectures 두 가지 경우로 고려해 볼 수 있다. 위의 아키텍쳐 스타일과 연관지어서 생각할 수도 있지만 별개로 생각해 볼 수 있어 다른 관점이라고 볼 수 있다. Centralized architectures 우리가 익히 알고있는 client-server 아키텍쳐이다. 클라이언트가 서비스를 서버에 request하면 서버는 reply하는 식으로 서비스를 이용한다.(Request-reply pattern) client는 일반적으로 reque..