本文是對 IPFS 存儲性能測試的一個報告。
Note: 本次測試使用的都是單臺服務器,主要測試 IPFS 讀寫性能,以及哪些因素會影響 IPFS 的存儲效率。
統(tǒng)計方式:每組操作執(zhí)行5次,然后取平均值
1. 本地測試
考慮到硬件對存儲性能的影響,我們這里分別使用了兩臺不同配置的臺式機進行了測試。
配置一
- CPU: i5-4160-4Core 主頻 3.2G
- 內存: 8GB
- 硬盤:普通家用硬盤 1GB
- 操作系統(tǒng):Ubuntu 18.04-LTS
測試結果
網絡環(huán)境 | 文件大小 | 寫入時間(ms) | 讀取時間(ms) | 寫入速度(MB/s) | 讀取速度(MB/s) |
---|---|---|---|---|---|
本地 | 1G | 103584.98 | 41718.92 | 9.97 | 24.25 |
本地 | 500M | 45045.54 | 7469.16 | 11.11 | 66.66 |
本地 | 100M | 8981.92 | 1162.43 | 11.22 | 86.20 |
本地 | 50M | 4022.22 | 577.39 | 12.43 | 86.65 |
本地 | 10M | 1775.41 | 252.60 | 5.64 | 39.68 |
本地 | 5M | 1165.52 | 186.50 | 4.54 | 27.77 |
本地 | 1M | 530.57 | 151.1872 | 1.88 | 6.66 |
配置二
- CPU: i7-8700K CPU @ 3.70GHz
- 內存: 16GB
- 硬盤: 希捷企業(yè)硬盤 8TB
- 操作系統(tǒng):Ubuntu 18.04-LTS
網絡環(huán)境 | 文件大小 | 寫入時間(ms) | 讀取時間(ms) | 寫入速度(MB/s) | 讀取速度(MB/s) |
---|---|---|---|---|---|
本地 | 1G | 37819.67 | 2237.9 | 27.08 | 459.19 |
本地 | 500M | 16841.98 | 1085.08 | 29.76 | 462.96 |
本地 | 100M | 3006.19 | 266.68 | 32.67 | 384.61 |
本地 | 50M | 2496.54 | 143.81 | 20.08 | 357.14 |
本地 | 10M | 1156.53 | 47.92 | 8.69 | 212.76 |
本地 | 5M | 583.78 | 52.28 | 8.62 | 58.13 |
本地 | 1M | 204.68 | 37.77 | 5 | 27.02 |
本地測試原始數(shù)據(jù) (單位:mses)
# i5 CPU
Write:
1G: 97389.72878, 100163.63883, 102394.04202, 121107.44262, 96870.09001
500M 46019.42205, 43743.31760, 45353.94692, 45235.54754, 44875.50592
100M 8350.12960, 8919.12270, 8405.61080, 9136.59215, 10098.17624
50M 3909.33299, 3994.80295, 4111.20057, 4065.45925, 4030.31278
10M 1789.08062, 1746.42110, 1776.58439, 1807.98721, 1756.99902
5M 1187.28948, 1139.60743, 1186.48696, 1171.19718, 1143.03637
1M 544.82102, 512.79807, 485.28814, 553.72643, 556.23889
Read:
1G: 39059.96132, 42852.09465, 40929.29006, 41882.52759, 43870.74089
500M 7555.64952, 8230.87454, 7912.68301, 6132.61437, 7514.02307
100M 858.94799, 1568.71152, 1702.42906, 873.50821, 808.59113
50M 447.64829, 781.59356, 776.32689, 451.41816, 430.00174
10M 203.68147, 295.31884, 368.38579, 200.71745, 194.91434
5M 165.23266, 217.01288, 220.20507, 170.92180, 159.16085
1M 167.58633, 167.72866, 166.81981, 119.10820, 134.69315
本地使用的是我是直接使用 IPFS 自帶的客戶端命令行工具進行測試的,通過 shell 腳本進行批量測試,值得一提的是,可能 shell 腳本的運行時間統(tǒng)計可能有些許不是
特別精確,但是我們這個測試本身也是比較粗略的定性測試,所以這個不影響結果。
下面我貼出我的測試腳本,有興趣的同學可以自己運行測試一下:
#!/bin/bash
timer() {
timeStamp=`date +%s.%N`
echo $timeStamp
}
dir="/home/yangjian/downloads"
datas=(
"$dir/data-1GB.zip"
"$dir/data-500MB.zip"
"$dir/data-100MB.zip"
"$dir/data-50MB.zip"
"$dir/data-10MB.zip"
"$dir/data-5MB.zip"
"$dir/data-1MB.zip"
)
rm Qm*
start=$(timer)
for file in ${datas[@]}
do
echo -e "\033[35m\033[1m+++++++++++++++ Test for file $file +++++++++++++++\033[0m"
# put files
t1=$(timer)
r=$(ipfs add $file)
t2=$(timer)
cost=`awk 'BEGIN{printf "%.5f\n",(('$t2'-'$t1')*1000)}'`
filename=`echo $r | awk '{print $2}'`
echo -e "\033[32m\033[1mPut file successfully, hash: $filename, cost: $cost msecs.\033[0m"
# get files
t1=$(timer)
ipfs get $filename
t2=$(timer)
cost=`awk 'BEGIN{printf "%.5f\n",(('$t2'-'$t1')*1000)}'`
echo -e "\033[32m\033[1mGet file successfully, cost: $cost msecs.\033[0m"
done
end=$(timer)
cost=`awk 'BEGIN{printf "%.5f\n",(('$end'-'$start')*1000)}'`
echo -e "\033[34m\033[1mTotal cost: $cost msecs.\033[0m"
exit 0
Note: 這里需要注意的是,IPFS 的存儲是去重的,也就是說,相同的文件,第一次存儲是最慢的,之后如果你再存儲相同的文件,它會非???。
我們這里都是取第一次的存儲所耗費的時間。如果你要像我一樣通過多次測試取平均值的話,你每測試完一次之后需要重新初始化 IPFS 節(jié)點,
這樣測試雖然挺繁瑣的,但是結果比較精確。
初始化的方法很簡單:
rm -rf ~/.ipfs
ipfs init
ipfs daemon
下圖是本人實測的運行截圖:
2. 局域網測試
機器配置
- CPU: i7-8700K CPU @ 3.70GHz
- 內存: 16GB
- 硬盤: 希捷企業(yè)硬盤 8TB
- 操作系統(tǒng):Ubuntu 18.04-LTS
測試結果
網絡環(huán)境 | 文件大小 | 寫入時間(ms) | 讀取時間(ms) | 寫入速度(MB/s) | 讀取速度(MB/s) |
---|---|---|---|---|---|
局域網 | 1G | 41630.6 | 9640.5 | 24.59 | 106.22 |
局域網 | 500M | 19016.4 | 4677.8 | 26.29 | 107.06 |
局域網 | 100M | 3365.6 | 1016.8 | 29.76 | 94.33 |
局域網 | 50M | 2073.6 | 489 | 24.15 | 102.24 |
局域網 | 10M | 854.2 | 123 | 11.76 | 83.33 |
局域網 | 5M | 396 | 72.8 | 12.82 | 69.44 |
局域網 | 1M | 136.6 | 34.8 | 7.35 | 29.41 |
局域網測試原始數(shù)據(jù) (單位:msec)
Write:
1G 40780, 41130, 41226, 43040, 41977
500MB 18280, 19613, 18984, 18799, 19406
100MB 3207, 3518, 3129, 3551, 3423
50MB 1862, 1989, 2072, 2182, 2263
10MB 864, 860, 759, 895, 893
5MB 404, 392, 414, 369, 401
1MB 119, 171, 110, 176, 107
Read:
1G 9675, 9755, 9590, 9542,9557
500MB 4674, 4670, 4667, 4677, 4701
100MB 1018, 1018, 1019, 1012, 1017
50MB 481, 503, 488, 491, 482
10MB 122, 126, 126, 122, 119
5MB 73, 71, 72, 74, 74
1MB 36, 33, 35, 36, 34
下面同樣貼出本人的實測截圖:
從本地測試和局域網測試數(shù)據(jù)可以看出一些問題:
- 高配置的 CPU 和 硬盤能夠明顯提升 IPFS 的存儲性能,估計是 IPFS 在分片的時候,更好的 CPU 能更快速地創(chuàng)建分片。
- 在進行小文件(10M 以下)存儲時,發(fā)現(xiàn)局域網速度比還是稍微快一些,這個是因為二者使用的是不同的客戶端,本地使用的是 IPFS 自帶的
ipfs
客戶端。
局域網使用的是ipfs-http-client
工具。還有就是局域網測試的時候我沒有算把文件轉為字節(jié)流的時間,以及連接服務端的時間。 - 文件越小,絕對的存儲速度越慢,這是因為存儲的邊際效應遞減的緣故,因為文件太小的時候,一些初始化以及網絡連接的時間占比就大大增加了。
3. 公網測試
公網本人使用的是阿里云主機進行測試的。這次測試的工具是自己寫的 IPFS php client
工具,為什么不繼續(xù)使用 IPFS nodejs client
,
一個原因是因為本人擅長 PHP 語言,另一個原因是下面要跟七牛云做對比,盡量做到單一變量原則。
機器配置
- CPU: Intel? Xeon? Platinum 8163 CPU @ 2.50GHz 雙核
- RAM: 8GB
- 硬盤: 普通云盤,80GB
- 帶寬: 2MB
- 操作系統(tǒng): Ubuntu 16.04.4 LTS
公網測試結果
網絡環(huán)境 | 文件大小 | 上傳時間(s) | 上傳速度(MB/s) |
---|---|---|---|
gamma云 | 1G | 263.59 | 3.88 |
gamma云 | 500M | 125.95 | 3.96 |
gamma云 | 100M | 25.34 | 3.94 |
gamma云 | 50M | 10.55 | 4.73 |
gamma云 | 10M | 0.95 | 10.52 |
gamma云 | 5M | 0.26 | 19.23 |
gamma云 | 1M | 0.11 | 9.09 |
公網測試原始數(shù)據(jù) (單位:sec)下表列出了 5 次文件上傳的實際耗時。
文件大小 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1G | 268.32 | 261.71 | 266.63 | 262.56 | 258.74 |
500MB | 129.14 | 125.61 | 125.68 | 123.97 | 125.38 |
100MB | 24.18 | 24.54 | 24.68 | 28.70 | 24.60 |
50MB | 11.11 | 10.29 | 10.56 | 10.31 | 10.49 |
10MB | 0.95 | 0.95 | 0.98 | 0.94 | 0.94 |
5MB | 0.27 0.23 | 0.26 | 0.28 | 0.26 | |
1MB | 0.11 | 0.14 | 0.11 | 0.12 | 0.10 |
4. 與七牛云對比測試
上面我們測試了 IPFS 在各種網絡條件下的單節(jié)點存儲的絕對性能,看起來還不錯,但是畢竟 IPFS 是一個新的分布式文件系統(tǒng),不確定是否能夠滿足商用需求,提供穩(wěn)定的
云存儲服務。接下來我分別使用同樣的數(shù)據(jù)測試了七牛云的企業(yè)存儲服務的性能??纯?IPFS 的單節(jié)點跟七牛云的存儲服務性能對比是否存在比較大的差距。
我使用七牛云官方的 php sdk
作為測試工具,分別測試了 1GB,500MB,100MB,50MB,10MB,5MB,1MB 文件的上傳和下載,測試結果如下:
七牛云測試結果
網絡環(huán)境 | 文件大小 | 上傳時間(s) | 上傳速度(MB/s) |
---|---|---|---|
七牛云 | 1G | 264.08 | 3.87 |
七牛云 | 500M | 129.43 | 3.87 |
七牛云 | 100M | 25.65 | 3.89 |
七牛云 | 50M | 10.71 | 4.66 |
七牛云 | 10M | 1.55 | 6.45 |
七牛云 | 5M | 0.88 | 5.68 |
七牛云 | 1M | 0.25 | 4.00 |
從測試數(shù)據(jù)可以看出,上傳速度穩(wěn)定在 5MB 左右,我本地的上傳帶寬是 50MB 的,
所以這個上傳速度應該沒有受到本地上傳帶寬的影響,也就是說是服務端的性能沒有受到壓制,數(shù)據(jù)沒有問題。
七牛云測試原始數(shù)據(jù)(單位:sec)下表列出了 5 次文件上傳的實際耗時。
文件大小 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1G | 262.94 | 262.45 | 268.50 | 261.31 | 265.21 |
500MB | 148.29 | 124.73 | 123.31 | 122.87 | 127.99 |
100MB | 25.12 | 25.60 | 26.71 | 25.41 | 25.44 |
50MB | 10.65 | 10.76 | 10.57 | 10.56 | 11.05 |
10MB | 1.64 | 1.63 | 1.64 | 1.47 | 1.40 |
5MB | 0.83 | 0.89 | 0.83 | 0.87 | 1.00 |
1MB | 0.25 | 0.24 | 0.26 | 0.26 | 0.26 |
Node: 七牛云和 IPFS 的下載都是通過 http 網關提供服務,所以下載速度就完全只跟下載帶寬有關了,本人阿里云服務器帶寬只有 2MB,
所以下載的最大速度只有220KB/s
,要遠遠低于七牛云的下載速度(12MB/s
),所以這個下載速度不具備可比性。
5. 總結
通過測試我們可以發(fā)現(xiàn),對于本地存儲和局域網存儲,IPFS 的存儲性能略低于拷貝,這是由于 IPFS 需要對文件進行分片存儲。
對于線上的環(huán)境,帶寬成為了上傳速度的最大瓶頸了,但是 IPFS 的性能表現(xiàn)依然不差,對于 100MB 以下的小文件,IPFS 的表現(xiàn)甚至要比七牛云
更優(yōu)。考慮到七牛云的硬件配置應該比我們的高的多,所以如果把 IPFS 作為一個分布式云存儲工具,根據(jù)本人測試的結果來看,性能上應該不比七牛云差。
那如果我們在進一步考慮到由于 IPFS 本身的各種優(yōu)勢以及特點,IPFS 節(jié)點是自帶 CDN 加速的,也就是說節(jié)點越多,IPFS 的存儲系統(tǒng)的讀取效率將會更高。
而且同一個文件在第二次存儲的時候,IPFS 只需要判斷其哈希值就可以了,不需要再次分片以及存儲工作,所以存儲會非???。因此我們有充分的
理由相信,使用 IPFS 做分布式云存儲,將大有可為。文章來源:http://www.zghlxwxcb.cn/news/detail-817907.html
本文首發(fā)于 小一輩無產階級碼農文章來源地址http://www.zghlxwxcb.cn/news/detail-817907.html
到了這里,關于IPFS系列04-IPFS 存儲性能測試的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!