본문 바로가기

Distributed System/이론 공부

(22)
Middleware Protocol과 Communication Types of Communication 우리가 지금까지 생각했었던 컴퓨터 통신은 메세지를 보내고 받는 것이다. TCP나 UDP를 가지고 소켓 프로그래밍을 해봤으면 이런 방식을 사용해 봤을 것이다. 커뮤니케이션 타입을 보면 애플리케이션 레이어 입장에서 메세지를 주고 받는 방식이 단순히 tcp, udp를 사용하는 방식만 있는게 아니다. 우리가 매일 사용하고 있는 애플리케이션의 커뮤니케이션 방식은 사실은 다 다르다. 세부적으로 따져보면 커뮤니케이션 타입을 나눌 수 있고 기준에 따라 다음과 같이 나눌 수 있다. Persistent vs. transient communication Synchronous vs. asynchronous communication Discrete vs. streaming communi..
Middleware Protocol Middleware 애플리케이션과 OS 사이에 존재하면서 분산 시스템에서 중요한 역할을 한다. 분산시스템의 기본 목적이었던 distribution transparency와 같은 것들을 제공해 줄 수 있는 이유가 미들웨어가 가려주기 때문이다. 애플리케이션에게는 노출하고 싶은 부분만 노출하고 밑단에서 일어나는 것들은 미들웨어 레이어에서 숨겨준다는 것이다. Layered protocol 입장에서는 분산 시스템 역할을 수행하기 위해 미들웨어 레이어가 들어갈 수 도 있다. 미들웨어 프로토콜은 통신을 이용해야 하므로 애플리케이션과 전송 계층 사이에 위치해야 한다. 미들웨어를 사용하는 애플리케이션은 이제 TCP, UDP를 직접 사용하는 것이 아니고 미들웨어를 통해 통신을 하고 분산 시스템 서비스를 이용할 수 있게 된..
분산시스템) 커뮤니케이션 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의 장점 애플리케이션을 개발하는 것이 수월해진다. 모든 것을 애플리케이션이 개발할 필요 없고 미들웨어에서 제공하는 서비스는 요청해서 쓰면된다. 프로그래밍할 때 라이브러리를 사용하는 것과 같다. 개..