본문 바로가기

분류 전체보기

(67)
분산시스템) 서버 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..
분산시스템) 아키텍쳐 Architectures 분산 시스템을 구성하는 서버와 클라이언트 측의 아키텍처를 디자인 할 때 어떤 부분을 고려해야하는지 살펴보자. 아키텍쳐라는 것은 주로 하드웨어는 있다고 치고 이 분산 시스템을 구성하는 소프트웨어 컴포넌트들을 어떻게 구성해야할지에 대한 문제이다. 설계하려는 시스템의 소프트웨어가 어떤 구조를 가질지 설계하고 실제 설계한 내용을 개발해서 구체화하면 그게 시스템 아키텍쳐이다. Goals of Distributed System and Architectures 이번 포스트에서 다루는 system architecture나 software architecture, 그냥 architecture 모두 software component들 사이의 관계를 어떻게 구성할건지에 대한 문제이다. 특히 일반 시..
분산시스템) 분산시스템 종류 및 Pitfalls Types of distributed systems 1) Distributed computing systems 컴퓨팅 파워를 필요로하는 서비스를 요청할 때 사용할 수 있다. 주로 공학 시뮬레이션과 같이 계산량이 많은 task를 대신 수행해주는 시스템이다. 2) Distributed information systems 우리가 주로 아는 분산 시스템은 이 부류에 들어간다. 정보를 제공해주는 시스템이다. 정보는 여러가지가 있을 수 있다. WWW나 게임도 이 부류에 들어간다. 3) Distributed pervasive systems 가장 마지막에 나온 것이다. 무선 네트워크 기능이 활성화되고 컴퓨팅 디바이스의 크기가 작아지면서 등장하였다. 분산 시스템을 제공하는 환경이 다이나믹한 환경에서 제공된다는 것이다. ..
분산시스템) 목표(4) - Scalability Goals - Scalability 가장 중요한 목적 중 하나이다. 분산 시스템은 리소스가 서로 다 흩어져있는 상황에서 많은 사용자를 서포트할 수 있으면 좋은 시스템이다. Measurement of scalability scalability는 세 가지 측면이 있다. 세 가지 모두에서 scalable한 시스템은 좋은 시스템이지만 그렇게 되기 쉽지 않다. 보통 세 가지 중 두 가지 정도에서 scalable한 시스템을 만든다. 1) Size 여기서 규모는 사용자 수 즉 사용자 규모 측면과 분산 시스템 컴포넌트 측면에서의 규모에 대한 scalability를 말한다. 많은 수의 컴포넌트로 구성하면 규모있는 분산시스템이 된다. 결국 같은 이야기다. 많은 수의 사용자를 감당하려면 많은 수의 컴포넌트가 필요하다. 분산..