1. 程式人生 > 其它 >clickhouse HA 及效能測試

clickhouse HA 及效能測試

需求說明


    針對clickhouse作為生產環境的底層資料儲存,為了能保證生產環境服務穩定可用,做如下效能測試:

(1)chproxy + clickhouse 能否實現叢集高可用

(2)clickhouse 寫效能

(3)clickhouse查詢效能

(4)clickhouse開啟欄位分割槽能否提高查詢效能

(5)chproxy開啟快取對效能影響

    本文件將針對上述方案做驗證以及測試輸出結果。

邏輯架構圖

 

 

ch5、ch6等機器構成一個clickhouse叢集,使用者讀寫請求直接作用在chproxy,chproxy提供透明的控制訪問配置以及讀寫指標的監控,可實現使用者無感知的故障訪問切換。對於讀服務,chproxy利用distrubute分散式表優秀的sql解析功能實現資料的查詢服務;對於寫請求,儘量降低寫帶來的叢集IO負載,chproxy穿透distrubute表直接作用在具體表節點上,減少叢集表節點資料轉發帶來的IO。若後期業務的擴充套件需求,可直接橫向擴充套件機器節點即可。

物體架構圖

測試效能

測試指標說明:

本次分別在寫執行緒5/10/20/40/80 每秒寫場景下,模擬不同併發讀效能,其中讀壓力測試以10s內,啟用500/1000/1500個查詢,測試併發場景在不同級別下表sql的效能,用於生產環境clickhouse機器部署參考,測試效能如下所示,在查詢過程中將主要捕獲如下指標:

  (1)  throughput:用來衡量吞吐量的指標,通常由TPS和QPS來表示

(2)插入的rows/s:反映叢集的寫入效能

(3)插入的bytes/s:反映叢集的寫入效能

sql語句準備

  綜合上述的情況準備瞭如下sql:

  Q1: select * from db.table where tenant_id = ${tenant_id} and project_id =${project_id}  limit 20; //該語句組合了“不使用聚合”+“多條件查詢”,查詢複雜性最小,基本只存在叢集頻寬瓶頸

  Q2:select count(*) from db.table where  tenant_id = ${tenant_id} and project_id =${project_id}  //該語句組合了“使用聚合”+“多條件查詢”,查詢複雜性一般

  Q3:select tenant_id,count(*) as c,max(project_id) as m,count(distinct(project_id)) from db.table where  tenant_id = ${tenant_id} group by tenant_id //該語句組合了“多聚合”+“條件查詢” ,查詢複雜性較難

  Q4:select count(*) from db.table where  tenant_id =${tenant_id} and tenant_id in (select distinct(tenant_id) from db.table2) group by project_id //該語句組合了“聚合”+“過濾”+“跨表join”,查詢複雜性最難

環境準備

本次使用3臺測試環境物體機16core,64 GIB,該機器上同時搭載有kudu叢集,hdfs叢集,yarn等服務,當在生產環境部署時,效能會比本次測試優越。在上述的兩臺機器上按上述物體架構部署3個節點,其中:

192.168.104.93 clickhouse節點,用於接收資料寫入及查詢

192.168.104.94 clickhouse節點,用於接收資料寫入及查詢

192.168.104.95 chproxy節點,用於查詢服務代理轉發

其中192.168.104.93與192.168.104.94互為副本。

測試結論報告

(1) HA測試,停止某臺服務,對外服務是否正常訪問

  

如左圖所示,啟動500個執行緒執行100秒,在100秒過程中,手動kill 192.168.104.94節點上clickhouse服務,在查詢結果樹種,由於節點下線,該時刻的查詢失敗,但服務依舊正常執行sql,因此HA驗證結果成功。

(2)spark 以(5/10/20/40)個併發模擬寫資料時,讀效能(讀50/100/150併發)測試

2.1 寫併發測試

     在測試環境中啟動4個併發,寫batch為10W時,clickhouse表現效能如下,其中資料寫入峰值為80W/s,180MiB/s,平均寫入效能為40W/s,90M/s

  

 啟動8個併發, 寫batch為20W時,clickhouse表現效能表現不穩定,峰值寫入103W/s,230M/s,偶爾存在超時失敗情況。

 啟動20個併發,寫batch為20W時,clickhouse表現效能表現寫入一段時間後超時失敗。

啟動40個併發,寫batch為20W時,clickhouse表現效能表現寫入一段時間後超時失敗。

在大批量寫入情況下,持續寫入併發為2~6,單臺機器1~3左右最穩定,寫入效能最高(But if you follow the recommendations to insert data in batches of no more than one INSERT per second, it does not create any problems)測試符合預期。同時從圖中可以發現數據寫入對cpu效能影響很小。

2.2 qps併發效能測試

    在上述4個併發,20W/s寫入條件下,對不同量級別的表做併發測試,其中分別在500/1000/1500執行緒(大於1500情形目前不考慮)在10s內完成向chproxy傳送請求不開啟快取的情況下,獲取QPS效能結果如下:

table描述\sql型別

Q1

Q2

Q3

Q4

備註

(20W條,1.5M,147個租戶)表

150

150

150

150

關聯3k表join查詢

(80W條,5.3M,147個租戶)表

150

150

150

150

關聯3k表join查詢

(200W條,16M,91個租戶)表

150

150

150

150

關聯3k表join查詢

(800W條,211M,1278個租戶)表

150

150

150

150

關聯3k表join查詢

(2000W條,500M,1278個租戶)表

150

150

150

76

關聯8000k表join查詢

(12000W條,2100M,45個租戶)表

150

150

52

150

關聯3k表join查詢

(80000W條,16000M,45個租戶)表

150

150

9.3

4.1

關聯1億表join查詢

(20W條,1.5M,147個租戶)分割槽表

150

150

150

150

關聯3k表join查詢

(80W條,5.3M,147個租戶)分割槽表

150

150

150

150

關聯3k表join查詢

(200W條,16M,91個租戶)分割槽表

150

150

150

150

關聯3k表join查詢

(800W條,211M,1278個租戶)分割槽表

150

150

150

150

關聯3k表join查詢

(2000W條,500M,1278個租戶)分割槽表

150

150

150

77

關聯8000k表join查詢

(12000W條,2100M,45個租戶)分割槽表

150

150

51

150

關聯3k表join查詢

(80000W條,16000M,45個租戶)分割槽表

150

150

11

5

關聯1億表join查詢

 

考慮上述的sql查詢都在租戶下查詢實現的,因此單位租戶下資料量的多少在一定程度上影響了clickhouse 查詢,如20000W表,租戶為1278時,進過租戶條件過濾後數量量很小,基本沒效能影響。儘管在複雜sql查詢下存在資料量大的表可能存在查詢問題,但這類sql查詢不到0.1%的場景,且不存在連續查詢情況,因此在真實生產環境下存在併發效能問題的可能性很小.

(3)租戶劃分使用場景

 

                                   不劃分租戶                       VS           劃分租戶

     如上圖所示,不同量級的表在劃分租戶與否的情況下QPS效能幾乎一致,分割槽並不能加速查詢,常用於表分割槽drop等操作使用(partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc)

 

(4)快取

    如上圖sql分析所示,在真實生產環境中80%的sql查詢都查詢了重複的sql,重複的資料,如下圖在15000併發查詢在100內開啟快取時,Q3在(12000W條,2100M,45個租戶)分割槽表上的QPS與不開啟快取Q3在(12000W條,2100M,45個租戶)分割槽表表現對比:

 

儘管測試sql包含了大量重複的sql查詢,可能無法cover生產環境,但快取的使用攔截了大量查詢請求,提高了查詢效能。

   

結論

本測試報告結合真實生產環境中sql的型別、大小表使用頻率、sql重複查詢使用情況做了分析,並以此模擬真實生產環境,圍繞clickhouse效能在3臺測試環境下展開,並給出瞭如下效能報告總結:

(1)寫併發測試:在持續大批量寫入時,單臺機器併發建議在1~3左右最穩定,資料寫入峰值為80W/s,180MiB/s,平均寫入效能為40W/s,90M/s

(2) 在複雜sql查詢下存在資料量大的表可能存在查詢問題,但正如上述sql分析的那樣,這類sql查詢不到1%的場景,且不存在連續高併發查詢情況,因此在真實生產環境下存在效能問題的可能性為0.

(3)分割槽並不能加速查詢,不需要為特定欄位分割槽

(4)開啟快取

轉自:https://www.dianjilingqu.com/