distributed systems란 무엇인가?
Source: Dev.to
Introduction
“Distributed systems”는 오늘날 널리 사용되는 개념입니다. 처음 접했을 때는 다소 벅차게 느껴질 수 있지만, 핵심 아이디어는 단순하며 이러한 시스템을 구축할 때 명확성을 제공할 수 있습니다.
Historical Context
소프트웨어가 이론적인 가능성에서 실용적인 현실로 전환되었을 때, 아키텍처는 매우 단순했습니다: 애플리케이션 프로그램이 단일 컴퓨터에서 실행되고, 필요한 데이터베이스도 같은 머신에서 직접 호스트 내에서 통신했습니다.
컴퓨터가 점점 더 강력해지면서 사회는 점점 더 많이 컴퓨터에 의존하게 되었으며, 이는 흔히 디지털 트랜스포메이션이라고 불리는 현상입니다.
Availability Challenges
이러한 트랜스포메이션과 함께 소프트웨어는 다음을 만족해야 했습니다:
- 사용자가 원할 때 이용 가능해야 한다.
- 정확해야 하며, 일관된 결과를 반환해야 한다.
모든 것을 하나의 컴퓨터에서 실행하면 두 가지 주요 가용성 위험이 발생합니다:
- 전체 충돌 – 단일 머신이 실패하면, 애플리케이션이나 데이터베이스와 무관한 이유라도 전체 시스템이 다운됩니다.
- 서비스 저하 – 머신이 감당할 수 있는 부하를 초과하면 충돌 대신 느려질 수 있으며, 이 역시 가용성에 영향을 미칩니다.
Moving to Multiple Machines
단일 장애 지점을 방지하기 위한 해결책은 구성 요소를 여러 대의 머신에 분산시키는 것입니다. 하나의 머신이 다운되면 시스템의 일부만 영향을 받게 됩니다.
애플리케이션이 머신 A에, 데이터베이스가 머신 B에 존재할 때, 두 머신은 네트워크를 통해 통신해야 합니다. 노드 간의 이러한 통신이 바로 분산 시스템의 본질입니다.
Definition
한마디로 분산 시스템은 특정 목적을 수행하기 위해 네트워크를 통해 서로 통신하는 머신(노드)들의 집합입니다.
Ongoing Challenges
분산 시스템은 오늘날의 대규모 플랫폼을 가능하게 하지만, 다음과 같은 도전 과제를 안겨줍니다:
- 노드 실패(예: 머신 A가 머신 B로부터 응답을 받기 전에 다운되는 경우).
- 네트워크 파티션 및 지연 시간.
이러한 문제들은 만능 해결책이 없음을 상기시켜 주며, 신중한 설계와 엔지니어링이 필수적임을 보여줍니다.