天天看點

阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果

POLARDB介紹

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

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

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。

阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果

壓測方案

使用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

壓測步驟

準備資料

$sysbench_path/sysbench --test=$sysbench_path/tests/db/oltp.lua --mysql-host=$ip --mysql-port=3306 --mysql-user=$mysql_user --mysql-password=$mysql_password --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=$mysql_user --mysql-password=$mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=$[$table_size/10] --mysql-db=$table_name --max-requests=$[$table_size/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=$mysql_user --mysql-password=$mysql_password --mysql-port=3306 --db-driver=mysql --oltp-table-size=$[$table_size/10] --mysql-db=$table_name --max-requests=$[$table_size/10] --oltp_simple_ranges=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毫秒。

阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果
阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果

寫性能壓測結果

32個并發的時候,取得了最好的寫入性能,寫QPS為156273.72,平均事物響應時間5.09毫秒。

阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果
阿裡雲原生資料庫POLARDB壓力測試報告POLARDB介紹POLARDB架構壓測方案壓測步驟壓測寫性能壓測讀性能壓測結果
看文福利!每天可抽獎,代金券,天貓精靈等獎品等你拿!點選進入抽獎頁面