![](https://seokwoo.kim/wp-content/uploads/2023/02/yugabytedb-social-1.png)
100% 오픈소스 데이터베이스 YugabyteDB
YugabyteDB 는 YugaByte Inc.에서 개발한 분산형 SQL 데이터베이스입니다. YugabyteDB는 PostgreSQL을 기반으로 하며, 분산 환경에서 높은 가용성과 확장성을 제공하는 것이 특징입니다. 또한, 다중 클라우드와 온프레미스 환경에서 운영이 가능하며, ACID 트랜잭션을 지원하며, NoSQL과 SQL을 모두 지원하는 특징을 가지고 있습니다.
YugabyteDB는 클라우드 네이티브, 컨테이너화된 어플리케이션, 대규모 데이터 분석 및 IoT 등 다양한 분야에서 사용될 수 있습니다. YugabyteDB의 구조는 Master-less 구조로 구성되어 있기 때문에 매우 높은 가용성을 보장하며, 분산된 노드 간의 자동 샤딩과 리밸런싱을 지원하기 때문에 확장성이 우수합니다.
또한, YugabyteDB는 개발자들이 PostgreSQL 문법과 기능을 사용하여 쉽게 마이그레이션할 수 있으며, YugabyteDB의 배포판인 YugaByte Platform은 Kubernetes와 같은 컨테이너 오케스트레이션 툴과의 연동도 원활합니다. 이러한 이유로 YugabyteDB는 현재 많은 기업들이 사용하고 있으며, 오픈소스 버전인 YugabyteDB Community Edition도 제공하고 있습니다.
YugabyteDB는 아래의 그림처럼 YSQL Query Layer 와 DocDB torage Layer의 계층 구조를 가지고 있습니다.
![](https://www.seokwoo.kim/wp-content/uploads/2023/02/image-338-1.png)
![](https://www.seokwoo.kim/wp-content/uploads/2023/02/image-335-1.png)
Yugabyte Query Layer (YQL)
이 계층은 쿼리를 받아 파싱하고 실행하는 역할을 합니다.
현재 두 가지 유형의 분산 SQL API를 지원합니다. (새 API가 추가될 수 있음)
- Yugabyte SQL (YSQL)
- PostgreSQL과 호환되는 쿼리 엔진입니다.
- RDBMS 성격을 가짐
- Yugabyte Cloud Query Language (YCQL)
- Cassandra Query Language( CQL)와 호환되는 쿼리 엔진입니다.
- NoSQL 성격을 가짐
DocDB
DocDB는 트랜잭션, 샤딩, 복제 및 지속성을 담당하는 YugabyteDB의 분산 문서 저장소입니다.
전달받은 쿼리 데이터는 RocksDB를 기반으로 하는 키-값 저장소를 사용하여 저장됩니다.
개념 1: 노드
프로덕션에서 YugabyteDB는 가상, 물리적 또는 컨테이너화될 수 있는 여러 머신의 클러스터에 배포됩니다. 일반적으로 노드라는 용어는 클러스터의 단일 시스템을 나타내는 데 사용됩니다.
그렇다면 YugabyteDB 노드 내부에는 무엇이 있을까요? 논리적 관점과 물리적 관점에서 살펴보겠습니다. YugabyteDB에는 Yugabyte Query Layer 및 DocDB 라는 2개의 논리 계층이 있습니다 . YQL 계층에는 SQL 구현, 해당 쿼리/명령 컴파일 및 런타임 구성 요소와 같은 API 특정 측면이 포함됩니다. 그리고 DocDB는 샤딩, 복제 일관성 및 기타 스토리지 하위 시스템과 같은 기본 측면을 담당하는 분산 문서 저장소입니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts2.png)
YugabyteDB 노드의 논리적 구조
물리적 측면에서 YB-TServer (일명 YugabyteDB 태블릿 서버)는 주요 데이터베이스 프로세스입니다. 애플리케이션 클라이언트 쿼리와 자동 샤딩, 복제, 트랜잭션 관리 작업을 담당합니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts3.png)
YugabyteDB 노드의 물리적 아키텍처
또한 시스템 메타 데이터(예: 샤드-노드 매핑)를 저장하고 자동 로드 밸런싱, 테이블 생성 또는 스키마 변경. YB-Master는 애플리케이션 클라이언트가 사용하는 일반 IO 경로에 포함되지 않습니다. 시스템에 존재하는 YB-TServer의 수에 관계없이 안정성을 위해 시스템 전체에서 실행되는 YB-Master 프로세스가 최소 3개 이상 있어야 합니다.
개념 2: 클러스터
클러스터는 함께 실행되는 논리적 노드 그룹입니다. 클러스터링은 고가용성과 여러 노드에서 애플리케이션 워크로드의 로드 밸런싱을 위해 사용됩니다. 클러스터에는 최소 3개의 노드가 있어야 하며 워크로드 수요가 증가함에 따라 필요한 만큼의 노드로 수평 확장할 수 있습니다. 클러스터는 단일 지역의 여러 영역, 단일 클라우드의 여러 지역 또는 여러 클라우드에 걸쳐 전역 범위 및 규모를 달성할 수 있습니다.
YugabyteDB 배포에서 클러스터 노드 간의 데이터 복제는 기본적으로 강력한 일관성을 보장하는 동기식으로 설정될 수 있습니다. 선택적으로 타임라인 일관성(제한된 부실 포함)을 보장하는 비동기 복제를 읽기 전용 복제본의 컨텍스트에서 구성할 수 있습니다. YugabyteDB는 기존 NoSQL 데이터베이스에서 흔히 볼 수 있는 어떤 형태의 최종 일관성도 지원하지 않습니다. 동기적으로 복제된 클러스터는 시스템에 대한 쓰기를 허용할 수 있는 기본 클러스터로 알려져 있습니다. 기본 클러스터는 읽기 전용 복제본으로 알려진 비동기 복제 클러스터의 소스가 될 수 있습니다. 이러한 읽기 전용 복제본을 통해 애플리케이션은 원격 지역에서 대기 시간이 짧은 읽기를 제공할 수 있습니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts4.png)
5개 노드가 있는 YugabyteDB 클러스터의 논리적 아키텍처
위의 그림에서 볼 수 있듯이 클러스터를 확장하는 것은 단순히 클러스터에 있는 YB-TServer의 수를 늘리거나 줄이는 것과 관련됩니다. YB-TServer를 추가하거나 제거하면 기본적으로 사용 가능한 YB-TServer에서 데이터 샤드(이후 섹션에서 설명)가 자동으로 재조정됩니다. 위의 논리 구조에는 그림에 표시되지 않은 3개의 YB-마스터도 포함되어 있습니다.
개념 3: 유니버스 (세계관)
YugabyteDB의 유니버스는 하나의 기본 클러스터와 여러 선택적 읽기 복제본 클러스터로 구성됩니다. 각 클러스터는 하나 이상의 가용 영역, 지역 또는 여러 하이브리드 클라우드에 있을 수 있는 노드 모음에 설치됩니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts5.png)
YugabyteDB 유니버스의 논리적 아키텍처
함께 클러스터는 유니버스로 알려진 단일 논리적이고 복원력이 뛰어난 글로벌 규모의 데이터베이스로 기능합니다.
개념 4: SQL 테이블에서 태블릿 및 노드로
애플리케이션은 완전 관계형 Yugabyte SQL(YSQL) API 또는 SQL 기반 유연한 스키마 Yugabyte Cloud QL(YCQL) API를 사용하여 YugabyteDB의 데이터를 관리할 수 있습니다 .
- YSQL API는 JOIN, 참조 무결성 및 다중 테이블 트랜잭션과 같은 완전한 관계형 SQL 기능이 필요한 동시에 확장 및 글로벌 분산이 필요한 RDBMS 워크로드에 가장 적합합니다.
- YCQL API는 쓰기 집약적인 애플리케이션과 초고속 쿼리 요구 사항에 맞게 고도로 최적화된 준관계형 분산 SQL을 원하는 인터넷 규모의 OLTP 앱에 가장 적합합니다.
대부분의 분산 데이터베이스와 유사하게 YugabyteDB의 테이블 데이터는 여러 청크 또는 샤드로 분할되어 여러 노드에 분산됩니다. 이 샤드는 YugabyteDB의 분산 문서 저장소인 DocDB에서 태블릿 이라고 합니다 . DocDB에서는 초기 샤딩 및 노드 간 지속적인 샤드 재조정이 완전히 자동으로 이루어집니다.
DocDB의 데이터 샤딩은 기본 키의 분할 열에 대한 해싱 함수의 도움으로 발생합니다. 또한 기본 키에는 지정된 파티션에서 관련 데이터를 정렬된 방식으로 함께 배치하는 데 도움이 되는 추가 범위 기반/클러스터 열이 포함될 수 있습니다. DocDB는 여러 노드에 워크로드를 균등하게 분배하는 해시 기반 파티셔닝 외에도 정렬된 레코드를 쿼리해야 하는 경우에 유용한 범위 기반 데이터 파티셔닝을 지원할 계획입니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts6.png)
데이터 읽기 또는 쓰기가 발생하면 기본 키의 파티션 열이 해시되고 태블릿을 호스팅하는 올바른 태블릿 서버로 요청이 라우팅됩니다.
개념 5: 복제 및 저장
복제 요인에 따라 태블릿이 복제되고 태블릿 피어가 있습니다. 예를 들어 아래 그림과 같이 Tablet 16에는 3개의 피어가 있으며 각 피어는 노드 중 하나가 오프라인이 될 경우 고가용성을 위해 별도의 노드에 배치됩니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts7.png)
분산 시스템의 세계에서 Raft는 탄력적이고 강력한 일관성 시스템을 구축할 때 사실상의 합의 복제 알고리즘이 되었습니다. DocDB는 태블릿 리더 선택과 태블릿 피어 간의 데이터 복제를 위해 Raft 프로토콜을 사용합니다. 모든 태블릿과 해당 피어는 아래 그림과 같이 YugabyteDB에서 Raft 그룹을 형성합니다. “Raft 합의 기반 복제 프로토콜은 YugabyteDB에서 어떻게 작동합니까?” 에서는 이러한 복제 아키텍처에서 파생되는 다양한 이점에 대해 설명합니다.
![](https://www.yugabyte.com/wp-content/uploads/2019/02/YugaByte-DB-vs-PostgreSQL-vs-MongoDB-concepts8.png)
태블릿 피어의 쿼럼에서 Raft를 통해 데이터가 복제되면 DocDB는 해당 노드의 로컬 스토리지 엔진에 변경 사항을 적용합니다. 이 로컬 스토리지 엔진은 널리 사용되는 포함 가능한 빠른 키-값 스토리지 엔진인 RocksDB 의 고도로 맞춤화된 버전입니다 . DocDB가 RocksDB를 활용하는 방법에 대해 자세히 알아보려면 “RocksDB에 고성능 문서 저장소를 구축한 방법”을 확인하십시오 .
DB-Engines Ranking에서 YugabyteDB 93/410 위치
![](https://www.seokwoo.kim/wp-content/uploads/2023/02/image-336-1-1024x660.png)
![](https://www.seankim.life/wp-content/uploads/2023/02/image-337-1024x302.png)