You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by ic...@apache.org on 2024/07/13 16:21:32 UTC

(dubbo-benchmark) branch master updated: improve benchmark (#50)

This is an automated email from the ASF dual-hosted git repository.

icodening pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-benchmark.git


The following commit(s) were added to refs/heads/master by this push:
     new 943f170  improve benchmark (#50)
943f170 is described below

commit 943f1707a4f275a87d2c58a97ec025b652a17443
Author: icodening <ic...@apache.org>
AuthorDate: Sun Jul 14 00:21:26 2024 +0800

    improve benchmark (#50)
---
 benchmark-dashboard/README.md                      |  76 +++++++++++++++++++++
 benchmark-dashboard/assets/image-1.png             | Bin 0 -> 950740 bytes
 benchmark-dashboard/assets/image-2.png             | Bin 0 -> 865452 bytes
 benchmark-dashboard/assets/usage-1.png             | Bin 0 -> 70640 bytes
 benchmark-dashboard/assets/usage-2.png             | Bin 0 -> 110354 bytes
 benchmark-dashboard/assets/usage-3.png             | Bin 0 -> 138215 bytes
 benchmark-dashboard/assets/usage-4.png             | Bin 0 -> 165090 bytes
 benchmark-dashboard/assets/usage-5.png             | Bin 0 -> 377250 bytes
 benchmark-dashboard/kubernetes/benchmark-cron.yaml |   9 ++-
 .../kubernetes/benchmark-shell.yaml                |   8 +--
 benchmark-dashboard/kubernetes/infra.yaml          |  32 ++++-----
 benchmark-dashboard/kubernetes/pvc.yaml            |   2 +-
 12 files changed, 104 insertions(+), 23 deletions(-)

diff --git a/benchmark-dashboard/README.md b/benchmark-dashboard/README.md
new file mode 100644
index 0000000..c3291f7
--- /dev/null
+++ b/benchmark-dashboard/README.md
@@ -0,0 +1,76 @@
+# 自动化的 Dubbo 框架与协议性能基准 Benchmark 机制与平台使用手册
+
+## 环境要求
+* JDK 1.8 (执行benchmark程序)
+* Maven (构建代码)
+* ncat (用于探测端口是否开放)
+* jq (用于处理benchmark结果)
+* mycli (用于操作数据库)
+* MySQL 8(存储benchmark结果)
+* Grafana(展示benchmark结果)
+* Kubernetes (用于部署)
+
+## 目录说明
+* asserts 截图资源
+* docker 存放执行benchmark时所需的基础镜像构建Dockerfile
+* grafana 存放benchmark的grafana dashboard
+* kubernetes 存放kubernetes相关的yaml
+
+## 使用方式
+### 1. 先进入存放yaml的kubernetes目录,然后执行以下命令
+````shell
+kubectl apply -f pvc.yaml
+kubectl apply -f infra.yaml
+kubectl apply -f benchmark-shell.yaml
+kubectl apply -f benchmark-cron.yaml
+````
+### 2. 初始化mysql benchmark数据库
+> PS. 默认首次启动会自动初始化, 如果没有则可以按照以下流程初始化数据库  
+
+通过以下命令找到mysql pod
+````shell
+kubectl get pod
+````
+通过以下命令进入mysql容器
+````shell
+kubectl exec -it [mysql pod] -- /bin/bash
+````
+进入mysql容器后通过以下命令连接mysql, 默认密码root
+````shell
+mysql -u root -p
+````
+导入schema.sql文件
+````shell
+use benchmark;
+source /docker-entrypoint-initdb.d/schema.sql;
+````
+
+### 3. 访问Grafana
+可通过以下命令获取Grafana的地址
+````shell
+kubectl get svc grafana
+````
+### 4. 添加mysql数据源
+![usage-1](./assets/usage-1.png)  
+ 然后在浏览器中输入地址,用户名密码为**admin/admin** (默认的账号密码)
+
+![usage-4](./assets/usage-4.png)
+![usage-5](./assets/usage-5.png)
+
+### 4. 导入benchmark dashboard
+
+
+登入Grafana后按照以下步骤导入`grafana/benchmark-dashboard.json`面板
+![usage-2](./assets/usage-2.png)
+![usage-3](./assets/usage-3.png)
+
+### 5. 等待kubernetes调度benchmark任务
+经过一段时间的benchmark后,便可以看到以下结果
+![image-1](./assets/image-1.png)
+
+
+
+
+
+
+
diff --git a/benchmark-dashboard/assets/image-1.png b/benchmark-dashboard/assets/image-1.png
new file mode 100644
index 0000000..1668fad
Binary files /dev/null and b/benchmark-dashboard/assets/image-1.png differ
diff --git a/benchmark-dashboard/assets/image-2.png b/benchmark-dashboard/assets/image-2.png
new file mode 100644
index 0000000..3ecda9a
Binary files /dev/null and b/benchmark-dashboard/assets/image-2.png differ
diff --git a/benchmark-dashboard/assets/usage-1.png b/benchmark-dashboard/assets/usage-1.png
new file mode 100644
index 0000000..b60643a
Binary files /dev/null and b/benchmark-dashboard/assets/usage-1.png differ
diff --git a/benchmark-dashboard/assets/usage-2.png b/benchmark-dashboard/assets/usage-2.png
new file mode 100644
index 0000000..0eef3d8
Binary files /dev/null and b/benchmark-dashboard/assets/usage-2.png differ
diff --git a/benchmark-dashboard/assets/usage-3.png b/benchmark-dashboard/assets/usage-3.png
new file mode 100644
index 0000000..7cbcf7d
Binary files /dev/null and b/benchmark-dashboard/assets/usage-3.png differ
diff --git a/benchmark-dashboard/assets/usage-4.png b/benchmark-dashboard/assets/usage-4.png
new file mode 100644
index 0000000..7d36dc9
Binary files /dev/null and b/benchmark-dashboard/assets/usage-4.png differ
diff --git a/benchmark-dashboard/assets/usage-5.png b/benchmark-dashboard/assets/usage-5.png
new file mode 100644
index 0000000..ea50260
Binary files /dev/null and b/benchmark-dashboard/assets/usage-5.png differ
diff --git a/benchmark-dashboard/kubernetes/benchmark-cron.yaml b/benchmark-dashboard/kubernetes/benchmark-cron.yaml
index 26590eb..fe2faef 100644
--- a/benchmark-dashboard/kubernetes/benchmark-cron.yaml
+++ b/benchmark-dashboard/kubernetes/benchmark-cron.yaml
@@ -4,6 +4,7 @@ metadata:
   name: cron-dubbo-fastjson2-32-benchmark-job
 spec:
   schedule: "20 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -63,8 +64,6 @@ spec:
               secret:
                 secretName: mysql-secret
           restartPolicy: Never
-
-
 ---
 apiVersion: batch/v1
 kind: CronJob
@@ -72,6 +71,7 @@ metadata:
   name: cron-dubbo-hessianlite-32-benchmark-job
 spec:
   schedule: "20 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -140,6 +140,7 @@ metadata:
   name: cron-grpc-benchmark-job
 spec:
   schedule: "20 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -209,6 +210,7 @@ metadata:
   name: cron-spring-cloud-benchmark-job
 spec:
   schedule: "40 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -277,6 +279,7 @@ metadata:
   name: cron-triple-32-benchmark-job
 spec:
   schedule: "40 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -346,6 +349,7 @@ metadata:
   name: cron-dubbo-kryo-32-benchmark-job
 spec:
   schedule: "40 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
@@ -415,6 +419,7 @@ metadata:
   name: cron-dubbo-pb-32-benchmark-job
 spec:
   schedule: "0 * * * *"
+  concurrencyPolicy: Forbid
   jobTemplate:
     spec:
       ttlSecondsAfterFinished: 300
diff --git a/benchmark-dashboard/kubernetes/benchmark-shell.yaml b/benchmark-dashboard/kubernetes/benchmark-shell.yaml
index 1f409c9..68aa509 100644
--- a/benchmark-dashboard/kubernetes/benchmark-shell.yaml
+++ b/benchmark-dashboard/kubernetes/benchmark-shell.yaml
@@ -14,7 +14,7 @@ data:
     cd ~ || exit
     echo $(pwd)
     echo "pull dubbo source code."
-    git clone --depth 1 --single-branch --branch $BRANCH git@github.com:apache/dubbo.git || exit
+    git clone --depth 1 --single-branch --branch $BRANCH https://github.com/apache/dubbo.git || exit
     REVISION=`awk '/<revision>[^<]+<\/revision>/{gsub(/<revision>|<\/revision>/,"",$1);print $1;exit;}' ./dubbo/pom.xml`
     VERSION=$REVISION
     echo "version=$REVISION"
@@ -28,7 +28,7 @@ data:
     MINOR_VERSION=$(echo $VERSION | awk -F '.' '{print $1"."$2}')
     echo "minor-version=$MINOR_VERSION"
     cd ~ || exit
-    git clone --depth 1 --single-branch --branch master git@github.com:apache/dubbo-benchmark.git || exit
+    git clone --depth 1 --single-branch --branch master https://github.com/apache/dubbo-benchmark.git || exit
     cd ~/dubbo-benchmark || exit
     bash prepare.sh $VERSION
     bash benchmark.sh -m profiling ${SERVER_MODULE_NAME} &
@@ -84,7 +84,7 @@ metadata:
   name: git-ssh
 type: Opaque
 data:
-  id_ed25519: private_key_base64
-  id_ed25519.pub: public_key_base64
+  id_ed25519: cHJpdmF0ZV9rZXlfYmFzZTY0
+  id_ed25519.pub: cHVibGljX2tleV9iYXNlNjQ=
   known_hosts: Z2l0aHViLmNvbSBzc2gtZWQyNTUxOSBBQUFBQzNOemFDMWxaREkxTlRFNUFBQUFJT01xcW5rVnpybTBTZEc2VU9vcUtMc2FiZ0g1Qzlva1dpMGRoMmw5R0tKbApnaXRodWIuY29tIGVjZHNhLXNoYTItbmlzdHAyNTYgQUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUFJYm1semRIQXlOVFlBQUFCQkJFbUtTRU5qUUVlek9teGtaTXk3b3BLZ3dGQjlua3Q1WVJyWU1qTnVHNU44N3VSZ2c2Q0xyYm81d0FkVC95NnYwbUtWMFUydzBXWjJZQi8rK1Rwb2NrZz0KZ2l0aHViLmNvbSBzc2gtcnNhIEFBQUFCM056YUMxeWMyRUFBQUFEQVFBQkFBQUJnUUNqN25kTnhRb3dnY1FuanNoY0xycVBFaWlwaG50K1ZUVHZEUDZtSEJMOWoxY [...]
 
diff --git a/benchmark-dashboard/kubernetes/infra.yaml b/benchmark-dashboard/kubernetes/infra.yaml
index 178f49a..c3b73fd 100644
--- a/benchmark-dashboard/kubernetes/infra.yaml
+++ b/benchmark-dashboard/kubernetes/infra.yaml
@@ -8,16 +8,16 @@ data:
     use benchmark;
     create table benchmark_score
     (
-    id             bigint auto_increment primary key,
-    name           varchar(32) not null,
-    mode           varchar(16) not null,
-    score          double      not null,
-    p99            double      not null,
-    p95            double      not null,
-    p90            double      not null,
-    method         varchar(64) not null,
-    benchmark_time datetime    not null,
-    create_time    datetime    not null
+        id             bigint auto_increment primary key,
+        name           varchar(32) not null,
+        mode           varchar(16) not null,
+        score          double      not null,
+        p99            double      not null,
+        p95            double      not null,
+        p90            double      not null,
+        method         varchar(64) not null,
+        benchmark_time datetime    not null,
+        create_time    datetime    not null
     );
     create index idx on benchmark_score (benchmark_time, method, name, mode);
 ---
@@ -56,7 +56,7 @@ spec:
               mountPath: /var/lib/mysql
               subPath: mysql
             - name: init-script
-              mountPath: /home/dev/schema.sql
+              mountPath: /docker-entrypoint-initdb.d/schema.sql
               subPath: schema.sql
 
       volumes:
@@ -118,14 +118,14 @@ spec:
           ports:
             - containerPort: 3000
           volumeMounts:
-            - mountPath: /var/lib/grafana/
-              name: grafana-pvc
+            #            - mountPath: /var/lib/grafana/
+            #              name: grafana-pvc
             - mountPath: /etc/grafana/
               name: grafana-config
       volumes:
-        - name: grafana-pvc
-          persistentVolumeClaim:
-            claimName: benchmark
+        #        - name: grafana-pvc
+        #          persistentVolumeClaim:
+        #            claimName: benchmark
         - name: grafana-config
           configMap:
             name: grafana
diff --git a/benchmark-dashboard/kubernetes/pvc.yaml b/benchmark-dashboard/kubernetes/pvc.yaml
index 3d35cec..c69bff9 100644
--- a/benchmark-dashboard/kubernetes/pvc.yaml
+++ b/benchmark-dashboard/kubernetes/pvc.yaml
@@ -4,7 +4,7 @@ metadata:
   name: benchmark
 spec:
   accessModes:
-    - ReadWriteMany
+    - ReadWriteOnce
   resources:
     requests:
       storage: 120Gi