분산시스템이 개발이 된 계기 : 컴퓨터의 계산능력과 컴퓨터의 네트워크가 발전하면서 분산시스템이 개발이 되었다.
분산시스템의 정의 : 독립적인 여러 개의 컴퓨터들의 집합이고 사용자의 입장에선 하나의 시스템으로 보이도록 하는 것
ex) web환경
분산시스템의 중요한 특징
- 분산시스템은 자율적인 구성품들로 이루어져 있다.
- 사용자가 생각하기에 하나의 시스템을 사용하는 것처럼 보임
분산시스템의 특징들
- 다른 컴퓨터들과의 차이점은 컴퓨터들이 분산되어 있다는 사실과 의사소통 한다는 사실이 사용자들에게 숨겨짐
- 사용자와 애플리케이션들이 분산시스템 안에서 동일한 방식으로 상호 작용함
- 분산시스템은 비교적 확장하기 용이해야 함
- 비록 일시적으로 장애가 발생하더라고 계속적으로 이용 가능해야 함
Middleware : os와 app사이에 위치한 소프트웨어
미들웨어의 특징 : 서로 os가 다르더라도 미들웨어의 도움을 받아서 상호작용이 가능하다. 즉, JAVA처럼 호환성이 좋다. 아쉬운 점은 중간에 계층이 하나 더 들어가기 때문에 느리다는 단점이 있다.
분산시스템의 목적
- 원격 리소스를 사용자에게 편하게 제공(Making resources accessible)
- 사용자가 요청한 서비스가 로컬에서 발생하는 거처럼 생각하도록 분산돼 있다는 사실을 숨긴다(Distribution Transparency)
- 서비스를 제공할 때 표준 룰에 따라서 서비스를 제공(Openness)
- 용량, 지리적, 관리적인 측면에서의 사이즈를 확대할 수 있어야 함(Scalability)
- Making resources accessible
목적 : 원격 리소스를 사용자가 쉽게 접근하도록 하기 위함
ex) 그룹웨어(Groupware): 여러 사용자가 리소스를 협동하면서 사용하는 것 다른 이름으론 CSCW(Computer Supported Cooperative Work)
- Distribution transparency
목적 : 컴퓨터들이 분산돼 있다는 사실을 사용자들에게 가능한 한 숨기자.
왜 숨길까? 사용자가 분산시스템의 존재를 인식하지 않고 서비스를 편하게 이용하게끔 해주기 위해
즉, 마치 로컬서비스를 이용하는 것처럼 분산시스템 서비스를 이용하고 있으면 투명성이 잘 제공된 서비스
Transparency | Description |
Access | 데이터의 형태나 구성방식이 달라지더라(heterogeneous)도 동일한 방법으로 사용할 수 있음 |
Location | 리소스가 어디에 있는지 숨긴다 |
Migration | 리소스가 다른위치로 이동한 사실을 숨긴다(사용중일때 불가능) |
Relocation | 리소스가 다른위치로 이동한 사실을 숨긴다(사용중일때도 가능) |
Replication | 리소스가 복사된 사실을 숨긴다 |
Concurrency | 같은 리소스를 여러 사용자가 동시에 쓰는것을 숨긴다 |
Failure | 고장이 난 사실을 사용자에게 숨긴다.(ex. 고장 감내 시스템) |
그럼 투명성을 유지하는 것이 항상 좋을까? 아니, 숨기기만 하는 것은 좋지 않을 수 있다. 또한 숨기고 싶어도 못 숨기는 경우도 있고 숨기는 것이 오히려 서비스의 질에 좋지 않은 영향을 미칠 수 있음 ex) 아침 신문,
투명성과 퍼포먼스는 서로 Trade-off 관계이다. 즉 투명성을 올리면 퍼포먼스는 떨어진다. ex) 프린터 요청
- Openness
목적 : 분산 서비스를 제공할때 표준 룰(ex. 표준 프로토콜 : 의사소통하기 위한 규칙)에 따라서 제공을 하기 위해
표준을 지키면 아래와 같은 측면에서 좋음
1. Interoperability(상호 운용성) : 두명의 개발자가 A라는 같은 서비스를 개발했는데 사용자는 개발자의 종류(회사)와 상관없이 상호 운용이 가능하다. (즉, 사용자는 어느 누구 것을 사용해도 상관없다.)
2. Portability(이식성) : 한쪽 개발자가 A를 개발을 했는데 이 서비스를 다른쪽으로 옮겨서 별다른 수정작업 없이 사용자에게 그대로 서비스 제공(ex. java처럼 윈도이든 리눅스 이든 어디든 상관없이 사용 가능)
separating policy(how) from mechanism(what)
flexibility(유연성)을 얻기위해서 작고 쉽게 대체가능하거나 적응가능한 구성품들로 이루어져야 한다.
많은 오래되거나 심지어 동시대의 시스템들은 하나의 monolithic(하나의 덩어리)한 접근으로 구성됨
-분산시스템에서 변화가 필요한 경우-
ex) caching(캐쉬) : 한번 방문했던 페이지를 로컬에 저장한다. 왜 사용? 로컬에 있는 페이지를 빠르게 접근하기 위해 즉, 퍼포먼스 향상을 위해
즉, flexibility를 제공하기 위해선 policy와 mechanism을 분리해야 한다. policy자체를 사용자가 개발해서 현재 mechanism에 플러그인 형태로 끼워 넣을 수 있도록 개발하면 더 flexibility 한 서비스를 제공할 수 있을 것이다.
- Scalability
확장성은 분산시스템의 목적에서 가장 중요한 목적 중 하나.
-size(규모) 측면의 확장성(기술적) : 더 많은 사용자와 더 많은 컴포넌트들을 제공해야 함
단점
1. Centralized services는 많은 수의 request가 한 곳에 몰리게 될 경우 bottleneck과 같은 현상이 발생
2. Centralized dara는 데이터가 한 서버에 다 모여있을 경우 고장이 발생하면 availability가 떨어짐. single point of failure
3. Centralized algorithm는 알고리즘을 돌리는 완전한 상태 정보(input data)가 한 곳에 다 모여있는 것
decentralized algorithm의 특징
1. 시스템 상태에 대한 완전한 정보를 가지고 있지 않다. 즉, 각각의 서버들이 그 서버의 상태만 가지고 알고리즘을 만듦
2. 자신의 로컬 정보만으로 알고리즘을 돌림
3. 하나의 서버가 고장이나도 모든 알고리즘에 영향이 가지 않는다. 다른 서버에서 돌리면 되기 때문
decentralized algorithms은 흩어져 있는 서버들의 시계가 서로 일치(동기화) 해야 한다.
centralized방식은 request reply패턴으로 관리하기 쉽고 더 안전하다
decentralized방식은 빠르게 쓸만한 데이터를 얻을 수 있다. 그러나 구현이 복잡하고 관리가 어렵다.
distributed방식은 뚫리기 쉬운 구조이고 추가적인 오버헤드가 필요
즉 전체적으로 보면 1,2번이 좋고 확장성 측면에서는 2,3번이 좋다.
optimal information를 원한다면 centralized
sub-optimal information(최적은 아니더라도 최적에 근접한 빠른 정보 찾기)를 원한다면 decentralized
-geography(지리적) 측면의 확장성(기술적)
단점
Synchronous 커뮤니케이션과 신뢰도 없는 point-to-point커뮤니케이션을 이용할 때 딜레이가 커질 수 있음
Synchronous(동기식) 커뮤니케이션 : request reply 패턴(내가 요청하고 응답이 올 때까지 기다려야 함)
반면에 Asynchronous(비동기식) 커뮤니케이션은 기다리지 않고 다른 행동을 할 수 있음
-administration(관리적) 측면의 확장성
단점
하나의 분산시스템을 여러 조직에서 관리하기 때문에 보안측면에서 강화가 필요(악의적인 사용자가 있을 수 있음)
※ 위와 같은 기술적 문제들을 해결하기 위해서 필요한 것 ※
1. 의사소통 딜레이 숨기기
응답시간을 기다리는 것을 피하기 위해서 asynchronous(비동기식) communication을 사용하자. 어떻게? 멀티스레드 사용 혹은 인터럽트 기반 싱글 스레드 사용하자.
그런데 많은 어필리케이션들이 사용하지 못한다. 왜? 서비스를 요청하고 결과를 기다리고 다른 작업을 해야 의미가 있다. 다른 요청이 없을 경우 의미가 없음
해결책 : 가능한 한 서버를 요청해서 받는 것보다 로컬에서 할 수 있는 한 로컬에서 하자. 즉, 서버에 보내는 횟수를 줄이자(일단 보내면 딜레이가 무조건 발생하기 때문)
2. 분산
전제 리소스를 쪼개서 흩어주는 것 ex) DNS : 사람이 읽을 수 있는 hostname을 기계가 읽을 수 있는 IP 주소로 바꿔주는 것
DNS는 서버가 전 세계적으로 여러 개 있고 서로 계층적으로 이루어져 있음
3. 복제
전제 리소스를 복사해서 여러 서버들이 같은 리소스를 관리할 수 있게 해 줌
리소스 availability(가용성)가 증가함(사용할 수 있는 개수가 증가됨)
서버 간의 밸런스를 유지할 수 있음(한쪽에 쏠리는 현상 방지) 그래서 퍼포먼스가 증가함.
Caching(캐시)는 복제의 일종
캐시와 복제의 차이점 : 캐싱은 클라이언트 쪽에 저장을 하지만 복제는 서버 쪽에 저장해 둠. 또한 사용자가 리소스를 사용한 후에 캐싱으로 복사를 하지만 복제는 사용자가 요청하기 전에 미리 복사가 가능.
그러나 일관성(consistency) 문제가 발생할 수 있음
ex) 데이터가 업데이트될 경우 내가 복제한 데이터와 충돌문제가 발생할 수 있음.
Pitfalls : 개발자들이 쉽게 빠지는 함정(개발할 잘된다고 가정을 하고 생각함)
1. 네트워크가 신뢰할만하다
2. 내트워크가 안전하다
3. 네트워크가 동종이다.
4. 위상을 바꾸지 않는다.
5. latency가 0이다
6. bandwidth가 무한대이다.
7. 통신 비용이 0이다.
8. 관리자가 1명이다.
위와 같은 사항을 고려해야 하지만 쉽지가 않다.
분산시스템의 종류
Distributed computing systems : 높은 퍼포먼스 컴퓨팅 능력 ex) 딥러닝
Distributed information systems : 정보를 제공하는 시스템 ex) www
Distributed pervasive systems : 요구에 맞는 서비스를 사용자가 언제 어디에 어디서든 사용할 수 있는 것 ex) health-care
'Computer Science > 분산시스템' 카테고리의 다른 글
[분산 시스템] Synchronization (0) | 2024.06.03 |
---|---|
[분산 시스템] Naming (0) | 2024.05.12 |
[분산 시스템] Communication (0) | 2024.04.15 |
[분산 시스템] Process (0) | 2024.04.05 |
[분산 시스템] Architectures (0) | 2024.03.31 |