ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CNCF] Vitess?
    Development 2020. 7. 18. 19:35

    Vitess?

    대규모 오픈소스 데이터베이스 인스턴스 클러스터를 구축, 확장 및 관리하기 위한 데이터베이스 솔루션. MySQLMariaDB를 지원합니다. 전용 하드웨어(dedicated hardware)에서와 마찬가지로 퍼블릭 또는 프라이빗 클라우드 아키텍처에서 효과적으로 실행되도록 설계되었습니다. 중요 SQL 기능을 NoSQL 데이터베이스의 확장성과 결합 합니다.

    전용 하드웨어(dedicated hardware)란 회사가 단독으로 사용할 수 있도록 보유하고 있는 컴퓨팅 리소스 풀을 말한다.
    1. 응용 프로그램 변경 사항을 최소로 유지하면서 샤드를 허용하여 SQL 데이터베이스 확장
    2. 베어메탈에서 프라이빗 또는 퍼블릭 클라우드로 마이그레이션
    3. 많은 수의 SQL 데이터베이스 인스턴스 배포 및 관리

    Vitess에는 기본 쿼리 프로토콜을 사용하는 JDBC 및 Go 데이터베이스 드라이버가 포함되어 있습니다. 또한 거의 모든 다른 언어와 호환되는 MySQL 서버 프로토콜을 구현합니다.

    Features

    • Performance

    • Connection poolng - 성능을 최적화하기 위해 여러개의 front-end 응용 프로그램 쿼리를 MySQL 연결 풀에 연결.

      • Query de-duping - 실행 중인 쿼리가 실행되는 동안 수신된 동일한 요청에 대해 실행 중인 쿼리 결과를 재사용.

      • Transaction manager - 동시 트랜잭션 수를 제한하고 마감 시간을 관리하여 전체 처리량을 최적화.

    •  Protection

      • Query rewriting and sanitization(쿼리 다시 쓰기 및 삭제) - 제한을 추가하고 결정적이지 않은 업데이트를 방지

        • 비결정적(non-deterministic) - 같은 입력을 넣어도 경우에 따라 다른 결과가 나오는 기계나 프로그램의 성질

      • Query blacklisting - 규칙을 사용자 지정하여 문제가 발생할 수 있는 쿼리가 데이터베이스에 충돌하지 않도록 방지

      • Query Killer - 데이터를 반환하는 데 너무 오래 걸리는 쿼리를 종료

      • Table ACLs - 연결된 사용자를 기준으로 테이블에 대한 ACL(엑세스 제어 목록)을 지정

    • Monitoring

      • 성능 분석 도구를 사용하여 데이터베이스 성능을 모니터링, 진단 및 분석할 수 있다.

    • Topology Management Tools

      • 마스터 관리 도구(재분리 핸들)

      • 웹 기반 관리 GUI

      • 여러 데이터 센터/지역에서 작동하도록 설계됨

    • Sharding

      • 사실상 완벽한 동적 재공유

      • 수직 및 수평 sharding 제공

      • 사용자 정의 스키마를 연결할 수 있는 멀티 샤딩 스키마

    Architecture

    Vitess 플랫폼은 일돤된 메타데이터 저장소에 의해 지원되는 다수의 서버 프로세스, 명령줄 유틸리티 및 웹 기반 유틸리티로 구성됩니다. 

    애플리케이션의 현재 상태에 따라 다양한 프로세스 흐름을 통해 완전한 Vitess 구현에 도달할 수 있습니다. 예를 들어, 처음부터 서비스를 구축하는 경우 Vitess를 사용한 첫 번째 단계는 데이터베이스 토폴리지를 정의하는 것입니다. 그러나 기존 데이터베이스를 확장해야 하는 경우 연결 프록시를 배포하는 것부터 시작하십시오.

    Vitess 도구 및 서버는 전체 데이터베이스 제품군에서 시작하든, 소규모로 시작하여 시간에 따라 확장하든 상관없이 도움이 되도록 설계되어 있습니다. 소규모 구현의 경우 연결 풀링 및 쿼리 다시 쓰기와 같은 vttablet 기능을 통해 기존 하드웨어에서 더 많은 것을 얻을 수 있습니다. 그런 다음 Vitess의 자동화 출은 대규모 구현을 위해 추가적인 이점을 제공합니다.

    VTGate

    • 경량 프록시 서버

    • 트래픽을 올바른 vttablet으로 라우팅

    • 통합된 결과를 클라이언트에 다시 반환

    • 캐시를 두어 중복 쿼리를 발생하지 않도록 동작한다.

    VTGate는 트래픽을 올바른 VTTablet 서버로 라우팅하고 통합된 결과를 클라이언트로 다시 반환하는 경량 프록시 서버입니다. MySQL 프로토콜과 Vitess gRPC 프로토콜을 모두 사용합니다. 따라서 애플리케이션이 MySQL Server인 것처럼 VTGate에 연결할 수 있습니다.

    적절한 VTTablet 서버로 쿼리를 라우팅할 때 VTGate는 샤딩 방식, 필요한 지연 시간, 테이블 및 해당 기본 MySQL 인스턴스의 가용성 등을 고려합니다.

    Execution Plans

    Vitess는 최적의 쿼리 실행 방법을 평가하기 위해 VTGate 및 VTTablet 계층 모두에서 쿼리를 구분 분석합니다. 이 평가를 쿼리 계획이라고 하며 쿼리 실행 계획이 생성됩니다.

    실행 계획은 쿼리 및 관련 VSchema에 따라 달라집니다. Vitess의 계획 전략의 기본 목표 중 하나는 가능한 많은 작업을 기본 MySQL인스턴스로 푸시하는 것입니다. 이렇게 할 수 없는 경우 Vitess는 여러 소스에서 입력을 수집하고 결과를 병합하여 올바른 쿼리 결과를 생성하는 계획을 사용합니다.

    Evaluation Model

    실행 계획은 각각 특정 작업을 구현하는 운영자로 구성됩니다. 연산자는 전체 실행 계획을 나타내는 트리 모양의 구조로 결합됩니다. 계획은 각 연산자를 트리의 노드로 나타냅니다. 각 연산자는 입력 0개 이상의 행으로 사용하고 출력 0개 이상의 행으로 생성합니다. 즉, 한 연산자의 출력이 다음 연산자의 입력이 됩니다. 트리에서 두 개의 분기를 결합하는 연산자는 두 개의 들어오는 스트림의 입력을 결합하고 단일 출력을 생성합니다. 

    Topology Service

    • 메타데이터(running servers, sharding schema, replication graph)를 저장

    • etcd, Apache Zookeeper, consul을 사용 가능

    TOPO 또는 잠금 서비스라고도 합니다.

    토폴리지 서비스는 서로 다른 서버에서 실행되는 백앤드 프로세스의 집합입니다. 이러한 서버는 토폴리지 데이터를 저장하고 분산 잠금 서비스를 제공합니다.

    Vitess는 플러그인 시스템을 사용하여 분산된 일관된 키 값 저장소를 제공하는 것으로 간주되는 토폴리지 데이터 저장을 위한 다양한 백앤드를 지원합니다. 기본 토폴리지 서비스 플러그인은 etcd2가 있습니다.

    • 태블릿을 클러스터로 조정할 수 있습니다.

    • Vites는 태블릿을 검색 할 수 있으므로 쿼리를 라우팅 할 위치를 알 수 있습니다.

    • 클러스터의 여러 다른 서버에 필요하고 서버를 다시 시작할 때까지 지속되어야하는 데이터베이스 관리자가 제공 한 Vites 구성을 저장합니다.

    Vitess 클러스터에는 하나의 글로벌 토폴로지 서비스와 각 셀에 로컬 토폴로지 서비스가 있습니다. 클러스터는 오버로드 된 용어이고 하나의 Vitess 클러스터는 각각 고유 한 글로벌 토폴로지 서비스를 가지고 있다는 점에서 다른 클러스터와 구별되므로 각 Vitess 클러스터를 toposphere라고합니다.

    Global Topology

    글로벌 토폴리지 서비스는 자주 변경되지 않는 Vitess 전체 데이터를 저장합니다. 특히, 각 샤드에 대한 마스터 태블릿 별칭뿐만 아니라 키패스와 샤드에 대한 데이터도 포함되어 있습니다.

    글로벌 토폴리지는 리프레시 및 리프레시드를 비롯한 일부 작업에 사용됩니다. 설계상 글로벌 토폴리지 서비스는 많이 사용되지 않습니다.

    단일 셀이 고장 나더라도 살아남기 위해서는 글로벌 토폴리지 서비스에는 여러 셀 노드가 있어야 하며, 셀 고장 발생 시 쿼럼을 유지하기에 충분해야 합니다.

    Local Topology

    각 로컬 토폴리지에는 자체 셀과 관련된 정보가 들어있습니다. 특히, 셀에 있는 태블릿에 대한 데이터, 셀에 대한 키 공간 그래프, 셀에 대한 복제 그래프가 포함되어 있습니다. 

    Vitess가 태블릿을 검색하고 태블릿이 오갈 때 라우팅을 조정하려면 로컬 토폴리지 서비스를 사용할 수 있어야 합니다. 그러나 토폴리지 서비스에 대한 호출은 안정적인 상태에서 쿼리를 제공하는 중요한 경로에서 수행되지 않습니다. 즉, 토폴리지를 일시적으로 사용할 수 없는 경우에도 쿼리가 처리됩니다. 

    Tablet

    태블릿은 mysqld 프로세스와 해당 vttablet 프로세스의 조합으로, 일반적으로 동일한 시스템에서 실행됩니다. 각 태블릿에는 현재 태블릿에서 수행하는 역할을 지정하는 태블릿 유형이 할당됩니다.

    쿼리는 VTGate 서버를 통해 태블릿으로 라우팅됩니다.

    • master : 현재 샤드의 MySQL 마스터가 되는 복제본 태블릿

    • replica : 마스터로 승격할 수 있는 MySQL 복제본입니다. 일반적으로 이러한 요청은 웹 사이트의 프런트앤드와 같은 실시간 사용자 대명 요청을 처리하기 위해 예약됩니다.

    • rdonly : 마스터로 승격할 수 없는 MySQL 복제본입니다. 일반적으로 백업, 다른 시스템에 데이터 덤프, heavy analytical queries, MapReduce, resharding 등의 백그라운드 프로세싱 작업에 사용됩니다.

    • backup : 일관된 스냅 샷에서 복제를 중지 한 태블릿으로 샤드의 새 백업을 업로드 할 수 있습니다. 완료되면 복제를 재개하고 이전 유형으로 돌아갑니다.

    • restore : 데이터없이 시작하여 최신 백업에서 자체적으로 복원중인 태블릿입니다. 완료되면 백업의 GTID 위치에서 복제를 시작하고 복제본 또는 rdonly가됩니다.

    vttablet

    • MySQL 인스턴스 앞에 있는 프록시 서버
    • 유해한 퀄리로부터 MySQL을 보호
    • Connection Pooling
    • Query rewriting
    • Hot row protection

    vtctl

    vtctl은 Vitess 클러스터를 관리하는데 사용되는 명령줄 도구입니다. 독립 실행형 도구(vtctl)와 클라이언트-서버(vtctld와 함께 vtctlclinet)로 모두 사용할 수 있습니다. 클라이언트를 원격으로 사용할때 추가적인 보안 계층을 제공하기 때문에 클라이언트-서버를 사용하는 것이 권장됩니다.

    vtctl을 사용하면 마스터 및 복제본 데이터베이스를 식별하고, 테이블 생성, 페일오버 시작, resharding 작업을 수행하는 등의 동작을 할 수 있습니다.

    vtctl이 작업을 수행하면 필요에 따라 토폴리지 서비스가 업데이트됩니다. 다른 Vitess 서버는 이러한 변화를 관찰하고 그에 따라 반응합니다. 예를 들어 vtctl을 사용하여 새 마스터 데이터베이스로 페일오버 하는 경우 vtgate는 변경 사항을 보고 향후 쓰기 작업을 새 마스터로 지시합니다.

    vtctld

    vtctld는 토폴리지 서비스에 저장된 정보를 검색할 수 있는 HTTP 서버입니다. 이 기능은 문제를 해결하거나 서버 및 현재 상태에 대한 개괄적인 개요을 얻는 데 유용합니다.

    vtctld는 vtctlclient 연결의 서버 역할도 합니다.

    댓글

2017 TIFY Team All Rights Reserved.