阿里雲原生資料庫POLARDB壓力測試報告

HitTwice發表於2018-07-27

作者:桐碧2018 來源:雲棲社群

原文連結: https://yq.aliyun.com/articles/618651?spm=a2c4e.11153940.bloghomeflow.427.162d291aRoS8gf



POLARDB介紹

POLARDB是阿里雲ApsaraDB資料庫團隊研發的基於雲端計算架構的下一代關係型資料庫,其最大的特色是計算節點(主要做SQL解析以及儲存引擎計算的伺服器)與儲存節點(主要做資料塊儲存,資料庫快照的伺服器)分離,其次,與傳統的雲資料庫一個例項一份資料複製不同,同一個例項的所有節點(包括讀寫節點和只讀節點)都訪問儲存節點上的同一份資料,最後,藉助優秀的RDMA網路以及最新的塊儲存技術,PolarDB的資料備份耗時可以做到秒級別(備份時間與底層資料量無關),這三點相結合,我們可以推斷出POLARDB不但滿足了公有云計算環境下使用者業務快速彈性擴充套件的剛性需求(只讀例項擴充套件時間與底層資料量無關),同時也滿足了網際網路環境下使用者對資料庫伺服器高可用的需求(伺服器當機後無需搬運資料重啟程式即可服務)。

以下測試來自於袋鼠雲技術部。

POLARDB架構

POLARDB_

一寫多讀

POLARDB採用分散式叢集架構,一個叢集包含一個主例項和至少一個只讀例項(暫時僅支援一個,用於保障高可用)。主例項處理讀寫請求,只讀例項僅處理讀請求。主例項和只讀例項之間採用Active-Active的Failover方式,提供資料庫的高可用服務。

計算與儲存分離

POLARDB採用計算與儲存分離的設計理念,滿足公有云計算環境下使用者業務彈性擴充套件的剛性需求。資料庫的計算節點(DB Server)僅儲存後設資料,而將資料檔案、Redo Log等儲存於遠端的儲存節點(Chunk Server)。各計算節點之間僅需同步Redo Log相關的後設資料資訊,極大降低了主例項和只讀例項間的延遲,而且在主例項故障時,只讀例項可以快速切換為主伺服器。

讀寫分離

讀寫分離資料庫接入功能,是POLARDB叢集預設免費提供的一個透明、高可用、自適應的負載均衡能力。透過讀寫分離地址,SQL請求自動轉發到POLARDB叢集的各個例項,提供聚合、高吞吐的併發SQL處理能力。

高速鏈路互聯

資料庫的計算節點和儲存節點之間採用高速網路互聯,並透過RDMA協議進行資料傳輸,使得I/O效能不再成為瓶頸。

共享分散式儲存

多個計算節點共享一份資料,而不是每個計算節點都儲存一份資料,極大降低了使用者的儲存成本。基於全新打造的分散式塊裝置和檔案系統,儲存容量可以線上平滑擴充套件,不會受到單機伺服器配置的影響,可應對上百TB級別的資料規模。

資料多副本、Parallel-Raft協議

資料庫儲存節點的資料採用多副本形式,確保資料的可靠性,並透過Parallel-Raft協議保證資料的一致性。
優點:
備份速度快,增加只讀節點速度快。
只讀例項無延遲。

引數
POLARDB預設關閉了doublewrite buffer,關閉了binlog。
image

壓測方案

使用sysbench oltp標準壓測程式分別壓測讀、寫兩種場景的效能。

環境準備
PolarDB: 8C64G
ECS:2C2G, CentOS 2.7(三臺)
Sysbench 0.5

sysbench安裝
yum -y install mysql-devel 

yum -y install automake 

yum -y install libtool 

wget 
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毫秒。
image
bbbbf5ce278d2494f58716d1545be7bec97b6073

寫效能壓測結果
32個併發的時候,取得了最好的寫入效能,寫QPS為156273.72,平均事物響應時間5.09毫秒。
image
f3ed45882e5e9b7ee339babfceaad2a53f87c0b0


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31473948/viewspace-2168507/,如需轉載,請註明出處,否則將追究法律責任。

相關文章