測(cè)試環(huán)境
測(cè)試使用現(xiàn)網(wǎng)機(jī)器,各項(xiàng)指標(biāo)如下辛蚊,KMS Server 所使用的 JVM 參數(shù)均取默認(rèn)值(KMS Server 并非內(nèi)存占用型進(jìn)程粤蝎,內(nèi)存、GC 等配置并非必要)袋马。
項(xiàng)目 | 數(shù)值 |
---|---|
CPU | 24核 Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz |
內(nèi)存 | 64G |
KMS 對(duì) NameNode 性能的影響
NameNode在創(chuàng)建一個(gè)加密文件時(shí)初澎,需要為該文件分配一個(gè) EDEK,這個(gè)操作需要和 KMS Server 產(chǎn)生 http 交互(配置了緩存的情況下不需要每次都交互)飞蛹,因此谤狡,增加 KMS 組件后灸眼,可能會(huì)對(duì) NameNode 的創(chuàng)建性能產(chǎn)生影響卧檐。
測(cè)試方法
- 使用 NNBench,分別在正常目錄和加密目錄連續(xù)創(chuàng)建 30W 個(gè)大小為0的文件焰宣。
- 在 NameNode 端霉囚,使用 Btrace 工具,統(tǒng)計(jì) NameNodeRpcServer.create() 調(diào)用的耗時(shí)情況匕积。
- NameNode 端盈罐,一次獲取的 EDEK 個(gè)數(shù)保持默認(rèn)值(500),KMS Server 端闪唆,一次生產(chǎn)并緩存的 EDEK 個(gè)數(shù)保持默認(rèn)值(100)盅粪。
- NameNode 和 KMS Server部署在同一臺(tái)測(cè)試機(jī)器上,因此悄蕾,網(wǎng)絡(luò)延遲并沒(méi)有計(jì)入考慮票顾。
測(cè)試結(jié)果
項(xiàng)目 | NameNodeRpcServer.create()總耗時(shí)(s) | NameNodeRpcServer.create()平均耗時(shí)(us) |
---|---|---|
正常目錄 | 19.70 | 65.66 |
加密目錄 | 34.41 | 114.70 |
測(cè)試結(jié)論
- 可以看到,連續(xù)創(chuàng)建30W個(gè)文件帆调,NameNode 的處理時(shí)間增加了15s左右奠骄。
- 目前現(xiàn)網(wǎng)環(huán)境,NameNode 處理的 create 請(qǐng)求量的峰值大概在 50W/h番刊,換句話說(shuō)含鳞,接入 KMS 后,NameNode 原本 1h 的任務(wù)量芹务,現(xiàn)在需要 1h零15s 來(lái)完成蝉绷,這個(gè)增長(zhǎng)微乎其微鸭廷,基本可以忽略。
KMS 對(duì) HDFS 客戶端性能的影響
KMS 對(duì)客戶端的影響體現(xiàn)在兩個(gè)方面:
- 客戶端寫(xiě)入加密文件時(shí)熔吗,需要在本地 JVM 中完成加密運(yùn)算靴姿。
- 客戶度讀取加密文件時(shí),均需要在本地 JVM 中完成解密運(yùn)算磁滚。
因此佛吓,增加加密功能后,肯定會(huì)對(duì)客戶端的讀寫(xiě)效率有一定的影響垂攘。
客戶端寫(xiě)性能影響
1. 測(cè)試方法
- 使用 NNBench 工具维雇,分別在正常目錄和加密目錄中,連續(xù)寫(xiě)入100個(gè)大小為2G的文件晒他,blockSize 取默認(rèn)的 128M吱型,分別統(tǒng)計(jì)使用 java 加密庫(kù)和 native 加密庫(kù)時(shí)的結(jié)果。
- NNBench 和 KMS Server部署在同一臺(tái)測(cè)試機(jī)器上陨仅,排除網(wǎng)絡(luò)延遲影響津滞,只關(guān)注加解密性能。
- 寫(xiě)入時(shí)使用1副本灼伤,排除流水線影響触徐,只關(guān)注加解密性能。
- 測(cè)試命令狐赡,假設(shè)正常目錄為 /normal撞鹉,加密目錄為 /ez,則兩條命令如下:
寫(xiě)正常目錄
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2.jar nnbench -operation create_write -maps 1 -reduces 1 -blockSize 134217728 -bytesToWrite 2147483640 -bytesPerChecksum 512 -numberOfFiles 100 -baseDir /normal/NNBench-`hostname -s` -startTime $(($(date +'%s')+20))
寫(xiě)加密目錄
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2.jar nnbench -operation create_write -maps 1 -reduces 1 -blockSize 134217728 -bytesToWrite 2147483640 -bytesPerChecksum 512 -numberOfFiles 100 -baseDir /ez/NNBench-`hostname -s` -startTime $(($(date +'%s')+20))
2. 測(cè)試結(jié)果
-
使用 Java 庫(kù)進(jìn)行加密(左邊為正常寫(xiě)颖侄,右邊為加密寫(xiě)):
-
使用 native 加密庫(kù)(libssl-devel)進(jìn)行加密(左邊為正常寫(xiě)鸟雏,右邊為加密寫(xiě)):
3. 測(cè)試結(jié)論
- 使用 Java 加密庫(kù)時(shí),平均寫(xiě)耗時(shí)從 9.47s 增加到 14.98s览祖,寫(xiě)性能降低 58%.
- 使用 Native 加密庫(kù)時(shí)孝鹊,平均寫(xiě)耗時(shí)從 10.81s 增加到 11.71s,寫(xiě)性能降低 8%.
客戶端讀性能影響
1. 測(cè)試方法
- 使用 NNBench 工具展蒂,分別在正常目錄和加密目錄中又活,讀取上一步中生成的100個(gè)文件,分別統(tǒng)計(jì)使用 java 加密庫(kù) 和 native 加密庫(kù)時(shí)的結(jié)果玄货。
- NNBench 和 KMS Server部署在同一臺(tái)測(cè)試機(jī)器上皇钞,排除網(wǎng)絡(luò)延遲影響,只關(guān)注加解密性能松捉。
- 測(cè)試命令夹界,假設(shè)正常目錄為 /normal,加密目錄為 /ez,則兩條命令如下:
讀正常目錄
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2.jar nnbench -operation open_read -maps 1 -reduces 1 -blockSize 134217728 -bytesToWrite 2147483640 -bytesPerChecksum 512 -numberOfFiles 100 -readFileAfterOpen true -baseDir /normal/NNBench-`hostname -s` -startTime $(($(date +'%s')+20))
讀加密目錄
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2.jar nnbench -operation open_read -maps 1 -reduces 1 -blockSize 134217728 -bytesToWrite 2147483640 -bytesPerChecksum 512 -numberOfFiles 100 -readFileAfterOpen true -baseDir /ez/NNBench-`hostname -s` -startTime $(($(date +'%s')+20))
2. 測(cè)試結(jié)果
-
使用 Java 加密庫(kù)進(jìn)行解密(左邊為正常讀可柿,右邊為加密讀):
-
使用 native 加密庫(kù)(libssl-devel)進(jìn)行解密(左邊為正常讀鸠踪,右邊為加密讀):
3. 測(cè)試結(jié)論
- 使用 Java 加密庫(kù)時(shí),平均讀耗時(shí)從 12.11s 增加到 14.56s复斥,讀性能降低 20%.
- 使用 Native 加密庫(kù)時(shí)营密,平均讀耗時(shí) 11.02s 增加到 11.54s,讀性能降低 5%目锭。