Distributed System (분산 처리 시스템) :
여러개의 컴퓨터가 동일한 task를 처리하기 위해 네트워크상에서 서로 통신하며 협력하는 것.
A distributed system is a collection of independent computers that appears to its users as a single coherent system. (하나의 시스템처럼 보이는 독립된 컴퓨터들의 집합)
- 위의 정의를 두 가지 관점으로 나눈다면, 1) hardware와 독립,자율적으로 돌아가는 hardware machine, 2) software와 user 관점으로 볼때, 하나의 시스템처럼 여겨지는 시스템.
- 다양한 컴퓨터들 사이에 다양한 통신 방법들을 사용자로 부터 숨기기 / 사용자와 시스템간의 일관적이고 단일화 된 커뮤니케이션 통로 만들기
쓰임 :
거대한 웹사이트의 저장소, 빅데이터 계산, peer-to-peer(P2P) 파일 공유, 동영상 화면 렌더링 팜, 배치 처리 시스템, 검색 인덱스 빌더, 프론트엔드 웹 서버, 주문 파이프라인, 신용카드 거래, AWS API, 전화 통신 등
분산 시스템 사용 목적
- Resource problem : 컴퓨터의 cpu파워, memory, 하드 디스크 storage 등의 우리가 사용하는 컴퓨터의 자원 부족 문제 해결. 서버-클라이언트 구조의 서비스들이 발달할수록 더 많은 자원을 요구하게 되고, 머신 한대로 처리할 수 있는 양에는 한계가 있음. 분산 시스템으로 해결. cpu, 디스크, memory 등이 병렬로 연결.
- High performance : 자원 접근의 편리성 제공. 유저들은 많은 종류의 다양한 자원들에 접근하는데, 이때 유저들에게 일관적이고 단일화된 방식으로 원하는 자원에 쉽게 접근하게 할 수 있는 것. (ex. 어떤 인터넷 페이지가 있을 때, 우리는 이 페이지의 서버가 어디 있는지, ip는 무엇인지 몰라도 됨. 브라우저에 url입력)
- Fault tolerance : 두 개의 컴퓨터가 같은 일을 할 때, 한대가 실패해도 다른 한대로 작업가능. 단일 머신에서 돌아가는 시스템이라면 머신의 수명이 다하거나 다운된다면 모든 시스템이 다운됨.
- 서버가 물리적으로 떨어져 있을때도 사용 가능.
- 보안상의 문제가 있을 때 서로다른 권한, 프로토콜에 따라 다르게 배치 가능.
- 투명성 : 데이터 표현 방식과 자원에 접근 방법을 사용자에게 숨김. / 자원이 어디에 위치하는지 사용자에게 숨김. / 자원의 이동을 사용자에게 숨김. / 사용자가 사용중에도 자원 이동 가능. / 자원 복사 가능. / 접근 자원이 다른 사용자와 공유 가능.
분산 처리 시스템 분류 :
분산 처리 시스템은 위상, 분산 범위, 프로세서 모델, 운영체제 등으로 분류 가능.
ㅇ 위상(Topology)에 따른 분류 : 망형-완전 연결형(Fully connection), 망형-부분 연결형(Partially connection), 트리(Tree) 또는 계층형(Hierarchy), 스타형(Star), 링형(Ring), 다중 접근 버스 연결형(Multi access bus connection)
ㅇ 분산 범위에 따른 분류 :
분산 처리 시스템의 각 사이트들이 분포되어 있는 지리적 범위에 따라 LAN(근거리 통신망)과 WAN(광대역 통신망)으로 분류됨.
ㅇ 프로세서 모델에 따른 분류 :
하나의 작업을 수행하는데 사용되는 프로세서의 형태에 따라 클라이언트-서버 모델(Client-Server model), 프로세서 풀 모델(Processor Pool model), 혼합 모델(Hybrid model)로 분류됨.
ㅇ 운영체제에 따른 분류 :
자원에 대한 접근 방식에 따라 네트워크 운영체제와 분산 운영체제로 분류 가능.
분산 시스템이 어려운 이유
- 어떤 문제가 발생했을 때, 컴퓨터간에 복잡하게 연결되어 있는 부분이 있다면, 시간에 의존적인(time dependent) 것들이 있을 수 있음. / 하나의 컴퓨터로 할 때 잘 실행되는 것이, 분산 시스템에서는 크래쉬가 생기거나 네트워크 문제 등의 알 수없는 이유로 실패할 수 있음.
- 실시간 분산 시스템이 어려운 이유 중, 하나의 결함 도메인에서 다른 도메인으로 네트워크가 메시지를 전송할 수 있다는 점인데, 메시지 전송 자체는 괜찮지만 전송되었을때 모든 작업이 보통때보다 더 복잡해짐. 두 서버간에 요청-회신 메시지가 전송될 때마다 최소 8단계의 동일한 세트가 항상 수행된다 함.
> 네트워크에서 요청-회신 메시징 : 1. 요청 게시(클라이언트가 네트워크에 요청 메시지를 넣음) - 2. 요청 전송(네트워크가 메시지를 서버로 전송) - 3. 요청 검증(서버가 메시지를 검증) - 4. 서버 상태 업데이트(서버가 필요한 경우 메시지에 따라 서버 상태를 업데이트함) - 5. 회신 게시(서버가 회신 reply를 네트워크에 넣음) - 6. 회신 전송(네트워크가 reply를 클라이언트로 전송) - 7. 회신 검증(클라이언트가 reply를 검증) - 8. 클라이언트 상태 업데이트(클라이언트가 필요한 경우 reply에 따라 클라이언트 상태를 업데이트함)
- 엔지니어가 오류 조건을 결합할 수 없음. 대신, 오류에 대한 많은 순열을 고려해야함. 대부분의 오류는 다른 오류 조건과는 독립적, 잠재적으로 함께 결합하여 언제든 발생 가능.
- 네트워크 작동 결과가 Unknown 상태일 수 있음. 이때 요청은 성공, 실패 혹은 수신되었지만 처리되지 않은 상태일 수 있음.
- 분산 문제는 단순히 하위 수준의 실제 머신에서가 아닌, 분산 시스템의 모든 논리적 수준에서 발생.
- 분산 시스템은 반복성 때문에 시스템의 상위 수준에서 더 악화됨.
- 분산 버그는 종종 시스템에 배포된 후 오랜 시간이 경과한 후 나타나기도 함.
- 분산 버그는 전체 시스템으로 퍼질 수 있음.
분산 시스템을 실현하기 위해 필요한 것들
- Remote Procedure Call(RPC), Thread, Concurrency Control, 확장성(Scalability)
- Generally high-level goal of Distributed system is scalable speed-up.
Fault Tolerance - 컴퓨터 한대로 서버를 구성할 경우 보통 크래쉬 없이 1년정도 버틴다 함. 만약 1000대의 컴퓨터로 분산처리 한다면 하루에 3~4대 고장난다함. 각 시스템은 엄청나게 많은 네트워크 케이블과 스위치로 연결되어 있는데 그 케이블이나 스위치, 크래쉬 등의 문제로 고장.
Availability - 전체 중 일부 시스템이 고장나더라도 서비스가 멈추면 안되기 때문에 복제된 서버 등 다른 서버가 역할을 대신해 줘야함.
Recoverability - 만약 서비스가 멈추더라도 복구된 이후의 작업이나 요소들이 계속되어야 함. (비휘발성 저장공간[non-volatile storage], 복제[Replication] 등을 통해)
Consistency - 두 대의 서버가 있고 각각 key-value 테이블이 있을 때, 서버 두 대 모두 변경해야 함. 그렇지 않으면 키값의 일관성이 없어짐. 가장 최신 데이터를 볼수있게 보장해주는 것 => strong consistency (↔ weak consistency). strong consistency를 유지하는 것은 많은 비용이 듦.
댓글