1 測試說明
1.1 背景
當前im架構設計與之前相比有很大不同,當前im將所有狀態資訊儲存在資料層,它的設計假設是資料層高可用,高效能,可擴容;目前im資料層採用redis集群codis搭建。
1.2 目標
以下測試針對單機redis和codis進行測試,通過對比分析得到im資料層的擴容能力,測試出影響redis擴容效能的關鍵因素;
2 測試環境
測試環境
伺服器配置:32core 256g記憶體 450g硬碟;
內網:1000mb頻寬;
客戶機配置: 32core 256g記憶體 450g硬碟;
測試注意
無3 codis儲存集群搭建
4 資料層測試用例
4.1 測試單機redis
4.1.1 測試部署圖
4.1.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將redis例項部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立乙個redis的連線;
(3)客戶端在每個連線上執行10000次set操作,並且set操作的key每次都不相同;
(4)記錄相應的測試結果;
4.1.3 測試結果
客戶端執行緒數
redis例項個數
耗時stps
0.563414
0.97494
0.998326
1.29937
1.68946
2.58544
5.21364
9.97938
4.1.4 結論
根據測試結果,redis單機效能訪問速度最快為20萬條/秒,並且只有在tcp連線數在50個連線以上時,才能充分發揮出redis全部效能。
4.2 測試codis集群(1個codis-redis-group)
4.2.1 訪問1個codis-proxy
4.2.1.1 測試部署圖
4.2.1.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立1個redis的連線,連線到codis-proxy_1;
(3)客戶端在每個連線上執行10000次set操作,並且set操作的key每次都不相同;
(4)記錄相應的測試結果以及codis manager記錄的最大tps;
4.2.1.3 測試結果
客戶端執行緒數
codis個數
redis例項個數
耗時ms
tps1.88489
2.14388
2.38993
2.97356
3.48968
4.74195
5.26867
6.08102
7.19117
4.2.1.4 cpu圖
4.2.1.5 效能圖
codis manager最大訪問次數截圖:29萬次/秒
4.2.2 訪問2個codis-proxy
4.2.2.1 測試部署圖
4.2.2.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立2個redis的連線,分別連線到codis-proxy_1和codis-proxy_2;
(3)客戶端在每個連線上執行5000次set操作,並且set操作的key每次都不相同;
(4)同時啟動5個客戶端;
(5)記錄codismanager記錄的最大tps;
4.2.2.3 cpu圖
4.2.2.4 效能圖
4.2.3 結論
1個redis組成+1個codis的儲存集群,極限效能為29萬次/秒。
1個redis組成+2個codis的儲存集群,極限效能為36.5萬次/秒。
補充:在1個codis-redis-group+1個codis-proxy的情況下,採用10個客戶端同時啟動,進行測試,結果證明,codis-redis-group的cpu佔用率最高79%,基本沒有增長,說明,已經到達1個codis-proxy的極限效能。
在1個codis-redis-group+2個codis-proxy的情況下,採用10個客戶端同時啟動,進行測試,結果證明,codis-redis-group的cpu佔用率最高90%,基本沒有增長,說明已經到達系統的極限效能;
4.3 測試codis集群(2個codis-redis-group)
4.3.1 訪問2個codis-proxy
4.3.1.1 測試部署圖
4.3.1.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立2個redis的連線,分別連線到codis-proxy1和codis-proxy2;
(3)客戶端在每個連線上執行5000次set操作,並且set操作的key每次都不相同;
(4)同時啟動5個客戶端;
(5)記錄codismanager記錄的最大tps;
4.3.1.3 cpu圖
4.3.1.4 效能圖
5個客戶端測試得到的最大效能:42萬次/秒。
4.3.2 訪問3個codis-proxy
4.3.2.1 測試部署圖
4.3.2.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立3個redis的連線,分別連線到codis-proxy1和codis-proxy2和codis-proxy3;
(3)客戶端在每個連線上執行3333次set操作,並且set操作的key每次都不相同;
(4)同時啟動10個客戶端;
(5)記錄codismanager記錄的最大tps;
4.3.2.3 cpu圖
4.3.2.4 效能圖
10個客戶端測試得到的最大效能:46萬次/秒。
4.3.3 訪問6個codis-proxy
4.3.3.1 測試部署圖
4.3.3.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立6個redis的連線,分別連線到codis-proxy1和codis-proxy2和codis-proxy3、codis-proxy4、codis-proxy5、codis-proxy6;
(3)客戶端在每個連線1666上執行次set操作,並且set操作的key每次都不相同;
(4)同時啟動10個客戶端;
(5)記錄codismanager記錄的最大tps;
4.3.3.3 cpu圖
4.3.3.4 效能圖
10個客戶端測試得到的最大效能:52萬次/秒。
4.3.4 結論
2個redis組成+2個codis的儲存集群,極限效能為42.6萬次/秒。
2個redis組成+3個codis的儲存集群,極限效能為46萬次/秒。
2個redis組成+6個codis的儲存集群,極限效能為52萬次/秒。
4.4 測試codis集群(3個codis-redis-group)
4.4.1 訪問3個codis-proxy
4.4.1.1 測試部署圖
4.4.1.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立3個redis的連線,分別連線到3個codis-proxy上;
(3)客戶端在每個連線上執行3333次set操作,並且set操作的key每次都不相同;
(5)分別啟動10個客戶端同時進行測試;
(6)記錄codis manager顯示的最大tps。
4.4.1.3 cpu圖
4.4.1.4 效能圖
同時開啟5個客戶端測試得到的最大效能:46.9萬次/秒。
4.4.2 訪問6個codis-proxy
4.4.2.1 測試部署圖
4.4.2.2 測試過程
(1)將客戶端部署在機器172.31.68.32上,將codis集群部署在機器172.31.68.33;
(2)客戶端分別啟動1、2、5…200個執行緒,每個執行緒建立6個redis的連線,分別連線到6個codis-proxy上;
(3)客戶端在每個連線上執行1666次set操作,並且set操作的key每次都不相同;
(5)分別啟動10個客戶端同時進行測試;
(6)記錄codis manager顯示的最大tps。
4.4.2.3 cpu圖
cpu占用總量為27.15%
4.4.2.4 效能圖
4.4.3 結論
3個codis-redis-group組成+3個codis-proxy的儲存集群,極限效能為46萬次/秒。
3個codis-redis-group組成+6個codis-proxy的儲存集群,極限效能為61萬次/秒。
5 總結
訪問codis集群效能,與以下因素存在關係:
第乙個客戶端與codis-proxy的tcp連線數量;單個codis-proxy的tcp連線數量越多,整體訪問速度越快。
第二個客戶端同時訪問codis-proxy的數量;codis-proxy配置數量越多,整體訪問速度越快;
第三個codis-redis-group的數量;codis-redis-group配置數量越多,整體訪問速度越快;
從效能擴充套件角度:
每增加乙個codis-redis-group,系統整體效能確實會有所提高,但是提高的能力越來越有限,需要建立大量的tcp連線以及擴充套件多個codis-proxy才能盡量地提高系統訪問速度。
codis集群相關
codis是乙個分布式redis集群解決方案,對於上層的應用來說,連線到codis proxy和連線原生的redis server沒有明顯的區別。jiagou圖示如下 codis redis 是基於開源redis修改了部分內容,完全相容開源redis,分為多組主備 客戶端都通過proxy連線進來 z...
《轉》codis效能測試
1 測試背景 由於業務需求,開發決定部署乙個redis高可用方案codis,使用codis3.2版本。2 非常簡單的redis讀寫方法,讀和寫分開測。3 基本架構 一台應用伺服器 12核48g 單例項proxy 48核198g 三例項zk集群 48核198g 三組codis server,每組各乙個...
redis的集群方案之codis
codis 詳細介紹 codis 是乙個分布式 redis 解決方案,對於上層的應用來說,連線到 codis proxy 和連線原生的 redis server 沒有明顯的區別 不支援的命令列表 上層應用可以像使用單機的 redis 一樣使用,codis 底層會處理請求的 不停機的資料遷移等工作,所...