阿里雲原生數據庫POLARDB壓力測試報告

阿里雲原生數據庫POLARDB壓力測試報告

 

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 https://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=sysbench_path/tests/db/oltp.lua --mysql-host=ip−−mysql−port=3306−−mysql−user=mysql_user --mysql-password=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/tests/db/oltp.lua --mysql-host=ip−−oltp−tables−count=oltp_tables_count --mysql-user=mysqluser−−mysql−password=mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=[table_size/10] --mysql-db=tablename−−max−requests=[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/tests/db/oltp.lua --mysql-host=ip−−oltp−tables−count=oltp_tables_count --mysql-user=mysqluser−−mysql−password=mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=[table_size/10] --mysql-db=tablename−−max−requests=[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

看文福利!每天可抽獎,代金券,天貓精靈等獎品等你拿!點擊進入抽獎頁面

本文爲雲棲社區原創內容,未經允許不得轉載,如需轉載請發送郵件至[email protected];如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至:[email protected] 進行舉報,並提供相關證據,一經查實,本社區將立刻刪除涉嫌侵權內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章