분산 시스템은 존재조차 몰랐던 컴퓨터에 오류가 발생하면 자신의 컴퓨터를 사용할 수 없게 되는 시스템입니다.
AM Turing Award 수상자 Leslie Lamport의 유명한 인용문은 분산 시스템을 구축하고 유지 관리하는 데 따른 과제를 요약합니다. 그런데 왜 이렇게 복잡한 시스템이 필요한 걸까요?
인터넷과 스마트 기기의 등장으로 처리해야 할 데이터의 양이 폭발적으로 늘어났습니다. Uber 주문, Netflix에서 프로그램 시청, 간단한 Google 검색, 온라인 쇼핑, 소셜 미디어 상호작용과 같은 간단한 일상 활동 등 우리가 당연하게 여기는 모든 사소한 활동은 수백 개의 유통 서비스를 통해 제공됩니다. 이러한 모든 서비스는 분산 시스템의 일부 기본 문서의 백본을 기반으로 구축되었습니다.
이 목록은 확실히 포괄적이지는 않지만 분산 시스템 세계에 막대한 영향을 미쳤던 제가 가장 좋아하는 논문 중 일부는 다음과 같습니다.
전통적인 논문은 아니지만 Eric Brewer는 2000년 ACM 분산 컴퓨팅 원리 심포지엄(PODC)의 기조 연설에서 이를 추측으로 처음 소개했습니다. 이 논문은 나중에 Nancy Lynch와 Seth Gilbert가 Brewer의 추측 및 일관성 있고 사용 가능한 파티션 허용 웹 서비스의 타당성 논문에서 공식화하고 입증했습니다.
Eric Brewer의 CAP 정리는 분산 시스템 이론의 기본 개념으로, 분산 데이터 저장소가 일관성, 가용성 및 파티션 허용치라는 세 가지 보장 중 두 가지 이상을 동시에 제공하는 것은 불가능하다는 것을 나타냅니다. 여기에 언급된 다른 모든 논문은 위의 원칙을 적용하고 시스템에서 필요한 절충안을 적용합니다.
CAP 정리는 항상 독자의 논문에 대한 이해를 바탕으로 많은 논의로 이어집니다. Martin Kleppmann의 " A Critique of the CAP Theorem "은 장단점을 논의하기 위한 더 나은 프레임워크를 제공합니다.
2001년의 이 중요한 논문 에서 Leslie Lamport는 쉽고 접근 가능한 방식으로 분산 시스템에서 합의를 달성하기 위한 Paxos 알고리즘을 제시합니다. Paxos 기반 합의 프로토콜은 많은 기술 회사에서 사용하는 많은 분산 데이터베이스, 스토리지 시스템, 메시징 플랫폼 및 조정 서비스의 백본을 형성합니다. 이는 Google의 Chubby, Google의 Spanner, Apache ZooKeeper, Apache BookKeeper 등과 같은 다른 기술에 큰 영향을 미쳤습니다.
Google 파일 시스템(GFS) 문서에서는 상용 하드웨어의 대규모 분산 데이터 집약적 애플리케이션을 위한 확장 가능한 분산 파일 시스템을 소개하며, 이는 이후 많은 분산 파일 시스템의 기반이 됩니다. GFS는 Apache Hadoop 프레임워크에서 사용되는 분산 파일 시스템인 HDFS와 결국 Amazon S3(단, s3은 근본적으로 다릅니다)에 대한 주요 영감을 제공했습니다.
이 문서에서는 분산 컴퓨팅 인프라를 사용하여 대규모 데이터 세트를 처리하는 확장 가능한 접근 방식을 보여주는 MapReduce 프로그래밍 모델을 소개합니다. MapReduce는 "빅 데이터" 혁명에서 중추적인 역할을 하여 조직이 분산 컴퓨팅의 성능을 활용하여 대규모 데이터 세트에서 통찰력을 분석하고 도출할 수 있도록 했습니다. GFS와 MapReduce를 결합하여 Google이 페타바이트급 데이터를 처리하여 "인터넷"의 데이터를 구성할 수 있었던 방법을 확인할 수 있습니다.
MapReduce 문서(GFS와 함께)는 Apache Hive(Hadoop에 구축된 데이터 웨어하우스 인프라), Apache Pig(Hadoop용 고급 데이터 흐름 언어), Apache와 같은 Apache Hadoop을 기반으로 구축된 도구 및 라이브러리의 전체 생태계 개발에 영감을 주었습니다. Spark(인메모리 데이터 처리 엔진), Apache HBase(분산 NoSQL 데이터베이스) 등이 있습니다.
Bigtable 논문은 Google에서 구조화된 데이터를 관리하기 위한 분산 스토리지 시스템을 나타냅니다. MapReduce와 GFS를 통해 Google이 비용 효과적인 방식으로 대규모 데이터를 처리할 수 있게 되자 다음 단계는 안정적이고 가용성이 높은 방식으로 데이터에 액세스할 수 있도록 하는 것이었습니다. BigTable은 웹 색인 생성, Google Earth, Google Finance와 같은 애플리케이션을 위한 유연한 고성능 솔루션을 제공할 수 있었습니다.
MapReduce가 '빅데이터' 시대에 혁명을 일으켰듯이 BigTable 종이는 'NoSQL' 시대를 이끄는 원동력이었습니다. Bigtable 문서에 소개된 많은 디자인 원칙과 아키텍처 개념은 "Apache HBase", "Cassandra", "MongoD" 등과 같은 기술에서 사용되었습니다. 이러한 애플리케이션 중 일부는 다른 데이터 모델(예: MongoDB)을 사용할 수 있지만, 수평 확장성, 내결함성, 자동 샤딩과 같은 공통 원칙을 공유합니다.
Dynamo 백서는 Amazon에서 개발한 고가용성 키-값 저장소의 설계 및 구현을 제시합니다. Dynamo는 장바구니에 담긴 품목과 같은 매우 동적인 데이터에 대한 실시간 액세스 요구 사항을 해결했습니다. 이 문서에서는 분산 시스템 설계의 핵심 원칙으로 "최종 일관성"이라는 개념을 소개했으며, 이를 통해 완화된 일관성 보장을 통해 고가용성과 성능을 달성할 수 있었습니다(하이 CAP 정리!).
백서 자체에서 "Bigtable과 비교하여 Dynamo는 네트워크 파티션이나 서버 오류가 발생하더라도 업데이트가 거부되지 않는 고가용성에 중점을 두고 키/값 액세스만 필요한 애플리케이션을 대상으로 합니다."
BigTable과 마찬가지로 Dynamo 논문은 Riak, Voldemort, Cassandra와 같은 후속 기술은 물론 Apache Kafka와 같은 이벤트 스트리밍 기술에도 큰 영향을 미쳤습니다.
Facebook의 급속한 성장으로 인해 엄청난 양의 데이터를 처리하고 많은 수의 동시 사용자를 지원할 수 있는 데이터베이스 솔루션이 필요했습니다. BigTable과 Dynamo는 그 자체로 상당한 영향력을 갖고 있는 반면, Cassandra는 다른 기술보다 한 발 앞서간 최초의 기술이었습니다. Facebook은 논문 출판과 함께 이를 Apache 라이센스에 따라 오픈 소스 기여로 공개함으로써 업계 전체가 이러한 기술에 접근할 수 있도록 하는 데 중요한 역할을 했습니다.
Cassandra는 조정 가능한 일관성 모델을 제공하여 사용자가 애플리케이션 요구 사항에 따라 강력한 일관성(예: BigTable)과 최종 일관성(예: Dynamo) 중에서 선택할 수 있도록 함으로써 이전 두 모델과 차별화되었습니다.
본 논문에서는 Apache ZooKeeper를 소개하고 분산 시스템에서 안정성과 확장성이 뛰어난 조정 서비스를 제공하기 위한 설계 원리와 알고리즘을 제시합니다. ZooKeeper가 도입되기 전에 소프트웨어 개발자는 분산 시스템의 분산 조정 및 합의를 위해 자체 임시 솔루션을 구현해야 하는 경우가 많았습니다.
ZooKeeper는 분산 잠금, 리더 선택 및 구성 관리와 같은 기본 기능을 제공하는 분산 조정을 위한 중앙 집중식 서비스를 제안했습니다. 이를 통해 복잡한 조정 논리를 ZooKeeper에 오프로드하여 분산 애플리케이션 개발을 단순화할 수 있었습니다. Zookeeper를 사용하는 가장 일반적인 사용 사례 중 하나는 서비스 검색입니다.
이 문서에서는 이벤트 스트림의 높은 처리량, 내결함성 처리를 위해 설계된 분산 메시징 시스템인 Apache Kafka를 소개합니다. Kafka는 연구 논문으로 출판되고 Apache 프로젝트로 오픈 소스 릴리스를 통해 Kafka는 확장성이 뛰어나고 내결함성이 있는 실시간 데이터 처리 및 이벤트 중심 아키텍처를 위한 표준 메시징 시스템으로 확립되었습니다.
Kafka는 대용량 데이터 스트림을 실시간으로 처리하도록 설계된 확장성이 뛰어나고 내결함성이 뛰어난 메시징 시스템을 도입했습니다. Kafka는 배치 처리와 스트림 처리를 결합하여 짧은 대기 시간과 높은 처리량으로 대용량 데이터를 처리하는 Lambda 아키텍처 개발을 가능하게 하는 데 상당한 영향을 미쳤습니다.
이 문서에서는 분산 클러스터 전반에 걸쳐 내결함성 메모리 내 데이터 처리를 가능하게 하는 Apache Spark의 핵심 추상화인 RDD(복원력 있는 분산 데이터 세트)를 소개합니다. Spark의 인메모리 실행 엔진은 특히 반복 알고리즘, 기계 학습 및 대화형 분석에 대해 MapReduce(디스크 기반 실행 모델 포함)에 비해 훨씬 빠른 성능을 제공합니다.
이 문서에서는 스토리지 시스템, 합의 알고리즘, 내결함성, 확장성을 포함하여 분산 시스템의 광범위한 주제를 다룹니다. 이를 읽으면 분산 시스템을 구축하고 관리하는 원칙과 실무에 대한 견고한 토대가 제공됩니다.
분산 시스템에서 여정을 시작하고 더 많은 것을 배우고 싶거나 이미 전문가이고 기본 사항을 새로 고치고 싶다면 분산 시스템에 대한 기본 문서를 읽는 것보다 더 나은 학습 방법은 없습니다.