최근 얀덱스 가 SQL 방언 및 ACID 트랜잭션을 지원하는 자체 DBMS인 "YDB"의 소스 코드를 공개했다고 발표했습니다 .
이 DBMS는 처음부터 내결함성 , 자동 장애 복구 및 확장성을 보장하는 것을 목표로 구축되었습니다. 얀덱스는 10개 이상의 노드로 구성된 YDB 클러스터를 운영하며 수백 페타바이트의 데이터를 저장하고 초당 수백만 건의 분산 트랜잭션을 처리하고 있다는 점은 주목할 만합니다.
YDB의 주요 참신함
YDB의 핵심 특징 중 하나는 테이블을 사용하는 관계형 데이터 모델입니다. YQL( YDB 쿼리 언어)은 데이터 스키마를 쿼리하고 정의하는 데 사용되며, 대규모 분산 데이터베이스 작업에 적합하도록 SQL을 변형한 언어 입니다 . 스토리지 스키마를 생성할 때 파일 시스템의 디렉터리처럼 테이블을 트리 구조로 그룹화할 수 있습니다. JSON 형식의 데이터를 처리하기 위한 API도 제공됩니다.
또한 디스크, 노드, 랙, 심지어 개별 데이터 센터에 장애가 발생하더라도 계속 작동하는 내결함성 구성을 생성할 수 있다는 점도 주목할 만합니다 . YDB는 세 개의 가용 영역에 걸쳐 동기식 배포 및 복제를 지원하며, 영역 장애 발생 시에도 클러스터 상태를 유지합니다.
스캔 쿼리를 통한 데이터 액세스와의 호환성을 제공하며 , 데이터베이스에 대한 임시 분석 쿼리를 수행하도록 설계되었고, 읽기 전용 모드로 실행되며 gRPC 흐름을 반환합니다.
또한, 네이티브 PDisk 컴포넌트와 VDisk 레이어를 사용하여 블록 장치에 데이터를 직접 저장하는 방식이 특징입니다 . VDisk 외에도 DSProxy가 실행되어 디스크 가용성과 성능을 분석하고 문제가 감지되면 해당 디스크를 제외합니다.
그 외 주목할 만한 특징은 다음과 같습니다.
- YDB를 기반으로 가상 블록 장치 및 영구 대기열에 이르기까지 다양한 서비스를 구축할 수 있는 유연한 아키텍처입니다. 다양한 유형의 워크로드에 대한 적합성: OLTP 및 OLAP(분석 쿼리).
- 다중 사용자(다중 테넌트) 및 서버리스 구성을 지원합니다.
- 클라이언트를 인증하는 기능. 사용자는 요청 수 및 데이터 크기 측면에서 리소스 소비를 고려하거나 특정 컴퓨팅 리소스 및 저장 공간을 임대/예약하여 공통 공유 인프라에서 자신의 가상 클러스터 및 데이터베이스를 생성할 수 있습니다.
- 사용되지 않는 데이터의 자동 삭제를 위해 기록의 유효 수명을 조정할 수 있습니다.
- DBMS와의 상호 작용 및 요청 제출은 명령줄 인터페이스, 통합 웹 인터페이스 또는 C++, C#(.NET), Go, Java, Node.js, PHP 및 Python용 라이브러리를 제공하는 YDB SDK를 사용하여 수행됩니다.
- 애플리케이션에 대한 지연을 최소화하면서 장애로부터 자동으로 복구하고 데이터를 저장할 때 지정된 중복성을 자동으로 유지합니다.
- 기본 키에 대한 인덱스 자동 생성 및 임의 열 액세스의 효율성을 개선하기 위해 보조 인덱스를 정의하는 기능.
- 수평적 확장성. 저장되는 데이터의 로드와 크기가 커짐에 따라 새로운 노드를 연결하는 것만으로 클러스터를 확장할 수 있습니다. 컴퓨팅 계층과 스토리지 계층이 분리되어 컴퓨팅과 스토리지를 별도로 확장할 수 있습니다. DBMS 자체는 사용 가능한 하드웨어 리소스를 고려하여 데이터 및 로드의 균일한 분포를 모니터링합니다. 세계 여러 지역의 여러 데이터 센터를 포괄하는 지리적으로 분산된 구성을 구현할 수 있습니다.
- 여러 노드와 테이블에 걸쳐 있는 쿼리를 처리할 때 강력한 일관성 모델 및 ACID 트랜잭션을 지원합니다. 성능을 향상시키기 위해 일관성 검사를 선택적으로 비활성화할 수 있습니다.
- 자동 데이터 복제, 크기 또는 로드 증가 시 자동 파티셔닝(파티셔닝, 샤딩), 노드 간 자동 로드 및 데이터 밸런싱.
마지막으로, YDB는 얀덱스 프로젝트에서 사용되고 있으며, 코드는 C/C++로 작성되었고 아파치 2.0 라이선스 하에 배포된다는 점을 알려드립니다 . 소스 코드와 자세한 내용은 다음 링크에서 확인하실 수 있습니다.