Decentralized Architecture

유석현(SeokHyun Yu)·2023년 4월 12일
0

분산 시스템

목록 보기
16/27
post-thumbnail

시스템 아키텍처 중에는 중앙집중형 아키텍처 이외에 분산형 아키텍처(Decentralized Architecture)도 있다.

분산형 아키텍처에서는 수평적 분산과 수직적 분산 방법이 있다.

수직적 분산 방법에서는 클라이언트와 서버 애플리케이션을 멀티 티어 아키텍처로 구성하고, 논리적으로 다른 구성요소를 서로 다른 머신에 배치하여 분산 처리를 실현한다.

수평적 분산 방법에서는 클라이언트나 서버를 논리적으로 동등한 부분으로 물리적으로 분할할 수 있다.

이러한 방법을 사용하여 피어 투 피어(peer-to-peer) 시스템을 구성할 수도 있다.


피어 투 피어(peer-to-peer) 시스템

피어 투 피어 시스템(peer-to-peer)은 프로세스 간의 대부분의 상호작용이 대칭적으로 이루어진다.

각 프로세스는 동시에 클라이언트와 서버 역할을 수행한다.

이 시스템은 구조화된 P2P(structured P2P)구조화되지 않은 P2P(unstructured P2P)로 구분할 수 있다.


구조화된 P2P(Structured P2P)

분산형 아키텍처에서 구조화된 P2P 시스템분산 해시 테이블(DHT: distributed hash table)을 통해 프로세스를 구성하는 방식이다.

DHT 기반 시스템에서는 데이터 항목에 대해 128비트 또는 160비트 크기의 무작위 키를 할당하고, 시스템의 노드도 같은 식별자 공간에서 무작위 번호를 할당한다.

이를 통해 데이터 항목의 를 노드의 식별자로 매핑하는 효율적이고 결정적인 방식을 구현한다.

데이터 항목을 찾을 때는 해당 데이터 항목을 책임지는 노드의 네트워크 주소를 반환한다.

Chord 시스템은 논리적으로 형태로 구성된다.

각 데이터 항목은 키 k에 대해 k보다 큰 최소 식별자 id를 가진 노드에 매핑된다.

이 노드를 후계자(successor)라 하며, succ(k)로 표시한다.

임의의 노드에서는 LOOKUP(k) 함수를 호출하여 succ(k)의 네트워크 주소를 반환하고, 이 노드에 연락하여 데이터 항목의 사본을 가져올 수 있다.

Chord 시스템에서 노드가 시스템에 가입하려면 임의의 식별자 id를 생성하고, id를 사용하여 LOOKUP(id) 함수를 호출하여 succ(id)의 네트워크 주소를 가져온다.

이 노드는 succ(id)와 그 전 노드와 연락하여 자신을 삽입할 수 있다.

id와 연관된 데이터 항목은 succ(id)로 이전된다.

노드가 떠날 때는 자신의 후계자와 전 노드에게 알리고, 데이터 항목을 succ(id)로 이전한다.

따라서 DHT를 사용하여 구조화된 P2P 시스템을 구성하면, 효율적이고 결정적인 방식으로 데이터 항목을 검색할 수 있다.

또한, 노드 간의 가입과 탈퇴를 처리할 수 있다.

하지만 DHT는 네트워크 오버헤드와 데이터 일관성 등의 문제가 있으므로, 이러한 문제에 대한 대안을 고려하여 구현해야 한다.


구조화 되지 않은 P2P(Unstructured P2P)

비구조적 P2P 시스템은 대부분 무작위 알고리즘을 사용하여 노드들이 자율적으로 연결되어 네트워크를 구성한다.

이 때 각 노드는 무작위로 선택된 이웃 목록을 유지하며, 데이터 항목은 노드에 무작위로 배치된다.

따라서 비구조적 P2P 시스템은 구현이 간단하고 확장성이 높은 장점이 있다.

하지만 이러한 방식은 데이터 검색에 필요한 네트워크 부하가 매우 크다는 문제가 있다.

검색을 위해 네트워크를 덮어쓰면서 찾아야 하기 때문이다.

또한 노드의 선택적인 탈퇴 등의 문제가 발생할 수 있다.


Superpeer

비구조적 P2P 시스템에서는 네트워크가 커짐에 따라 관련 데이터 항목을 찾는 것이 어려워질 수 있다.

데이터 항목을 특정 노드로 라우팅하는 결정론적인 방법이 없으며, 검색 요청을 네트워크 전체로 덮어쓰는 방법밖에 없다.

이러한 문제를 해결하기 위해 특수 노드를 사용하여 데이터 항목의 인덱스를 유지하는 방법이 제안되었다.

이러한 노드를 슈퍼피어(superpeer)라고 하며, 브로커를 사용하여 서로 근접한 일부 노드의 자원 사용량을 수집하면 충분한 자원을 가진 노드를 빠르게 선택할 수 있다.

슈퍼피어는 종종 피어-투-피어 네트워크에서도 구성되어 계층적 구조를 형성한다.

모든 일반적인 피어는 슈퍼피어에 클라이언트로써 연결되며, 일반적인 피어의 모든 통신은 해당 피어와 연결된 슈퍼피어를 통해 진행된다.

일반적인 피어가 네트워크에 가입하면 슈퍼피어 중 하나에 연결되어 네트워크를 떠날 때까지 해당 슈퍼피어에 연결된다.

슈퍼피어는 높은 가용성을 가진 장기 프로세스이다.

그러나 슈퍼피어에 고정적으로 연결하는 것이 항상 최선의 해결책이 되지는 않는다.

예를 들어 파일 공유 네트워크에서는 특정 파일의 인덱스를 유지하는 슈퍼피어에 연결하는 것이 더 좋을 수 있다.

슈퍼피어가 되기에 적격한 노드를 선택하는 문제는 리더 선택 문제와 밀접한 관련이 있다.

이 문제는 6장에서 다루어진다.


Hybrid Architecture

하이브리드 아키텍처는 클라이언트-서버 솔루션과 분산 아키텍처를 결합한 것이다.

이 중에서도 엣지 서버 시스템과 협력 분산 시스템이 있다.

BitTorrent는 전형적인 하이브리드 아키텍처이다.

BitTorrent에서는 다른 사용자에게 콘텐츠를 제공하면서 파일을 다운로드할 수 있다.

이를 위해 사용자는 글로벌 디렉토리에 액세스해야 한다.

이 디렉토리에는 .torrent 파일에 대한 참조가 포함되어 있다.

.torrent 파일에는 특정 파일(트래커)을 다운로드하기 위해 필요한 정보가 들어있다.

트래커는 요청한 파일의 청크를 가진 활성 노드를 정확하게 계산하는 서버이다.

다운로드하는 노드는 실제로 활성화되며, 다른 사람을 돕기 위해 파일 청크를 제공해야 한다.

만약 노드 P가 노드 Q가 업로드하는 양보다 더 많이 다운로드하는 것을 발견하면, P는 Q에게 보내는 데이터 속도를 감소시키기로 결정할 수 있다.

이러한 방식으로 BitTorrent는 분산 아키텍처와 클라이언트-서버 솔루션을 결합하여 새로운 하이브리드 아키텍처를 제공하고 있다.

이는 효율적이고 높은 가용성을 제공하면서도 데이터 공유를 균형잡히게 유지할 수 있다는 장점이 있다.


Architectures vs Middleware

아키텍처와 미들웨어의 관계에 대한 질문이 있다면, 미들웨어 시스템은 실제로 특정한 아키텍처 스타일을 따르는 경우가 많다.

이를 통해 응용 프로그램을 설계하는 것이 더욱 간단해질 수 있다.

그러나 응용 프로그램 개발자가 염두에 둔 바와는 다르게 미들웨어가 최적이지 않을 수도 있어서, 이 점은 단점으로 작용할 수 있다.

예를 들어, CORBA는 초기에 원격 클라이언트가 호출할 수 있는 객체만 제공하였지만, 나중에는 메시징과 같은 다른 상호작용 패턴도 추가되었다.

보다 나은 접근 방법은 미들웨어 시스템을 이렇게 만드는 것이다.

응용 프로그램이 필요에 따라 쉽게 구성, 적응 및 사용자 정의할 수 있도록 하는 것이다.

이제는 정책과 메커니즘 사이에 더 엄격한 분리를 적용한 시스템이 개발되고 있다.

이러한 접근 방식은 미들웨어가 응용 프로그램의 요구 사항을 보다 정확하게 반영하고, 미들웨어의 재사용성과 확장성을 높일 수 있다는 장점을 가지고 있다.


Self Management

분산 시스템은 적응성(adaptive)을 가져야 한다.

이것은 소프트웨어 구성 요소를 조정하는 것이 아니라 시스템 실행 동작을 조정하는 것을 의미한다.

자동 적응(automatic adaptation)을 위해서는 분산 시스템의 구성 요소를 모니터링하고 조절할 수 있도록 조직해야 하며, 적응을 처리하는 프로세스가 실행될 위치를 결정해야 한다.

피드백 제어 모델은 하나 이상의 피드백 제어 루프를 통해 적응을 수행한다.

이 모델은 모니터링, 측정 분석동작 제어의 세 가지 요소로 구성된다.

모니터링 단계에서는 대부분의 경우 동작 측정이 쉽지 않은 문제가 발생할 수 있다.

예를 들어 왕복 지연 시간을 측정하는 것은 간단하지 않을 수 있다.

측정 분석 단계에서는 측정값을 기준값과 비교하여 제어 루프의 핵심이 된다.

이 단계에서는 가능한 적응 방법을 결정하는 알고리즘을 포함해야 한다.

동작 제어 메커니즘 단계에서는 복제본을 배치하거나 스케줄링 우선순위를 변경하거나 서비스를 전환하거나 가용성을 위해 데이터를 이동하거나 서버에 대한 요청을 다른 서버로 리디렉션하는 등의 방법으로 동작을 제어한다.

그러나 측정 데이터를 적절하게 분석하고 올바른 조치를 취하는 것은 자기 관리 시스템을 개발하는 데 어렵게 만든다.

profile
Backend Engineer

0개의 댓글