Tech/DB
Vitess 용어
해리리_
2024. 10. 27. 22:54
일반적으로 MySQL은 단일서버에서 운영되고 필요에 따라 여러 서버를 구축해서 샤딩할 수 있다. 하지만 자동 샤딩 기능은 없기 때문에 데이터가 커진다면 애플리케이션 레벨에서 수동으로 샤딩 로직을 구성해야 한다. 그런데 Vitess에선 이걸 자동으로 해준다. 마치 MySQL 을 쓰는 것처럼 클라이언트에서 사용하면 되고, 데이터만 확장해서 샤딩 구조를 사용할 수 있다. 즉 MySQL 호환 버전의 클러스터링 시스템이 vitess 라고 보면 된다.
Vitess 란
컨테이너 환경에서 제공되는 확장과 관리가 용이한 MySQL 기반의 분산 데이터베이스.
Scalable. Reliable. MySQL-compatible. Cloud-native. Database.
docs 에서 말하는 주요 기능은 아래와 같다.
- built-in 자동 샤딩 기능을 통해 확장 가능
- 데이터 안정성 보장 (HA, 장애복구)
- MySQL 호환. 기존 MySQL 드라이버를 그대로 사용하면 되고, vanilla MySQL에 접속하기 위해서 mysqld 에 connect 하던 것 → vtgate 서비스에 connect 하도록 바꿔주기만 하면 됨.
- Cloud Native DB 로, 클라우드 환경에서 배포,관리, 확장 가능
MySQL 과 Vitess의 차이
- 경량 커넥션: MySQL 은 많은 메모리와 CPU 를 사용하지만, Vitess 는 connection pooling을 통해 경량의 connect를 소수의 MySQL connection pool로 매핑해서 리소스 효율을 높임
- 쿼리 성능 보호: MySQL은 잘못된 쿼리로 DB 성능에 영향 끼칠 수 있으나, Vitess는 성능 저해 위험이 있는 쿼리를 rewite 함.
- 샤딩 지원: MySQL은 수동으로 샤딩 코드를 작성하고 애플리케이션에 샤딩 로직을 작성해야 하지만, Vitess는 자동으로 샤딩 지원함.
- HA/replication: MySQL 은 단일서버 기반의 DB로, MySQL cluster의 경우 수동으로 복제 같은 기능을 적용해야 하는데 Vitess에서는 DB 서버의 lifecycle을 자동 관리해준다.
- 쿼리 라우팅 기능 지원함.
Vitess의 구조
Keyspace
- Logical 한 데이터베이스를 의미
- 샤딩을 할 수도 있고 안할 수도 있는데, 샤딩을 한다면 해당 keyspace는 여러 MySQL DB에 매핑된다.
- 애플리케이션단에서는 하나의 DB 로 보인다.
Shard
- keyspace의 하위 집합으로, keyspace 는 항상 하나 이상의 shard를 갖고 있다.
- 샤드는 일반적으로 하나의 MySQL Primary 및 Replicas가 포함된다.
- 단일샤드라면 MySQL 사용하듯이 사용하면 된다.
VTGate
- VTTablet 의 상위에서 프록시 서버 역할을 하고, 적절한 VTTablet으로 쿼리를 전달한다.
- VTGate 를 통해, 애플리케이션에서 하나의 데이터베이스로 보여지게 한다.
VTTablet
- mysqld 에 붙어서 mysqld를 컨트롤한다.
- 하나의 Pod으로 띄워져 있다.
VSchema
- 하나의 논리적인 DB를 어떻게 물리적으로 샤드할 것인지 표현한다.
- 샤드가 필요 없다면 정의하지 않아도 된다.
KeyspaceID
- 분산 DB의 샤딩키와 동일한 개념
- DB에 저장되지 않고 런타임에 계산되는 값으로, 별도 컬럼 없음
Vindex
- 레코드에 Keyspace ID를 찾아낼 수 있는 방법을 제공한다.
- 질의를 어떤 샤드로 라우팅해야하는지 결정하는 데 사용된다.
- 한번 정해지면 변경할 수 없다.
Primary Vindex
- primary vindex 는 unique한 keyspace-id를 생성하고, 이를 위한 function이 존재한다. (ex. xxhash)
Lookup Vindex
- 개념적으로 RDBMS 의 secondary Index 에 해당된다.
- primary vindex로 처리할 수 없는 쿼리에 대해 최적화한다.
- 새로운 row가 들어오면 vitess가 내부적으로 lookup vindex를 변경해준다.
Vitess Workflow
- Vitess 내부에서 VReplication 이라는 내부 복제 시스템을 이용해서, 데이터를 다른 위치로 복제하거나 이동시키는 시스템
- 리샤딩, 마이그레이션, 복제 작업 등에 사용됨.
- workflow type
- MoveTables: 테이블을 한 keyspace → 다른 keyspace 로 옮길 때 사용
- Reshard : 샤드 사이에서 데이터를 분할하거나 합칠 때 사용
- Materialize: 다른 데이터베이스가 샤드로 데이터를 복제해서 사용 가능한 상태로 만들때 사용
Workload Mode
Vitess에서 DB 작업을 처리하기 위해 최적화된 설정 모드고, 이 값에 따라 성능 최적화와 리소스 관리를 한다.
- OLTP (Online Transaction Processing) : default 모드. 빠른 응답 속도를 위해 최적화된 모드
- oltp 모드 하에서는 모든 쿼리 결과가 10만건, 트랜잭션 최대 허용 시간이 60초로 제한됨. (row count exceed error 발생함)
- OLAP (Online Analytical Processing): 분석이나 복잡한 조회 작업 처리에 최적화된 모드.
- olap 모드로 변경하면 더 큰 결과, 더 오래 걸리는 쿼리 수행 가능
Execution Plans
- Vitess는 쿼리를 최선의 방법을 측정하기 위해 VTGate와 VTTablet 계층 모두에서 파싱한다.
- 실행계획은 쿼리와 VSchema 따라 달라진다. Vitess의 기본 목적은 가능한 한 많은 작업을 아래의 MySQL 인스턴스로 push down 하는 것이고, 이게 불가능할 경우 vitess는 여러 소스로부터 입력을 수집하고 쿼리 결과를 병합하여 올바른 쿼리 결과를 생성하는 계획을 사용한다.
Reference Table
- 여러 개 샤드에 sync 해서 동일한 복제본을 만들 수 있게 하는 개념으로, 모든 샤드에 복제해둠으로써 cross-keyspace 할 필요 없이 효과적으로 쿼리 결과를 제공할 수 있게 한다.
- 크기가 작지만 공통적으로 앱에서 사용되는 look-up 용 테이블에 유용한 개념이다.
728x90