데이터 중심 애플리케이션 설계 11

[데이터 중심 애플리케이션 설계] Part 3. 파생 데이터

1부와 2부에서는 디스크에 저장된 데이터의 레이아웃부터 결함이 있는 상황에서의 분산된 일관성의 한계까지, 분산 데이터베이스로 가기 위해 고려해야 할 모든 주요 사항들을 살펴봤다. 하지만 1, 2부에서는 애플리케이션이 단일 데이터베이스를 사용한다고 가정했다. 사실 데이터 시스템은 더 복잡하다. 큰 애플리케이션에서는 데이터를 접근하고 처리하는 데 다양한 종류의 데이터베이스 및 시스템이 필요하다. 하지만 모든 요구사항을 만족하는 하나의 데이터베이스는 없기 때문에, 대개 여라 다른 데이터스토어, 색인, 캐시, 분석 시스템 등 몇 가지를 조합해서 사용하고 한 저장소에서 다른 저장소로 데이터를 이동하는 메커니즘을 구현한다. 3부에서는 데이터 모델도 다르고 최적화도니 접근 양식도 다른 여러 데이터 시스템을, 일관성 ..

[데이터 중심 애플리케이션 설계] 09장. 정족수와 합의

Part 2. 분산 데이터 8장에서 설명했듯이 분산 시스템에서는 많은 것들이 잘못될 수 있다. 이런 결함을 다루는 가장 간단한 방법은 전체 서비스가 실패하도록 두고 사용자에게 오류 메시지를 보내는 것이다. 하지만 이 해결책을 받아들이기 힘들다면 결함을 견뎌낼(tolerating), 즉 내부 구성 요소 중 뭔가에 결함이 있더라도 서비스는 올바르게 동작하도록 할 방법을 찾아야 한다. 이번 장에서는 내결함성을 지닌 분산 시스템을 구축하는 데 쓰이는 알고리즘과 프로토콜의 몇 가지 예를 얘기한다. 내결함성을 지닌 시스템을 구축하는 가장 좋은 방법은 유용한 보장을 해주는 범용 추상화을 찾아 이를 구현하고 애플리케이션에서 이 보장에 의존하게 하는 것이다. 트랜잭션을 예로 들면, 트랜잭션을 사용함으로써 애플리케이션은 ..

[데이터 중심 애플리케이션 설계] 08장. 분산 시스템의 골칫거리

Part 2. 분산 데이터 지난 몇 개 장에서 되풀이됐던 주제는 시스템이 잘못된 것을 어떻게 처리하느냐였다(복제 서버 장애 복구, 복제 지연, 트랜잭션의 동시성 제어 등). 실제 환경의 시스템에서 나타날 수 있는 다양한 에지 케이스를 잘 이해할수록 이것들을 잘 처리할 수 있다. 이렇게 결함에 대한 이야기를 많이 했지만, 아직도 너무나 낙관적이다. 현실은 훨씬 더 비관적이다. 이제부터 잘못될 가능성이 있다는 것들은 모두 잘못된다고 가정한다. 분산 시스템은 단일 컴퓨터에서 실행하는 소프트웨어를 작성하는 일과는 근본적으로 다르다. 이번 장에서는 네트워크 관련 문제와 시계/타이밍 문제를 조사하고, 이것들을 어느 정도로 회피하여, 분산 시스템을 유지할 수 있도록 보장을 제공하는 알고리즘을 살펴본다. 결국 엔지니어..

[데이터 중심 애플리케이션 설계] 06장. 파티셔닝

Part 2. 분산 데이터 데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 파티션으로 쪼갤 필요가 있다. 이 작업을 샤딩이라고도 한다. 파티션은 보통 각 데이터 단위(레코드, 로우, 문서)로 나누며, 결과적으로 각 파티션은 그 자체로 작은 데이터베이스가 된다. 데이터 파티셔닝을 원하는 주된 이유는 확장성 때문이다. 비공유(shared-nothing) 클러스터에서 파티션은 다른 노드에 저장할 수 있다. 이를 통해 대용량 데이터셋이 여러 디스크에 분산될 수 있고, 질의 부하가 여러 프로세스에 분산될 수 있다. 파티션은 독립적으로 자신의 질의를 처리할 수 있으므로 노드를 추가함으로써 질의 처리량을 늘릴 수 있으며, 복잡한 질의는 여러 노드에서 병렬 실행이 가능하도록 할 수 있다..

[데이터 중심 애플리케이션 설계] 05장. 복제

Part 2. 분산 데이터 복제란 네트워크로 연결된 여러 장비에 동일한 데이터의 복사본을 유지한다는 의미다. 데이터 복제가 필요한 여러 이유가 있다. 지리적으로 사용자와 가깝게 데이터를 유지해 지연 시간을 줄인다. 시스템의 일부에 장애가 발생해도 지속적으로 동작할 수 있게 해 가용성을 높인다. 읽기 질의를 제공하는 장비의 수를 확장해 읽기 처리량을 늘린다. 복제 중인 데이터가 변경되지 않는다면 복제는 쉽다. 복제에서 모든 어려움은 복제된 데이터의 변경 처리에 있다. 노드 간 변경을 복제하기 위한 세 가지 인기 있는 알고리즘인 single-leader(단일 리더), multi-leader(다중 리더), leaderless(리더 없는) 복제를 살펴본다. 거의 모든 분산 데이터베이스는 이 세 가지 방법 중 하..

[데이터 중심 애플리케이션 설계] Part 2. 분산 데이터

2부에서는 저장소와 데이터 검색에 여러 장비가 관여한다면 발생하는 측면을 설명한다. 여러 장비 간 분산된 데이터베이스를 필요로 하는 이유는 여러 가지가 있다. 확장성: 데이터 볼륨, 읽기 부하, 쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 커지면 부하를 여러 장비로 분배할 수 있다. 내결함성/고가용성: 장비 하나(또는 여러 장비나 네트워크, 전체 데이터센터)가 죽더라도 애플리케이션이 계속 동작해야 한다면 여러 장비를 사용해 중복성을 제공할 수 있다. 지연 시간: 전 세계에 사용자가 있다면 사용자와 지리적으로 가까운 곳의 데이터센터에서 서비스를 제공하기 위해 전 세계 다양한 곳에 서버를 둘 수 있다. 고부하로 확장 고부하 확장을 위한 가장 간단한 방법은 더 강력한 장비를 구입하는 것이다 (수직 확장/용..

카테고리 없음 2023.01.22

[데이터 중심 애플리케이션 설계] Part 1. 데이터 시스템의 기초

1부에서는 단일 장비에서 데이터를 저장할 때 적용하는 데이터 시스템 측면을 설명한다. 처음 4개의 장에서는 데이터 시스템이 단일 장비거나 여러 클러스터 장비에 분산됐거나 상관없이 모든 상황에서 적용되는 기본 개념을 알아본다. 1장에서는 책 책 전반에 걸쳐 사용하는 전문 용어와 접근 방식을 소개한다. 신뢰성(reliability), 확장성(scalability), 유지보수성(maintainability) 같은 단어의 실제 의미와 이 같은 목표를 달성하기 위해 어떻게 해야 하는지 알아본다. 2장에서는 다양한 데이터 모델과 질의 언어를 비교한다. 이 둘은 개발자 관점에서 데이터베이스를 가장 가시적으로 구별할 수 있는 요소다. 다양한 모델이 여러 상황에서 어떻게 적합한지 알아본다. 3장에서는 저장소 엔진(sto..

[데이터 중심 애플리케이션 설계] 04장. 부호화와 발전

Part 1. 데이터 시스템의 기초 애플리케이션은 시간이 지남에 따라 변한다. 이에 따라 저장하는 데이터도 변한다. 2장에서는 이런 변화에 대처하는 방법을 설명했다. 관계형 데이터베이스에서는 데이터를 가진 스키마의 마이그레이션을 통해, schema-on-read인 문서 모델에서는 스키마와 자유롭게 이전 데이터와 새로운 데이터를 섞어 포함할 수 있다. 데이터나 스키마가 변경되면 애플리케이션 코드도 변하는데, 대규모 애플리케이션에서 코드는 대개 즉시 반영할 수 없다. 이를 위해 서버 배포 시 rolling upgrade(순회식 업그레이드), staged rollout(단계적 롤아웃) 등을 사용하기도 한다. 이는 예전 버전의 코드/데이터 타입과 새로운 버전의 코드/데이터 타입이 시스템에 동시에 공존할 수 있다..

[데이터 중심 애플리케이션 설계] 03장. 저장소와 검색

Part 1. 데이터 시스템의 기초 데이터베이스는 기본적으로 2가지 작업을 수행한다. 데이터를 받으면 데이터를 저장 데이터를 요청하면 데이터를 제공 2장에서는 애플리케이션 개발자의 관점에서 데이터베이스에 데이터를 추가하고, 질의하는 방법을 살펴보았음. 3장에서는 데이터베이스 관점에서 데이터를 저장하는 방법과 데이터를 요청 받았을 때 다시 찾을 수 있는 방법을 살펴본다. 애플리케이션 개발자는 애플리케이션에 적합한 저장소 엔진을 선택해야 하고, 특정 workload(작업 부하) 유형에서 좋은 성능을 내게끔 저장소 엔진을 조정해야 한다. 이를 위해서는 저장소 엔진의 내부 동작 방식을 대략적으로 이해하고 있어야 한다. 특히 트랜잭션 작업부하에 맞춰 최적화된 저장소 엔진과, 분석을 위해 최적화된 엔진 간에는 큰 ..

[데이터 중심 애플리케이션 설계] 01장. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

Part 1. 데이터 시스템의 기초 오늘날 많은 애플리케이션은 compute-intensive(계산 중심)과는 다르게 data-intensive(데이터 중심)적이다. 데이터 중심 애플리케이션은 공통으로 필요로 하는 기능을 제공하는 standard building block(표준 구성 요소)로 만든다 database(데이터베이스): 구동 애플리케이션이나 다른 애플리케이션에서 나중에 다시 데이터를 찾을 수 있게 데이터를 저장 cache(캐시): 읽기 속도 향상을 위해 값비싼 수행 결과를 기억 search index(검색 색인): 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공 stream processing(스트림 처리): 비동기 처리를 위해 다른 프로세스로 메시지 보내기 bat..