이전 시간에 배운 분산 시스템의 소프트웨어 아키텍쳐를 생각하면서 일반적인 분산 시스템은 Distributed Object base Architecture이다. 각각의 객체(컴포넌트)들이 다른 host에 위치해 있으며 Method Invocation call을 통해 네트워크 메세지를 보내고, request에 대한 response 메세지를 메세지로 다시 묶어 해당되는 host에게 전달하게 된다. (메세지에 response 메세지를 어디로 보내는지 써져있음)
시스템 아키텍쳐 종류
- Centralized Architecture(Clinent-Server) : 중앙집중형
- Decentralized Architecture(P2P) : 분산형
1. Centralized Architecture
: application을 기준으로 서비스를 제공하면 Server, 서비스를 받으면 Client이다.
"Request-Reply behavior", "Idempotent"라고 부른다. Request-Reply behavior는 쉽게 생각해서 클라이언트와 서버 사이의 request패킷과 response패킷을 주고받는 과정을 알고 있다면 해당 단어로 부르는지 이해할 수 있다. Idempotent는 클라이언트와 서버의 동작이 다르다는 것을 안다는 전제하에 이해할 수 있다. 하나의 예를 들어보려고 한다. 만약 서버에 request 패킷이 전송되어 해당 요청을 실행한 뒤에 response 패킷을 보내는 과정에서 response 패킷이 손실되면, client 측은 request 패킷이 손실된 것으로 판단하여 또다시 request 패킷을 보낸다. 그럼 서버는 다시 request 패킷을 받게 되는데 다시 해당 요청을 실행하면 두 번의 처리가 이루어지기 때문에 서버는 두 번째 처리를 하면 안 된다. 이와 같은 패킷 손실 시나리오가 일어난다면, client와 server는 같은 동작을 한다는 Idempotent를 만족시키지 못하기 때문에 각각의 처리를 달리해야한다.
앞선 예제처럼 Client-Server 아키텍쳐를 지닌 어플리케이션이 하나의 소프트웨어의 하나의 머신에서 동작했다면, 분산은 여러 개의 컴퓨터의 machine들에게 어플리케이션의 부분들을 분리시키는 것이다.
- User Interface level
- Processing level
- Data level
Client 쪽(User Interface leve)과 Server 쪽(Processing and data level)으로 구성된 Two-Teired Architecture이다. 이를 중심으로 아래 그림과 같은 다양한 형태의 Two-Teired Architecture를 가질 수 있다.
이 외에 Three-teired Architecture가 있다. User Interface level에 해당되는 부분, Application server에 해당되는 부분, Database server 부분이다. 웹서버 자체는 application에서 요청을 받아서 해당 요청의 처리가 database가 필요할 경우에는 database로 넘겨준다. 물리적으로 떨어져 있는 경우에는 하나로 있는 경우보다 communication 속도가 존재하기 때문에 성능이 떨어질 수 있다.
2. Decentralized Architecture
** p2p 아키텍쳐를 배우기 전에 용어 정리
1) Vertical Distribution : 수직적 분산
application에 "기능적"인 면들을 각 컴포넌트들에게 나누는 것. 서버 기능을 하는 컴포넌트가 모든 데이터를 지님.
이때, Vertical Fragmentation(수직적인 조각화)는 파일을 저장할 때, 데이터베이스의 내용을 수직으로 자른다.
모든 column과 row에 해당하는 부분을 한꺼번에 저장하면서 완전화된 상태로 조각화시킨다.
2) Horizontal Distribution : 수평적 분산
application을 각 컴포넌트들에게 layering을 동일하게 분산시키는 것. 각 컴포넌트들이 1/3에 해당하는 데이터들을 가짐.
각 컴포넌트들이 서버가 될 수 있고, 클라이언트가 될 수 있다. >> 이로 인해 Servent라는 용어로도 불림
이때, Horizontal Fragmentation(수평적인 조각화)는 파일을 저장할 때, 데이터 베이스의 내용을 수평으로 자른다.
데이터베이스에 있는 내용을 열(row) 단위로 잘라서 저장한다.
3) Overlay network(Logical nodes+links)
어플리케이션 안에서 논리적 네트워크가 생기는 것이다. 카카오톡에서 만들어진 단톡방은 새로운 네트워크가 된다.
실체적인 네트워크를 기반으로 하여 애플리케이션을 참조하고 있는 노드들의 연결성을 overlay network라고 한다.
(Decentralized Architecture 종류)
1) Structred P2P Architecture >> 링구 조
: 구조적이라는 의미는 어떤 노드가 데이터 아이템을 관리할 것인지를 알 수 있는 것이다.
4bit 식별자를 만들었다. 2^4 = 16명의 식별자(0~15)
위의 그림에서 5개의 노드가 존재한다. 각각의 노드가 어떤 아이템을 갖고 있는지에 대한 정보를 유지시키기 위해 자신의 노드 바로 앞 노드(Predecessor)를 만나기 전까지 데이터 아이템들을 가진다.
- 현재 1이 살아 있으니까 1의 Predecessor는 없기 때문에 첫 번째 노드인 0을 포함한 0, 1을 1이 관리
- 현재 4가 살아 있으니까 4의 predecessor는 1이고, 1 전까지의 데이터 아이템들인 4, 3, 2를 4가 관리
- 만약에 10번 노드가 들어오게 된다면, 10번 노드의 predecessor는 7번이므로 10, 9, 8을 10이 관리한다. 그리고 12번 노드가 10을 predecessor로 갖게 되므로 원래 12번 노드가 갖고 있던 12, 11, 10, 9, 8 중에서 12, 11까지만 12번이 관리한다.
- 만약에 4번 노드가 나가게 된다면, 4번이 leave 하기 전에 본인이 관리하던 데이터 아이템을 (DHT 테이블을 유지시키기 위해서) 4번의 successor인 7번에게 관리하도록 넘겨준다.
2) Unstructured P2P Architecture >> 구역
: 어떤 노드가 어떠한 데이터 아이템을 관리해야 한다는 제약 조건을 가지지 않는 아키텍쳐이다.
각각의 점들이 노드이며, 노드 A, B, C가 존재할 때, 노드 D가 ABC가 연결된 overlay network에 연결하려고 한다. 이때, 노드 D가 해당 overlay network를 어떻게 알게 되었는지에 대한 연결성을 찾아서 연관된 노드와 연결한다. 연관된 노드가 C라고 가정하고 C와 연결했을 때, C와 직접적으로 연결되어 있는 나머지 이웃들에 관한 정보들을 전해받을 수 있다. 하지만 연관성이 없어 알지 못할 땐? boardcast(flooding)을 해야 한다. D가 연결되어 있는 overlay 네트워크 사이에서 연관 관계가 있는 노드가 정보를 얻어온다.
하지만 개수가 많아지게 되고 확장을 하게 되면, 각각 노드들이 담당하고 있는 데이터 아이템을 알 수가 없다. 그렇기 때문에 p2p 네트워크(overlay network)에 대해서 flooding을 뿌려야 한다. 그럼 엄청난 크기의 p2p 네트워크 구조에서는 이게 가능할까?
이를 해결하는 방안이 두 가지 존재한다.
1) Superpeers
: 이전 네트워크의 문제점은 모든 노드들이 동등한 역할을 하는 peer들로 구성되어 있다. 따라서 peer들 간에 계층을 만들어 super peer와 regular peer라는 역할을 나눔으로써 해결할 수 있다. super peer는 regular peer 그룹의 대표 역할을 하는데, regular peer들에 대한 메타 정보들을 등록하여 데이터 아이템들 존재 여부 또한 알 수 있다.
2) Hybrid Architecture
: Centralized와 Decentralized 아키텍쳐가 혼합된 형태 Hybrid Architecture가 나타났는데, 그것의 대표적인 예가 엣지 네트워크이다.
엣지 네트워크란 인터넷에서 가장자리에 있는 네트워크이며, 엣지에 네트워크(서버)를 두어 traffic과 응답 시간도 줄일 수 있다.
hybrid architecture의 자세한 내용은 다음 글을 참고하자.
'학교 공부 > 분산 및 병렬처리' 카테고리의 다른 글
[분산 및 병렬처리 시스템] Adaptive Software (0) | 2020.10.09 |
---|---|
[분산 및 병렬처리 시스템] 시스템 아키텍쳐 - Hybrid Architecture (0) | 2020.10.09 |
[분산 및 병렬처리 시스템] 분산 시스템의 소프트웨어 아키텍쳐 (0) | 2020.10.07 |
[분산 및 병렬처리 시스템] 분산 시스템이란? (0) | 2020.10.07 |
[분산 및 병렬처리 시스템] 분산 처리란? (0) | 2020.10.07 |
댓글