아리운 원생 데이터베이스 POLARDB 압력 테스트 보고서
POLARDB 소개
POLARDB는 아리운 Apsara DB 데이터베이스 팀이 개발한 클라우드 컴퓨팅 구조를 바탕으로 하는 차세대 관계형 데이터베이스로 가장 큰 특징은 컴퓨팅 노드(SQL 해석 및 저장 엔진 계산을 주로 하는 서버)와 저장 노드(블록 저장, 데이터베이스가 빠른 서버)를 분리하는 것이다. 그 다음으로 전통적인 클라우드 데이터베이스와 하나의 실례적인 데이터 복사와 다르다.동일한 인스턴스의 모든 노드(읽기 및 쓰기 노드 및 읽기 전용 노드 포함)는 스토리지 노드의 동일한 데이터에 액세스합니다. 마지막으로 우수한 RDMA 네트워크와 최신 블록 스토리지 기술을 통해 PolarDB의 데이터 백업 소요 시간은 기본 데이터 양에 관계없이 초 단위로 단축됩니다.우리는 POLARDB가 공유 클라우드 컴퓨팅 환경에서 사용자 업무의 신속하고 탄력적인 확장에 대한 강성 수요를 충족시켰을 뿐만 아니라 인터넷 환경에서 사용자가 데이터베이스 서버에 대한 고가용성 수요도 충족시켰다고 추정할 수 있다. (서버가 다운된 후에 데이터를 운반하여 프로세스를 재개하지 않아도 서비스할 수 있다).
다음 테스트는 캥거루 구름 기술부에서 나왔다.
POLARDB 아키텍처
쓰다
POLARDB는 분산 클러스터 아키텍처를 사용하며, 클러스터에는 기본 인스턴스와 읽기 전용 인스턴스가 하나 이상 포함되어 있습니다(일시적으로 하나만 지원되며 고가용성을 보장함).주 인스턴스는 읽기 및 쓰기 요청을 처리하고 읽기 전용 인스턴스는 읽기 요청만 처리합니다.주 인스턴스와 읽기 전용 인스턴스 사이에는 Active-Active의 Failover 방식을 사용하여 데이터베이스의 고가용성 서비스를 제공합니다.
계산과 저장 분리
POLARDB는 컴퓨팅과 스토리지를 분리하는 디자인 이념을 채택하여 공유 클라우드 컴퓨팅 환경에서 사용자 업무의 탄력적인 확장에 대한 강성 수요를 만족시킨다.데이터베이스의 계산 노드(DB Server)는 메타데이터만 저장하고 데이터 파일, Redo Log 등은 원격 저장 노드(Chunk Server)에 저장합니다.각 계산 노드 간에 Redo Log와 관련된 메타데이터 정보만 동기화하면 주 실례와 읽기 전용 실례 사이의 지연을 크게 줄일 수 있고 주 실례가 고장날 때 읽기 전용 실례는 주 서버로 신속하게 전환할 수 있다.
읽기와 쓰기 분리
읽기 및 쓰기 분리 데이터베이스 액세스 기능은 PoLARDB 클러스터에서 기본적으로 무료로 제공되는 투명하고 가용성이 높으며 적응성이 뛰어난 로드 밸런싱 기능입니다.읽기와 쓰기를 통해 주소를 분리하면 SQL은 POLARDB 집단의 각 실례를 자동으로 전송하여 집합적이고 삼키기 쉬운 병발 SQL 처리 능력을 제공한다.
고속 링크 연결
데이터베이스의 계산 노드와 저장 노드 간에 고속 네트워크 연결을 사용하고 RDMA 프로토콜을 통해 데이터를 전송하여 입출력 성능이 더 이상 병목이 되지 않도록 한다.
공유 분산 스토리지
여러 개의 계산 노드가 하나의 데이터를 공유하는 것이지 모든 계산 노드가 하나의 데이터를 저장하는 것이 아니라 사용자의 저장 원가를 크게 낮춘다.새롭게 제작된 분산 블록 장치 및 파일 시스템을 기반으로 스토리지 용량을 온라인으로 원활하게 확장할 수 있으며 단일 서버 구성에 영향을 받지 않고 100TB 이상의 데이터 규모에 대응할 수 있습니다.
데이터 복제본, Parallel-Raft 프로토콜
데이터베이스 저장 노드의 데이터는 다중 복사본 형식으로 데이터의 신뢰성을 확보하고 Parallel-Raft 프로토콜을 통해 데이터의 일치성을 확보한다.장점: 백업 속도가 빠르고 읽기 전용 노드를 늘리는 속도가 빠르다.읽기 전용 인스턴스에는 지연이 없습니다.
매개 변수 POLARDB는 기본적으로 doublewrite buffer를 닫고 binlog를 닫습니다.
압력 측정 방안
sysbencholtp 표준 압축 프로그램을 사용하여 두 장면의 성능을 각각 압축하고 읽으며 쓴다.
환경 준비 PolarDB: 8C64G ECS: 2C2G, CentOS 2.7(3대) Sysbench 0.5
sysbench 설치yum-y install mysql-devel yum-y install automake 설치yum-y installlibtool wgethttps://github.com/akopytov/sysbench/archive/0.5.zip unzip 0.5.zip cd sysbench-0.5 ./autogen.sh ./configure make cd sysbench
압력 측정 절차
준비 데이터sysbenchpath/sysbench−−test=sysbenchpath/sysbench−−test=sysbench_path/tests/db/oltp.lua --mysql-host=ip−−mysql−port=3306−−mysql−user=ip−−mysql−port=3306−−mysql−user=mysql_user --mysql-password=mysqlpassword−−mysql−db=mysqlpassword−−mysql−db=table_name --mysql-table-engine=innodb --oltp-table-size=[[table_size/10] --oltp-tables-count=$oltp_tables_count -db-driver=mysql prepare
주의사항: 1.POLARDB를 테스트할 때 외부 네트워크 연결 문자열을 사용할 수 없는 경우(시간 지연으로 최상의 성능을 얻기 어려운) VPC가 아닌 내부 네트워크 연결 문자열을 사용하여 최상의 성능을 얻으려면 3~4대의 ECS를 사용하여 동시에 압력을 측정해야 Polardb의 최상의 성능을 발휘할 수 있으며, VPC 네트워크 한 대의 ECS 압력을 사용하면 POLARDB의 최상의 성능을 얻을 수 있습니다(VPC 연결 문자열 권장)
2. POLARDB의 특징은 읽기와 쓰기의 분리이다. sysbench 테스트를 할 때 단독으로 읽기와 쓰기를 테스트해야 한다. 읽기와 쓰기의 혼합sysbench 명령 테스트를 피하면 POLARDB의 성능 장점을 최대한 발휘할 수 있다. 상세한 테스트 명령은 다음과 같다.
압력 측정 쓰기 성능
sysbench를 사용하여 데이터를 준비합니다. 단일 테이블 1000만 데이터, 총 100개의 테이블, 각 테이블의 공간은 약 2G입니다.sysbenchpath/sysbench−−test=sysbenchpath/sysbench−−test=sysbenchpath/tests/db/oltp.lua --mysql-host=ip−−oltp−tables−count=ip−−oltp−tables−count=oltp_tables_count --mysql-user=mysqluser−−mysql−password=mysqluser−−mysql−password=mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=[[table_size/10] --mysql-db=tablename−−max−requests=tablename−−max−requests=[tablesize/10]−−max−time=tablesize/10]−−max−time=max_time --oltp_simple_ranges=0 --oltp-distinct-ranges=0 --oltp-sum-ranges=0 --oltporder-ranges=0 --oltp-point-selects=0 --num-threads=$threads --randtype=uniform run
압력 측정 읽기 성능
압력 측정은 5개의 표를 선택하여 각 표에 1000만 개의 데이터, 총 1억 개의 데이터로 압력 측정을 한다.테이블별로 1, 2, 4, 8, 16, 32개의 동시 쓰기 성능을 테스트합니다.sysbenchpath/sysbench−−test=sysbenchpath/sysbench−−test=sysbenchpath/tests/db/oltp.lua --mysql-host=ip−−oltp−tables−count=ip−−oltp−tables−count=oltp_tables_count --mysql-user=mysqluser−−mysql−password=mysqluser−−mysql−password=mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=[[table_size/10] --mysql-db=tablename−−max−requests=tablename−−max−requests=[tablesize/10]−−oltpsimpleranges=0−−oltp−distinct−ranges=0−−oltp−sum−ranges=0−−oltp−order−ranges=0−−max−time=tablesize/10]−−oltpsimpleranges=0−−oltp−distinct−ranges=0−−oltp−sum−ranges=0−−oltp−order−ranges=0−−max−time=max_time --oltp-read-only=on --num-threads=$threads run
주:
$sysbench_path:sysbench
$ip IP
$mysql_user
$mysql_password
$table_name
$oltp_tables_count
$table_size
압력 측정 결과
읽기 성능 측정 결과
32개가 병발되었을 때 가장 좋은 읽기 영역 성능을 얻었습니다. 읽기 QPS는 46813.94이고 평균 SQL 응답 시간은 2.05밀리초입니다.
쓰기 성능 측정 결과 32개가 병발되었을 때 가장 좋은 쓰기 성능을 얻었다. 쓰기 QPS는 156273.72이고 평균 사물 응답 시간은 5.09ms이다.
원문 링크
본고는 운서 지역사회의 오리지널 내용으로 허락 없이 전재할 수 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.