部署和維護 / 基準性能測試
本文主要介紹如何對 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 |
|