透過 Ansible 和 EC2 執行效能基準測試
此功能透過使用 Ansible 為 Amazon Web Services EC2 執行個體自動化設定,來擴展 kcb.sh 指令碼的通用 CLI,以執行負載測試。
當單一負載產生執行個體不足時,例如當網路連線因為太多處於 TIMED_WAIT
狀態的連線而無法快速建立時,請使用此功能。這也有助於您在相同或不同的 AWS 區域中擁有負載驅動程式,以擁有最小延遲或模擬使用者觀察到的延遲。
先決條件
-
來自 準備 Keycloak 進行測試 的 Keycloak URL
-
安裝 Ansible CLI(在 Fedora 上,使用
dnf install ansible
)
用於負載產生的 EC2 執行個體
資料夾配置
在 ansible
資料夾中,有以下檔案和資料夾
roles/aws_ec2
-
Ansible 角色。
roles/aws_ec2/defaults/main.yml
-
Ansible 角色的預設值,可以在
env.yml
中覆寫,該檔案會被包裝器指令碼擷取。 aws_ec2.sh
-
包裝器指令碼。
設定
建立組態檔 env.yml
來設定您的環境。使用檔案 env_example.yaml
作為範例。
env.yml
設定 EC2 環境的範例內容cluster_size: 5
instance_type: t4g.small
instance_volume_size: 30
env.yml
中最需要自訂的參數是
cluster_size
-
要建立的執行個體數量。預設情況下,Gatling 會為每個新使用者建立新的 HTTP 連線。由於負載驅動程式的網路堆疊可能會因為大量處於
TIME_WAIT
狀態的連線而壅塞,因此請考慮每秒每 250 位使用者使用一個 EC2 執行個體。 instance_type
-
要建立的執行個體大小,請參閱 AWS 執行個體類型。
建立 EC2 執行個體
執行個體將會繫結到建立它們的系統的 IP 位址! |
建立執行個體時,建立機器的主機的公用 IP 位址會新增到 EC2 安全群組,而且只允許此 IP 位址透過 SSH 登入負載驅動程式。當公用 IP 位址變更時,您需要重新執行 create
命令。公用 IP 位址會變更,例如,當變更位置或網路時,或者當家裡的網際網路連線每晚更新 IP 位址時。當執行 Ansible 的主機的 IP 位址無法連線時,顯示的訊息是 Failed to connect to the host via ssh
。
-
安裝必要的 Ansible AWS 集合。
./aws_ec2.sh requirements
-
建立 EC2 執行個體和相關基礎架構。這大約需要 5 分鐘才能完成。
./aws_ec2.sh create <REGION>
這將會建立 Ansible 主機庫存檔案和相符的 SSH 私密金鑰,以存取主機
-
benchmark_<USERNAME>_<REGION>_inventory.yml
-
benchmark_<USERNAME>_<REGION>.pem
-
停止/啟動 EC2 執行個體
建立之後,EC2 執行個體正在執行。為了節省成本,請考慮停止它們,並在稍後需要時再啟動它們。這比再次建立執行個體稍微節省時間。
./aws_ec2.sh stop <REGION> ./aws_ec2.sh start <REGION>
start
動作會使用重新啟動的主機的新 IP 位址重新建立主機庫存檔案。
效能基準測試
資料夾配置
roles/benchmark
-
Ansible 角色。
roles/benchmark/defaults/main.yml
-
Ansible 角色的預設值。可以在
env.yml
中覆寫,該檔案會被包裝器指令碼擷取。 benchmark.sh
-
包裝器指令碼。
設定
更新組態檔 env.yml
來設定您的環境。使用檔案 env_example.yaml
作為範例。
env.yml
設定效能基準測試執行的範例內容kcb_zip: ../benchmark/target/keycloak-benchmark-0.14-SNAPSHOT.zip
kcb_heap_size: 1G
安裝並執行效能基準測試
提供區域作為第一個參數,然後提供套用至 kcb.sh
指令碼的參數。請參閱 從 CLI 執行效能基準測試 以了解詳細資訊。
劇本會剖析一些參數以產生輸出結構並分配負載,因此需要參數 scenario
。如果提供參數 concurrent-users
,則它需要是負載分配到的 EC2 節點的倍數。
使用參數 concurrent-users
或 users-per-sec
來指定針對 Keycloak 執行個體執行的總負載。劇本會讀取命令列上提供的 concurrent-users
或 users-per-sec
,並在將值傳遞給每個在 EC2 執行個體上執行的 kcb.sh
指令碼之前,將這些數字除以 EC2 執行個體的數量。
./benchmark.sh <REGION> <P1> <P2> ... <Pn>
可能的命令如下所示
./benchmark.sh eu-west-1 --scenario=keycloak.scenario.authentication.ClientSecret \
--server-url=https://keycloak-runner-keycloak.apps.....openshiftapps.com \
--users-per-sec=1000 \
--measurement=600 \
--realm-name=realm-0 \
--clients-per-realm=10000
這會在 benchmark_<USERNAME>_<REGION>_inventory.yml
中列出的主機上安裝 Keycloak 效能基準測試,並執行效能基準測試,將參數 P1、P2、… Pn 傳遞給 kcb.sh
指令碼。
其他參數可以透過 env.yml
檔案自訂。
要安裝的效能基準測試版本可以透過 kcb_version
參數指定。
如果檔案已在本機可用,也可以直接提供 kcb_zip
參數,或從中下載效能基準測試的 kcb_zip_url
。然後會從檔名中擷取 kcb_version
。
參數 skip_install
可用於略過安裝步驟。在這種情況下,必須根據先前安裝的內容提供變數 kcb_version
。
效能基準測試結果
來自分散式模擬的彙總報告將會儲存在相對於執行目錄的檔案資料夾中本機。
📒 files/ └─📂 benchmark/ └─📂 keycloak-benchmark-{{ kcb_version }}/ └─📂 results/ └─📂 {{ scenario }}-{{ timestamp }}/ ├─📂 simulation/ (1) │ ├─📄 {{ host_1 }}.log │ ├─📄 {{ host_2 }}.log │ └─📄 ... ├─📂 gatling/ (2) │ ├─📄 {{ host_1 }}.log │ ├─📄 {{ host_2 }}.log │ ├─📄 ... │ ├─📄 {{ host_1 }}.rc │ ├─📄 {{ host_2 }}.rc │ └─📄 ... └─📄 index.html
1 | simulation/ 目錄包含來自個別節點的模擬資料。 |
2 | gatling/ 目錄包含來自個別節點的 Gatling 記錄和傳回碼。 |