摘要:?POLARDB是阿里云ApsaraDB數(shù)據(jù)庫(kù)團(tuán)隊(duì)研發(fā)的基于云計(jì)算架構(gòu)的下一代關(guān)系型數(shù)據(jù)庫(kù),其最大的特色是計(jì)算節(jié)點(diǎn)(主要做SQL解析以及存儲(chǔ)引擎計(jì)算的服務(wù)器)與存儲(chǔ)節(jié)點(diǎn)(主要做數(shù)據(jù)塊存儲(chǔ),數(shù)據(jù)庫(kù)快照的服務(wù)器)分離,其次,與傳統(tǒng)的云數(shù)據(jù)庫(kù)一個(gè)實(shí)例一份數(shù)據(jù)拷貝不同,同一個(gè)實(shí)例的所有節(jié)點(diǎn)(包括讀寫(xiě)節(jié)點(diǎn)和只讀.
POLARDB介紹
POLARDB是阿里云ApsaraDB數(shù)據(jù)庫(kù)團(tuán)隊(duì)研發(fā)的基于云計(jì)算架構(gòu)的下一代關(guān)系型數(shù)據(jù)庫(kù),其最大的特色是計(jì)算節(jié)點(diǎn)(主要做SQL解析以及存儲(chǔ)引擎計(jì)算的服務(wù)器)與存儲(chǔ)節(jié)點(diǎn)(主要做數(shù)據(jù)塊存儲(chǔ),數(shù)據(jù)庫(kù)快照的服務(wù)器)分離,其次,與傳統(tǒng)的云數(shù)據(jù)庫(kù)一個(gè)實(shí)例一份數(shù)據(jù)拷貝不同,同一個(gè)實(shí)例的所有節(jié)點(diǎn)(包括讀寫(xiě)節(jié)點(diǎn)和只讀節(jié)點(diǎn))都訪(fǎng)問(wèn)存儲(chǔ)節(jié)點(diǎn)上的同一份數(shù)據(jù),最后,借助優(yōu)秀的RDMA網(wǎng)絡(luò)以及最新的塊存儲(chǔ)技術(shù),PolarDB的數(shù)據(jù)備份耗時(shí)可以做到秒級(jí)別(備份時(shí)間與底層數(shù)據(jù)量無(wú)關(guān)),這三點(diǎn)相結(jié)合,我們可以推斷出POLARDB不但滿(mǎn)足了公有云計(jì)算環(huán)境下用戶(hù)業(yè)務(wù)快速?gòu)椥詳U(kuò)展的剛性需求(只讀實(shí)例擴(kuò)展時(shí)間與底層數(shù)據(jù)量無(wú)關(guān)),同時(shí)也滿(mǎn)足了互聯(lián)網(wǎng)環(huán)境下用戶(hù)對(duì)數(shù)據(jù)庫(kù)服務(wù)器高可用的需求(服務(wù)器宕機(jī)后無(wú)需搬運(yùn)數(shù)據(jù)重啟進(jìn)程即可服務(wù))。
以下測(cè)試來(lái)自于袋鼠云技術(shù)部。
POLARDB架構(gòu)
一寫(xiě)多讀
POLARDB采用分布式集群架構(gòu),一個(gè)集群包含一個(gè)主實(shí)例和至少一個(gè)只讀實(shí)例(暫時(shí)僅支持一個(gè),用于保障高可用)。主實(shí)例處理讀寫(xiě)請(qǐng)求,只讀實(shí)例僅處理讀請(qǐng)求。主實(shí)例和只讀實(shí)例之間采用Active-Active的Failover方式,提供數(shù)據(jù)庫(kù)的高可用服務(wù)。
計(jì)算與存儲(chǔ)分離
POLARDB采用計(jì)算與存儲(chǔ)分離的設(shè)計(jì)理念,滿(mǎn)足公有云計(jì)算環(huán)境下用戶(hù)業(yè)務(wù)彈性擴(kuò)展的剛性需求。數(shù)據(jù)庫(kù)的計(jì)算節(jié)點(diǎn)(DB Server)僅存儲(chǔ)元數(shù)據(jù),而將數(shù)據(jù)文件、Redo Log等存儲(chǔ)于遠(yuǎn)端的存儲(chǔ)節(jié)點(diǎn)(Chunk Server)。各計(jì)算節(jié)點(diǎn)之間僅需同步Redo Log相關(guān)的元數(shù)據(jù)信息,極大降低了主實(shí)例和只讀實(shí)例間的延遲,而且在主實(shí)例故障時(shí),只讀實(shí)例可以快速切換為主服務(wù)器。
讀寫(xiě)分離
讀寫(xiě)分離數(shù)據(jù)庫(kù)接入功能,是POLARDB集群默認(rèn)免費(fèi)提供的一個(gè)透明、高可用、自適應(yīng)的負(fù)載均衡能力。通過(guò)讀寫(xiě)分離地址,SQL請(qǐng)求自動(dòng)轉(zhuǎn)發(fā)到POLARDB集群的各個(gè)實(shí)例,提供聚合、高吞吐的并發(fā)SQL處理能力。
高速鏈路互聯(lián)
數(shù)據(jù)庫(kù)的計(jì)算節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)之間采用高速網(wǎng)絡(luò)互聯(lián),并通過(guò)RDMA協(xié)議進(jìn)行數(shù)據(jù)傳輸,使得I/O性能不再成為瓶頸。
共享分布式存儲(chǔ)
多個(gè)計(jì)算節(jié)點(diǎn)共享一份數(shù)據(jù),而不是每個(gè)計(jì)算節(jié)點(diǎn)都存儲(chǔ)一份數(shù)據(jù),極大降低了用戶(hù)的存儲(chǔ)成本。基于全新打造的分布式塊設(shè)備和文件系統(tǒng),存儲(chǔ)容量可以在線(xiàn)平滑擴(kuò)展,不會(huì)受到單機(jī)服務(wù)器配置的影響,可應(yīng)對(duì)上百TB級(jí)別的數(shù)據(jù)規(guī)模。
數(shù)據(jù)多副本、Parallel-Raft協(xié)議
數(shù)據(jù)庫(kù)存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)采用多副本形式,確保數(shù)據(jù)的可靠性,并通過(guò)Parallel-Raft協(xié)議保證數(shù)據(jù)的一致性。
優(yōu)點(diǎn):
備份速度快,增加只讀節(jié)點(diǎn)速度快。
只讀實(shí)例無(wú)延遲。
參數(shù)
POLARDB默認(rèn)關(guān)閉了doublewrite buffer,關(guān)閉了binlog。
壓測(cè)方案
使用sysbench oltp標(biāo)準(zhǔn)壓測(cè)程序分別壓測(cè)讀、寫(xiě)兩種場(chǎng)景的性能。
環(huán)境準(zhǔn)備
PolarDB: 8C64G
ECS:2C2G, CentOS 2.7(三臺(tái))
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
壓測(cè)步驟
準(zhǔn)備數(shù)據(jù)
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
注意事項(xiàng):
1.如果測(cè)試POLARDB不能使用外網(wǎng)連接串(時(shí)延高難以達(dá)到最佳性能)使用非VPC的內(nèi)網(wǎng)連接串要達(dá)到最佳的性能需要使用3~4臺(tái)ECS同時(shí)進(jìn)行壓測(cè)才能發(fā)揮Polardb最佳性能,使用VPC網(wǎng)絡(luò)單臺(tái)ECS壓測(cè)就能達(dá)到POLARDB最佳的性能(建議使用VPC連接串)
2.POLARDB的特點(diǎn)是讀寫(xiě)分離,sysbench測(cè)試時(shí)需要單獨(dú)測(cè)試讀和寫(xiě),避免使用讀寫(xiě)混合sysbench命令測(cè)試,這樣能最大的發(fā)揮POLARDB的性能優(yōu)勢(shì),詳細(xì)測(cè)試命令如下:
壓測(cè)寫(xiě)性能
使用sysbench準(zhǔn)備數(shù)據(jù),單表1000萬(wàn)數(shù)據(jù),總共100個(gè)表,每個(gè)表的空間大約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
壓測(cè)讀性能
壓測(cè)選用5個(gè)表,每個(gè)表1000萬(wàn)數(shù)據(jù),總共1億條數(shù)據(jù)進(jìn)行壓測(cè)。分表采用1,2,4,8,16,32個(gè)并發(fā)測(cè)試寫(xiě)入性能。
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數(shù)據(jù)庫(kù)的IP地址者公網(wǎng)連接串 $mysql_user?數(shù)據(jù)庫(kù)用戶(hù)名 $mysql_password?數(shù)據(jù)庫(kù)密碼 $table_name?數(shù)據(jù)庫(kù)的名字 $oltp_tables_count?數(shù)據(jù)庫(kù)表的數(shù)量 $table_size?數(shù)據(jù)庫(kù)表的大小
壓測(cè)結(jié)果
讀取性能壓測(cè)結(jié)果
在32個(gè)并發(fā)的時(shí)候,取得了最好的讀區(qū)性能,讀取QPS為46813.94,平均SQL響應(yīng)時(shí)間2.05毫秒。
寫(xiě)性能壓測(cè)結(jié)果
32個(gè)并發(fā)的時(shí)候,取得了最好的寫(xiě)入性能,寫(xiě)QPS為156273.72,平均事物響應(yīng)時(shí)間5.09毫秒。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評(píng)論