분류 전체보기

    [MongoDB] 샤딩 개념

    MongoDB in Action을 바탕으로 정리한 내용입니다. 샤딩의 배경 최신 애플리케이션의 규모가 커짐에 따라 많은 데이터와 부하를 처리할 만큼 강력한 단일 시스템을 얻는 것이 점점 더 비용이 많이 들고, 일부의 경우 불가능해지고 있다. (컴퓨팅 성능에는 한계가 존재하기 때문) 문제에 대한 한 가지 해결책은 많은 컴퓨팅의 용량을 모으는 것이다. 샤딩이란? 샤딩(Sharding)은 데이터베이스를 작은 조각으로 분할하여 단일 머신이 모든 데이터를 저장하거나 전체 부하를 처리하지 않도록 하기 위해 고안된 것. 데이터의 크기가 커지고 애플리케이션이 더 많은 읽기 쓰기 처리량을 필요로 할 때 단일 서버로는 충분하지 않을 수 있다. 이러한 문제를 해결하기 위해 데이터베이스를 둘 이상의 서버에 분산시켜야 한다. ..

    [대규모 시스템 설계 기초 정리] 피드 시스템 설계

    피드 시스템이란? 지속적으로 업데이트되는 스토리들로, 페이스북 피드, 인스타그램 피드, 트위터 타임라인들을 예시로 들 수 있다. 피드 발행 흐름 상세 설계 포스팅 전송(팬아웃 서비스) 팬아웃이란, 어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달하는 과정. 팬아웃에는 두 가지 모델이 존재 Push 모델 (쓰기 시점에 팬아웃 하는 모델) Pull 모델 (읽기 시점에 팬아웃 하는 모델) Push 모델 쓰기 시점에 팬아웃 하는 모델 새로운 포스팅을 기록하는 시점에 뉴스 피드를 갱신하게 된다. 포스팅이 완료되면 해당 사용자(수신자)의 캐시에 해당 포스팅을 기록하는 것. 장점 뉴스 피드가 실시간으로 갱신되며 친구 목록에 있는 사용자에게즉시 전송된다. 뉴스 피드를 읽는 데 드는 시간이 ..

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

    복제 vs 파티셔닝 복제 동일한 데이터 복사본 여러 개를 다른 노드에 저장 파티셔닝 데이터를 파티션으로 나누어 저장 (이러한 작업을 샤딩이라고 한다) 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다. 각 레코드는 정확히 한 파티션에 속하더라도 이를 여러 다른 노드에 저장해서 내결함성을 보장할 수 있다. 파티션을 하는 이유? 파티션을 하는 주된 이유는 확장성이다. 비공유 클러스터에서 다른 파티션은 다른 노드에 저장될 수 있다. 따라서 대용량 데이터셋이 여러 디스크에 분산될 수 있고 질의 부하는 여러 프로세서에 분산될 수 있다. key-value 데이터 파티셔닝 대량의 데이터를 파티셔닝 하려 할 때, 어떤 레코드를 어느 노드에 저장해야 할까? 파티셔닝의 목적은 데이터와 질의 부..

    [대규모 시스템 설계 기초 정리] 분산 키-값 저장소 with Cassandra DB

    요구사항 높은 가용성을 제공. 높은 규모 확장성을 제공. 데이터 일관성 수준은 조정이 가능해야 한다. 단일 서버 Key-Value 저장소 모든 데이터를 단일 서버 Key-Value 저장소 내의 메모리에 해시 테이블로 저장하는 경우, 모든 데이터를 메모리에 두는 것이 불가능하며 데이터 압축 혹은 자주 쓰이는 데이터만 메모리에 두고 나머지는 디스크에 저장을 통해 어느정도 개선은 가능해도 한계가 존재한다. 분산 Key-Value 저장소 분산 키 값 저장소는 분산 해시 테이블이라고도 하며, Key-Value 쌍을 여러 서버에 분산시키는 것이다. CAP 정리 데이터 일관성 (Consistency), 가용성 (Availability), 파티션 감내 (Partition tolerance)라는 세 가지 요구사항을 동시..

    [대규모 시스템 설계 기초 정리 + Cassandra] 안정 해시 설계 + Cassandra Virtual Node

    카산드라 DB를 요즘 공부하고 있는데, 해당 개념에 이번 장의 개념이 들어가 있어서 공부해보며 정리해봅니다. Cassandra DB Cassandra DB는 대용량의 데이터 시스템을 관리하기 위해 개발되었으며, 대용량 저장 장치 및 가용성을 요구한다. Cassandra DB는 가용성을 확보하기 위해 여러 노드를 다음 그림처럼 논리적으로 링 구조로 구성하였다. 여러 개의 노드로 클러스터를 구성하여, 동일 데이터를 여러 노드에 복제하여 저장함으로써, 특정 노드에 장애가 발생하더라도 복제된 노드에서 데이터를 제공해서 가용성을 충족한다. (여기서 노드는 Master-Slave 개념이 아닌 모두 동등 위치를 갖는다) Cassandra DB에서 데이터를 저장할 때, 여러 노드 중 어떤 노드에 저장할지 결정해야 하는..