인터넷이 웹 서비스를 하는 데 있어서 웹에 있는 모든 웹 서비스를 하나의 시스템에 집어넣는 것은 현실적이지 못한다. 왜냐면, 다른 나라에 있는 유저들은 항상 굉장히 먼 거리를 통해 집중화된 네트워크에 접근해야 하기 때문에 네트워크 병목현상이 일어난다. 뿐만 아니라 모든 웹 서비스가 한 곳에 있다고 하면, 동시 접속하는 과정에 네트워크뿐만 아니라 그 집중화된 시스템에서 이뤄지는 서비스에 대한 요청이 모든 컴퓨터에서 잘 이뤄지지 않을 것이다. 이러한 문제점을 보면서 우리는 "분산 및 병렬처리의 필요성"을 느낄 수 있다.
분산이란?
A collection of autonomous computer(computing elements) that appears to its users as a single computer.
하드웨어 핵심 / 소프트웨어 핵심
유저들에게는 "하나의 컴퓨터"처럼 느껴지도록 해야 한다. 하지만 실제로 우리가 이를 구성하는 하드웨어는 컴퓨터들의 집합체로 묶여 있기 때문에 이 갭을 메우기 위해서 두 가지 시스템 구성 방법을 배울 것이다.
1) 동질형(Homo geneous) 분산 시스템 : OS(운영체제) 시스템이 동일 O
2) 이질형(Hetero geneous) 분산 시스템 : OS(운영체제) 시스템이 동일 X
위의 그림과 같은 시스템이 존재할 때, 우리는 OS의 윗단, 즉 middleware에서 분산 시스템 기능을 구현하는 것이 이질형 분산 시스템이다. 동질형 분산 시스템은 하나의 Local OS에서 분산 시스템 기능을 운영하는 것이기 때문에 쉽게 생각할 수 있을 것이다.
분산 시스템을 설계할 때의 고려사항
① Transparency : 투명성
② Scalability : 확장성
③ Concurrency : 동시성
④ Failure Handling
1. Transparency(투명성)
: Every user's and application's view of a distributed system : A single computer system
>> 컴퓨터 동작의 하부가 복잡하더라도 user입장에서는 single computer system으로 제공할 수 있는 것
다른 말로 'Single System Image'라도 한다. 어떤 시스템을 통해 접근하더라도 똑같은 인터페이스를 제공하는 것인데, 투명성을 극대화 시키면 유저들이 쉽게 접근할 수 있지만, 전체적인 성능이 떨어진다. 이유는 관리를 위한 management에서 성능적인 overhead가 많아지기 때문이다. 따라서 사용자에 따라 유리하게 투명성을 제공해야한다.
(투명성의 단계)
- End user(일반 단말기 사용자)의 경우에는 투명성을 극대화 시켜야한다. // performance가 낮아질 수 있음.
- Application Developer의 경우에는 기본지식이 바탕이 되어있다고 판단하고, 3단계로 투명성 정도를 달리한다.
- SW Developer의 경우에는 하부의 시스템 소프트웨어를 접근하여 활용할 수 있는 수준으로 본다.
(투명성의 요소)
- Access : 컴퓨터마다 데이터 표현과 자원 접근 방법이 다르지만, 이러한 다른 점을 인터페이스 상에서는 동일하도록 맞춘다.
- Location : www.naver.ac.kr에서 물리적 적 위치가 어딨는지 알 수 있을까? 없다.
- Migration : 자원이 이주하더라도 물리적 위치를 사용하는 등의 방법으로 해당하는 자원에 접근할 수 있다.
- Relocation : 자원을 이주하는 동안에 접근 block이 이뤄지지만, 정상적으로 접근이 이뤄져야 한다.
- Replication : 똑같은 copy본을 가지고 여러 machine에 수행할 수 있도록 한다.
- Concurrency : 한 사용자 혹은 여러 사용자가 자원에 접근할지라도 성능적인 일관성을 유지해야 한다.
- Failure : 사용자가 내부에서 고장이 발생되더라도 이를 몰라야 하며, 해당된 자원이 이전 상태로 복원될 수 있어야 한다.
2. Scalability(확장성)
: A system is scalable if it operate effectively at many different scales.
>> 하나의 프로젝트에 10명이 투입되면, 10명이 투입된 생산성을 발휘될 수 있다. 하지만 그러한 생산성이 이뤄지지 않았을 경우에 확장성이 이뤄지지 않았다고 말한다. 이때 우리는 흔히 '확장(scale)'이라고 하면, 규모가 점점 커지고 효율성이 증대되는 걸 의미한다고 생각하지만, 만약 애플리케이션의 user 수가 떨어지면 규모를 축소하여 작은 규모로 효율적이게 사용할 수 있도록 축소시키는 것도 '확장성'으로 생각할 수 있다.
(확장성을 저해시키는 요인)
- Centralized Service
: 집중화된 서비스, 여러 대의 machine에다가 트래픽을 분산시킨다. // DNS 예시
- Centralized Data
: 하나의 machine의 데이터베이스에 특정 데이터만 담아둘 경우, 해당 자원을 이용할 때 하나의 데이터 베이스에
몰리게 된다. copy본들을 다양한 machine의 데이터베이스에 두도록 하여 각 machine마다 local storage에 접근하여
정보를 제공할 수 있도록 해야 한다.
- Centralized Algorithms
: Doing routing based on complete cinformation
각 라우터가 라우팅 테이블을 통해 out going link 중에서 해당 주소를 찾아간다. 완전한 라우팅 테이블을 만든 후에
접근하는 것이 아닌 partial information을 통해 해당 주소를 찾아가는 방법을 사용한다.
(문제점)
- local 정보를 가지고 결정을 내린다.
- 하나의 machine의 붕괴에 의해서 알고리즘이 붕괴되면 안 된다.
- global clock이 존재하지 않는 가정 하에 시스템을 완성한다.
3. Concurrency(일관성)
- concurrenct execution
- parallel execution : 병렬 처리 즉, 수행할 수 있는 하드웨어가 여러 개가 있다는 것을 전제로 한다.
Concurrency(일관성)에서 발생할 수 있는 이슈
: 동일한 자원을 해당되는 task에서 접근하는 것을 serial execution이라고 한다. 만약 여러 개의 task를 가진 machine에서 연속적으로 접근한다면, task가 순서대로 하나씩 수행되므로 concurrency하게 작동할 필요가 없다. 하지만 만약에 동시에 접근하게 된다면 concurrency(일관성)을 유지시켜야 한다. 각 task들의 동시에 접근할 때, 각 자원들의 상태가 동일해야 한다.
4. Failure Handling
: 분산 시스템을 구성하는 일부 컴퓨터들이 고장 난다 하더라도 그 시스템이 계속해서 사용자에게 일관성 있는 컴퓨팅 서비스를 제공할 수 있도록 해야 한다.
어떻게 한결같은 서비스를 유지시킬 수 있을까?
A, B, C 서비스를 제공하는 machine a, b, c가 존재한다.
machine들 간에는 서로 살아있다는 heartbeat 메시지를 보낸다. 하지만 일정 주기 동안 machine A에 대한 heartbeat 메세지를 받지 못한다면, machine B, C는 본인이 수행하는 task들에 추가적으로 A가 가지고 있는 task를 수행한다. 이러한 과정으로 user 입장에서는 조금 느려질지라도, 서비스는 지속되도록 해야 한다.
'학교 공부 > 분산 및 병렬처리' 카테고리의 다른 글
[분산 및 병렬처리 시스템] Adaptive Software (0) | 2020.10.09 |
---|---|
[분산 및 병렬처리 시스템] 시스템 아키텍쳐 - Hybrid Architecture (0) | 2020.10.09 |
[분산 및 병렬처리 시스템] 시스템 아키텍쳐 - Centralized, Decentralized Architecture (0) | 2020.10.08 |
[분산 및 병렬처리 시스템] 분산 시스템의 소프트웨어 아키텍쳐 (0) | 2020.10.07 |
[분산 및 병렬처리 시스템] 분산 시스템이란? (0) | 2020.10.07 |
댓글