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의 차이


  1. 경량 커넥션: MySQL 은 많은 메모리와 CPU 를 사용하지만, Vitess 는 connection pooling을 통해 경량의 connect를 소수의 MySQL connection pool로 매핑해서 리소스 효율을 높임
  2. 쿼리 성능 보호: MySQL은 잘못된 쿼리로 DB 성능에 영향 끼칠 수 있으나, Vitess는 성능 저해 위험이 있는 쿼리를 rewite 함.
  3. 샤딩 지원: MySQL은 수동으로 샤딩 코드를 작성하고 애플리케이션에 샤딩 로직을 작성해야 하지만, Vitess는 자동으로 샤딩 지원함.
  4. HA/replication: MySQL 은 단일서버 기반의 DB로, MySQL cluster의 경우 수동으로 복제 같은 기능을 적용해야 하는데 Vitess에서는 DB 서버의 lifecycle을 자동 관리해준다.
  5. 쿼리 라우팅 기능 지원함.

 

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 용 테이블에 유용한 개념이다. 

출처: https://vitess.io/

728x90