部署和維護 / 基準效能測試
本文主要介紹如何對 DataFlux Func 進行基準效能測試。
1. 前言
本文中的所有示例結果均在以下硬體環境中測試所得:
說明 | |
---|---|
計算機 | HP ProBook 膝上型電腦 |
CPU | AMD Ryzen 5 7530U with Radeon Graphics / 4.5 GHz |
記憶體 | 32 GB / 3200 MHz (0.3 ns) |
作業系統 | Ubuntu 22.04.5 LTS |
2. Benchmark 測試包
下載 Benchmark.zip,並匯入 DataFlux Func
Benchmark 測試包包含如下內容:
內容 | 說明 |
---|---|
指令碼集 benchmark |
|
函式 benchmark__main.hello_world |
直接返回 "ok" 的空函式,用於併發測試 |
函式 benchmark__main.json_dump |
進行 JSON 的序列化 / 反序列化,用於效能測試 |
函式 benchmark__main.calc_pi |
計算圓周率,用於效能測試 |
同步 API benchmark-hello-world |
用於併發測試 |
定時任務 benchmark-hello-world |
用於測試任務排程效能 |
定時任務 benchmark-compute-pi |
用於測試計算效能(計算圓周率) |
定時任務 benchmark-json-dump-and-load |
用於測試計算效能(JSON 的序列化 / 反序列化) |
3. 執行測試
匯入 Benchmark 測試包後,由於定時任務由於自動執行,稍等幾分鐘即可從任務記錄中檢視結果
而 DataFlux Func 的併發效能測試則需要藉助其他工具進行
3.1 測試任務排程效能
匯入 Benchmark 測試包後稍等幾分鐘,即可在「定時任務」中的「Hello, World」任務記錄檢視結果
一般來說,每次任務耗時都應該在 10 毫秒以內
3.2 測試計算效能
匯入 Benchmark 測試包後稍等幾分鐘,即可在「定時任務」中的「Compute pi」和「JSON dump and load」任務記錄檢視結果
就「前言」中的測試環境來說,每次任務耗時都在 1 秒左右:
- 計算圓周率「Compute pi」
- JSON 的序列化 / 反序列化「JSON dump and load」
3.3 測試函式 API 併發效能
測試併發效能時,可以使用 ab (ApacheBench)工具進行測試
如尚未安裝 ab,可以使用如下命令安裝:
Bash | |
---|---|
1 |
|
Bash | |
---|---|
1 |
|
使用 ab 對測試包中的「Hello, World」進行呼叫測試,命令如下:
Bash | |
---|---|
1 |
|
Bash | |
---|---|
1 |
|
就「前言」中的測試環境來說,空函式的併發在 1000 左右(Requests per second):
ab 測試輸出 | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
4. 影響效能的原因
由於任務的實際執行內容由實際呼叫的指令碼決定,如遇到讓任務執行耗時長,可以檢查程式碼中是否存在以下問題:
4.1 大量 print(...)
為了除錯方便,有人可能會在指令碼中直接將 DB 中資料、API 返回的資料全部透過 print(...)
輸出
由於 DataFlux Func 會自動記錄任務執行的 print(...)
內容,因此這樣的操作會導致極大的效能損耗
建議在程式碼投入生產後,僅保留必要的 print(...)
輸出,且避免大段文字的輸出
4.2 外部系統響應慢
當在指令碼中查詢外部資料庫、呼叫 API 介面(包括執行 DQL 查詢等)時,如遇到網路卡頓,或者單純就是對方系統響應慢,也會導致任務執行耗時長。
這與 DataFlux Func 基本無關,應聯絡這些外部系統負責人來改善響應速度。
以下是一個簡單的測試處理耗時的示例程式碼:
Python | |
---|---|
1 2 3 4 5 6 7 |
|