카우치베이스 아키텍처

분산 데이터베이스: 개요

4 분 읽기

분산 데이터베이스는 네트워크로 연결된 여러 서버(노드)에 걸쳐 데이터를 저장하며, 하나의 단일 논리적 데이터베이스로 관리됩니다. 분산 아키텍처는 수평적 확장(저렴한 범용 노드를 추가하여 용량 증가)과 자동 데이터 복제를 통한 고가용성을 가능하게 합니다. 주요 분산 아키텍처에는 두 가지가 있습니다. 하나의 노드가 모든 쓰기 작업을 담당하는 주/부(마스터/슬레이브) 방식과, 단일 병목 지점 없이 모든 노드에 데이터가 파티셔닝되는 공유 무인프라(shared-nothing) 방식입니다. 카우치베이스(Couchbase)는 자동 vBucket 기반 데이터 분산이 적용된 공유 무인프라 아키텍처를 사용하여, 탄력적인 확장성과 상시 가동 가용성이 필요한 애플리케이션에 자연스럽게 적합합니다.

주/보조 대 공유-나ッシング 아키텍처

차원주/부 (마스터/슬레이브)Shared-Nothing (마스터리스)
데이터 소유권기본(Primary)의 모든 데이터; 보조(Secondary)는 읽기 전용 복제본입니다모든 노드에 분할된 데이터, 단일 소유자 없음
쓰기 확장성제한됨: 모든 쓰기 작업은 하나의 프라이머리로 전달됨Linear: 쓰기가 모든 노드에 분산됨
읽기 확장성좋습니다, 읽기 작업이 보조 서버에서 처리될 수 있다면요우수함: 모든 노드에 분산된 읽기 작업

수평 확장

소수의 애플리케이션과 데이터를 위한 단일 데이터베이스 서버는 역사적으로 잘 작동해왔습니다. 그러나 대규모의 일반 사용자 기반에 노출될 경우, 이러한 서버의 용량을 늘리는 유일한 방법은 더 비싼 서버로 업그레이드하는 것뿐입니다.

용량을 늘리기 위해 데이터베이스 소프트웨어를 더 많은 메모리, 더 많은 디스크 공간, 더 많은 프로세서를 갖춘 다른 단일 머신으로 이전하세요. 이를 “수직적 확장(vertical scaling)”이라고 합니다. 이 접근 방식의 단점은 다운타임이 발생할 수 있다는 점입니다. 또한 단일 머신에서 얻을 수 있는 성능에는 한계가 있습니다.

안타깝게도 많은 데이터베이스, 특히 관계형 데이터베이스(RDBMS)는 분산 및 클러스터링되도록 설계되지 않았습니다.

하지만 분산 데이터베이스는 처음부터 탄력적 확장성을 지원하도록 만들어집니다. 더 많은 부하를 처리하기 위해 더 많은 리소스를 추가해야 합니까? 하나 이상의 추가 장에 데이터베이스 소프트웨어를 설치하고 이를 클러스터에 추가하기만 하면 됩니다.

그런 다음 필요할 때 클러스터에 저렴한 범용 장비를 추가하십시오. 더 이상 필요하지 않은 경우 제거하고 규모를 축소할 수도 있습니다.

주/보조 아키텍처

주/부(primary/secondary) 아키텍처에서는 지정된 “주(primary)” 서버가 존재합니다. 이 서버는 모든 데이터를 저장하고 모든 데이터 요청을 처리합니다. 하나 이상의 “부(secondary)” 서버가 있습니다. 이 서버들은 동기화 상태를 유지하고 데이터의 완전한 복제본을 저장하기 위해 주 서버로부터 데이터 업데이트를 받습니다.

주 서버가 오프라인 상태가 되면(다운되면), 나머지 서버들(그리고/또는 코디네이션 서버들)이 보조 서버 중 하나를 새로운 주 서버로 임명합니다.

아키텍트들은 전통적인 비분산형 데이터베이스에 고가용성을 제공하기 위해 이 패턴을 사용합니다. 그러나 이 아키텍처는 증가된 부하 문제를 해결하는 데는 큰 도움이 되지 않습니다. 이를 달성하기 위해, 샤딩 반드시 사용해야 합니다.

공유무관 분산 데이터베이스

공유무관(Shared-nothing) 아키텍처는 데이터를 “샤드”라고 보통 불리는 파티션으로 쪼개는 것을 포함합니다. 각 샤드는 클러스터 내의 개별 서버(노드)에 존재합니다. 예를 들어, 300개의 레코드와 3개의 노드가 있다면 각 노드는 (이상적으로) 100개의 레코드를 저장하게 됩니다. 추가되는 각 노드는 데이터를 더욱 분할하고 필요에 따라 부하를 계속해서 분산시킬 수 있습니다.

클러스터는 또한 고가용성을 유지하기 위해 노드 간에 샤드를 복제합니다. 예를 들어, 노드 1에 활성 샤드 A가 포함되어 있다면 노드 2에는 복제본 샤드 A가 포함되는 식입니다.

그런 다음, 노드 3이 오프라인 상태가 되면 클러스터는 분산 데이터베이스 클러스터 전체를 온라인 상태로 유지하기 위해 샤드 C의 복제본을 활성 상태로 승격시킵니다.

관계형 데이터베이스의 본질은 개별 데이터 행들을 긴밀하게 결합된 테이블 안에 함께 저장하는 것입니다. 이로 인해 분산 SQL 데이터베이스는 구현이 어려워집니다. 이것이 바로 클러스터링, 고가용성, 그리고 복제 기능이 매우 중요할 때 조직들이 종종 NoSQL을 선택하는 이유입니다. NoSQL은 테이블 외에는 존재할 수 없는 엄격하게 결합된 데이터를 포기하는 대신, 클러스터 내의 어떤 샤드에도 존재할 수 있는 독립적인 데이터와 교환합니다.

분산 데이터베이스 예시

사용하는 분산 데이터베이스에 따라 샤딩은 완전히 자동일 수도 있고, 계획하고 유지 관리하는 데 상당한 노력이 필요할 수도 있습니다.

인기 있는 두 가지 NoSQL 분산 데이터베이스와 그 차이점에 대해 살펴보겠습니다.

카우치베이스가 데이터를 분산하는 방법: vBucket

카우치베이스는 공유나싱(shared-nothing) 클러스터의 노드들에 데이터를 분산하기 위해 vBucket(가상 버킷)이라는 개념을 사용합니다. 하나의 버킷은 1024개의 V벅스 기본적으로. 각 vBucket은 활성 vBucket(기본 복사본) 및 다른 노드의 하나 이상의 복제본 vBucket으로서 노드에 할당됩니다. 클러스터 매니저는 모든 SDK 클라이언트가 중앙 라우터나 프록시 없이 요청을 올바른 노드로 직접 라우팅하는 데 사용하는 vBucket 맵을 유지 관리합니다.

이 기사 공유하기

작가

매튜 D. 그로브스는 코딩을 정말 좋아하는 사람입니다. C#, jQuery, PHP 등 어떤 언어든 상관없이, 그는 무엇이든 풀 리퀘스트를 제출합니다. 그는 90년대에 부모님이 운영하던 피자 가게를 위해 QuickBASIC으로 POS(판매 시점 관리) 앱을 개발한 이래로 줄곧 전문 프로그래머로 활동해 왔습니다. 현재는 Couchbase에서 선임 제품 마케팅 매니저로 근무하고 있습니다. 여가 시간에는 가족과 함께 시간을 보내거나, 레즈(Reds) 경기를 관람하며, 개발자 커뮤니티 활동에 참여합니다. 그는 『AOP in .NET』과 『Pro Microservices in .NET』의 저자이자 Pluralsight 저자이며, Microsoft MVP이기도 합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

개발 시작하기

NoSQL을 탐색하고, 리소스를 찾아보고, 튜토리얼을 시작하려면 개발자 포털을 확인하세요.

카펠라 프리 사용하기

단 몇 번의 클릭으로 카우치베이스(Couchbase)를 직접 체험해 보세요. Capella DBaaS는 시작하기 가장 쉽고 빠른 방법입니다.

연락해

Couchbase 제품군에 대해 더 알고 싶으신가요? 저희가 도와드리겠습니다.