add new benchmark projects (#122)

diff --git a/java-chassis-benchmark/README.md b/java-chassis-benchmark/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/java-chassis-benchmark/README.md
diff --git a/java-chassis-benchmark/basic-3.0.x/consumer/pom.xml b/java-chassis-benchmark/basic-3.0.x/consumer/pom.xml
new file mode 100644
index 0000000..db575ea
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/pom.xml
@@ -0,0 +1,46 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>basic-application-3.0.x</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>basic-consumer-3.0.x</artifactId>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerApplication.java
similarity index 60%
rename from java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
rename to java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerApplication.java
index 871ccb4..d780350 100644
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerApplication.java
@@ -15,26 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo.perf;
+package org.apache.servicecomb.samples;
 
-import java.util.Arrays;
-import java.util.List;
+import org.springframework.boot.WebApplicationType;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
 
-import org.apache.servicecomb.foundation.common.utils.BeanUtils;
-import org.apache.servicecomb.foundation.vertx.VertxUtils;
-
-public class PerfMain {
-
+@SpringBootApplication
+public class ConsumerApplication {
   public static void main(String[] args) throws Exception {
-    BeanUtils.init();
-
-    // redis
-    RedisClientUtils.init(VertxUtils.getOrCreateVertxByName("transport", null));
-
-    List<String> argList = Arrays.asList(args);
-    if (argList.contains("-c")) {
-      PerfConsumer consumer = BeanUtils.getContext().getBean(PerfConsumer.class);
-      consumer.runConsumer();
+    try {
+      new SpringApplicationBuilder()
+          .web(WebApplicationType.NONE)
+          .sources(ConsumerApplication.class)
+          .run(args);
+    } catch (Exception e) {
+      e.printStackTrace();
     }
   }
 }
diff --git a/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerController.java b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerController.java
new file mode 100644
index 0000000..b23a0e6
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ConsumerController.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.samples;
+
+import org.apache.servicecomb.provider.pojo.RpcReference;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RestSchema(schemaId = "ConsumerController")
+@RequestMapping(path = "/")
+public class ConsumerController {
+  @RpcReference(schemaId = "ProviderController", microserviceName = "provider")
+  private ProviderService providerService;
+
+  @PostMapping("/benchmark")
+  public DataModel sayHello(@RequestHeader("wait") int wait, @RequestBody DataModel dataModel) throws Exception {
+    return providerService.sayHello(wait, dataModel);
+  }
+}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ProviderService.java
similarity index 74%
rename from java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java
rename to java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ProviderService.java
index c671fda..00d560e 100644
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/java/org/apache/servicecomb/samples/ProviderService.java
@@ -15,12 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo.perf;
+package org.apache.servicecomb.samples;
 
-import java.util.concurrent.CompletableFuture;
-
-public interface Intf {
-  String syncQuery(String id, int step, int all, boolean fromDB);
-
-  CompletableFuture<String> asyncQuery(String id, int step, int all, boolean fromDB);
+public interface ProviderService {
+  DataModel sayHello(int wait, DataModel dataModel);
 }
diff --git a/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/application.yml b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/application.yml
new file mode 100644
index 0000000..597b7df
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/application.yml
@@ -0,0 +1,58 @@
+#
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+servicecomb:
+  service:
+    application: basic-application
+    name: consumer
+    version: 0.0.1
+
+  rest:
+    address: 0.0.0.0:9092
+
+spring:
+  profiles:
+    active: servicecomb # 注册中心类型:servicecomb 或者 nacos
+
+---
+spring:
+  config:
+    activate:
+      on-profile: servicecomb
+servicecomb:
+  # 注册发现
+  registry:
+    sc:
+      address: http://localhost:30100
+  # 动态配置
+  kie:
+    serverUri: http://localhost:30110
+
+---
+spring:
+  config:
+    activate:
+      on-profile: nacos
+servicecomb:
+  # 注册发现
+  registry:
+    nacos:
+      serverAddr: http://localhost:8848
+  # 动态配置
+  nacos:
+    serverAddr: http://localhost:8848
+
diff --git a/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/log4j2.xml b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..2c557a8
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/consumer/src/main/resources/log4j2.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<Configuration>
+  <Properties>
+    <property name="FILE_PATH" value="./logs/consumer"/>
+  </Properties>
+
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d [%p][%t][%c:%L] %m%n"/>
+    </Console>
+
+    <RollingFile name="AccessLog" fileName="${FILE_PATH}/access.log"
+      filePattern="${FILE_PATH}/access-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+
+    <RollingFile name="MetricsLog" fileName="${FILE_PATH}/metrics.log"
+      filePattern="${FILE_PATH}/metrics-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+
+    <RollingFile name="SlowLog" fileName="${FILE_PATH}/slow.log"
+      filePattern="${FILE_PATH}/slow-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+  </Appenders>
+
+  <Loggers>
+    <Logger name="scb-access" level="INFO" additivity="false">
+      <AppenderRef ref="AccessLog"/>
+    </Logger>
+    <Logger name="scb-metrics" level="INFO" additivity="false">
+      <AppenderRef ref="MetricsLog"/>
+    </Logger>
+    <Logger name="scb-slow" level="INFO" additivity="false">
+      <AppenderRef ref="SlowLog"/>
+    </Logger>
+
+    <Root level="INFO">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/java-chassis-benchmark/basic-3.0.x/gateway/pom.xml b/java-chassis-benchmark/basic-3.0.x/gateway/pom.xml
new file mode 100644
index 0000000..fab495f
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/gateway/pom.xml
@@ -0,0 +1,49 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>basic-application-3.0.x</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>basic-gateway-3.0.x</artifactId>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>edge-core</artifactId>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/java/org/apache/servicecomb/samples/GatewayApplication.java
similarity index 60%
copy from java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
copy to java-chassis-benchmark/basic-3.0.x/gateway/src/main/java/org/apache/servicecomb/samples/GatewayApplication.java
index 871ccb4..2d782e0 100644
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
+++ b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/java/org/apache/servicecomb/samples/GatewayApplication.java
@@ -15,26 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo.perf;
+package org.apache.servicecomb.samples;
 
-import java.util.Arrays;
-import java.util.List;
+import org.springframework.boot.WebApplicationType;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
 
-import org.apache.servicecomb.foundation.common.utils.BeanUtils;
-import org.apache.servicecomb.foundation.vertx.VertxUtils;
-
-public class PerfMain {
-
+@SpringBootApplication
+public class GatewayApplication {
   public static void main(String[] args) throws Exception {
-    BeanUtils.init();
-
-    // redis
-    RedisClientUtils.init(VertxUtils.getOrCreateVertxByName("transport", null));
-
-    List<String> argList = Arrays.asList(args);
-    if (argList.contains("-c")) {
-      PerfConsumer consumer = BeanUtils.getContext().getBean(PerfConsumer.class);
-      consumer.runConsumer();
+    try {
+      new SpringApplicationBuilder()
+          .web(WebApplicationType.NONE)
+          .sources(GatewayApplication.class)
+          .run(args);
+    } catch (Exception e) {
+      e.printStackTrace();
     }
   }
 }
diff --git a/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/application.yml b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/application.yml
new file mode 100644
index 0000000..6d5a5be
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/application.yml
@@ -0,0 +1,73 @@
+#
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+servicecomb:
+  service:
+    application: basic-application
+    name: gateway
+    version: 0.0.1
+
+  rest:
+    address: 0.0.0.0:9090?sslEnabled=false
+
+  http:
+    dispatcher:
+      edge:
+        default:
+          enabled: false
+        url:
+          enabled: true
+          pattern: /(.*)
+          mappings:
+            consumer:
+              prefixSegmentCount: 0
+              path: "/.*"
+              microserviceName: consumer
+              versionRule: 0.0.0+
+
+spring:
+  profiles:
+    active: servicecomb # 注册中心类型:servicecomb 或者 nacos
+
+---
+spring:
+  config:
+    activate:
+      on-profile: servicecomb
+servicecomb:
+  # 注册发现
+  registry:
+    sc:
+      address: http://localhost:30100
+  # 动态配置
+  kie:
+    serverUri: http://localhost:30110
+
+---
+spring:
+  config:
+    activate:
+      on-profile: nacos
+servicecomb:
+  # 注册发现
+  registry:
+    nacos:
+      serverAddr: http://localhost:8848
+  # 动态配置
+  nacos:
+    serverAddr: http://localhost:8848
+
diff --git a/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/log4j2.xml b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..b24f8c5
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/gateway/src/main/resources/log4j2.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<Configuration>
+    <Properties>
+        <property name="FILE_PATH" value="./logs/gateway"/>
+    </Properties>
+
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d [%p][%t][%c:%L] %m%n"/>
+        </Console>
+
+        <RollingFile name="AccessLog" fileName="${FILE_PATH}/access.log"
+          filePattern="${FILE_PATH}/access-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <RollingFile name="MetricsLog" fileName="${FILE_PATH}/metrics.log"
+          filePattern="${FILE_PATH}/metrics-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <RollingFile name="SlowLog" fileName="${FILE_PATH}/slow.log"
+          filePattern="${FILE_PATH}/slow-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="scb-access" level="INFO" additivity="false">
+            <AppenderRef ref="AccessLog"/>
+        </Logger>
+        <Logger name="scb-metrics" level="INFO" additivity="false">
+            <AppenderRef ref="MetricsLog"/>
+        </Logger>
+        <Logger name="scb-slow" level="INFO" additivity="false">
+            <AppenderRef ref="SlowLog"/>
+        </Logger>
+
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/java-chassis-benchmark/basic-3.0.x/pom.xml b/java-chassis-benchmark/basic-3.0.x/pom.xml
new file mode 100644
index 0000000..1ff4cb0
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/pom.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>benchmark-parent</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>basic-application-3.0.x</artifactId>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <servicecomb.version>3.0.0-SNAPSHOT</servicecomb.version>
+    <spring-boot-maven-plugin.version>3.1.3</spring-boot-maven-plugin.version>
+    <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>java-chassis-dependencies</artifactId>
+        <version>${servicecomb.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb.benchmark</groupId>
+      <artifactId>benchmark-common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>solution-basic</artifactId>
+    </dependency>
+    <!-- using log4j2 -->
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+    </dependency>
+  </dependencies>
+
+  <profiles>
+    <profile>
+      <id>servicecomb</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <dependencies>
+        <!-- using service-center & kie -->
+        <dependency>
+          <groupId>org.apache.servicecomb</groupId>
+          <artifactId>registry-service-center</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.servicecomb</groupId>
+          <artifactId>config-kie</artifactId>
+        </dependency>
+      </dependencies>
+    </profile>
+    <profile>
+      <id>nacos</id>
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
+      <dependencies>
+        <!-- using service-center & kie -->
+        <dependency>
+          <groupId>org.apache.servicecomb</groupId>
+          <artifactId>registry-nacos</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.servicecomb</groupId>
+          <artifactId>config-nacos</artifactId>
+        </dependency>
+      </dependencies>
+    </profile>
+  </profiles>
+
+  <modules>
+    <module>provider</module>
+    <module>consumer</module>
+    <module>gateway</module>
+  </modules>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>${maven-compiler-plugin.version}</version>
+          <configuration>
+            <compilerArgument>-parameters</compilerArgument>
+            <source>17</source>
+            <target>17</target>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-maven-plugin</artifactId>
+          <version>${spring-boot-maven-plugin.version}</version>
+          <executions>
+            <execution>
+              <goals>
+                <goal>repackage</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/java-chassis-benchmark/basic-3.0.x/provider/pom.xml b/java-chassis-benchmark/basic-3.0.x/provider/pom.xml
new file mode 100644
index 0000000..3c75ec9
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/provider/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>basic-application-3.0.x</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>basic-provider-3.0.x</artifactId>
+  <packaging>jar</packaging>
+
+  <properties>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java b/java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderApplication.java
similarity index 60%
copy from java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
copy to java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderApplication.java
index 871ccb4..f429b34 100644
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfMain.java
+++ b/java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderApplication.java
@@ -15,26 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo.perf;
+package org.apache.servicecomb.samples;
 
-import java.util.Arrays;
-import java.util.List;
+import org.springframework.boot.WebApplicationType;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
 
-import org.apache.servicecomb.foundation.common.utils.BeanUtils;
-import org.apache.servicecomb.foundation.vertx.VertxUtils;
-
-public class PerfMain {
-
+@SpringBootApplication
+public class ProviderApplication {
   public static void main(String[] args) throws Exception {
-    BeanUtils.init();
-
-    // redis
-    RedisClientUtils.init(VertxUtils.getOrCreateVertxByName("transport", null));
-
-    List<String> argList = Arrays.asList(args);
-    if (argList.contains("-c")) {
-      PerfConsumer consumer = BeanUtils.getContext().getBean(PerfConsumer.class);
-      consumer.runConsumer();
+    try {
+      new SpringApplicationBuilder()
+          .web(WebApplicationType.NONE)
+          .sources(ProviderApplication.class)
+          .run(args);
+    } catch (Exception e) {
+      e.printStackTrace();
     }
   }
 }
diff --git a/java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderController.java b/java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderController.java
new file mode 100644
index 0000000..b956fa1
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/provider/src/main/java/org/apache/servicecomb/samples/ProviderController.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.samples;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RestSchema(schemaId = "ProviderController")
+@RequestMapping(path = "/")
+public class ProviderController {
+  @PostMapping("/benchmark")
+  public DataModel sayHello(@RequestHeader("wait") int wait, @RequestBody DataModel dataModel) throws Exception {
+    if (wait > 0) {
+      Thread.sleep(wait);
+    }
+    return dataModel;
+  }
+}
diff --git a/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/application.yml b/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/application.yml
new file mode 100644
index 0000000..939720b
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/application.yml
@@ -0,0 +1,57 @@
+#
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+servicecomb:
+  service:
+    application: basic-application
+    name: provider
+    version: 0.0.1
+  rest:
+    address: 0.0.0.0:9093
+
+spring:
+  profiles:
+    active: servicecomb # 注册中心类型:servicecomb 或者 nacos
+
+---
+spring:
+  config:
+    activate:
+      on-profile: servicecomb
+servicecomb:
+  # 注册发现
+  registry:
+    sc:
+      address: http://localhost:30100
+  # 动态配置
+  kie:
+    serverUri: http://localhost:30110
+
+---
+spring:
+  config:
+    activate:
+      on-profile: nacos
+servicecomb:
+  # 注册发现
+  registry:
+    nacos:
+      serverAddr: http://localhost:8848
+  # 动态配置
+  nacos:
+    serverAddr: http://localhost:8848
+
diff --git a/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/log4j2.xml b/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..3348204
--- /dev/null
+++ b/java-chassis-benchmark/basic-3.0.x/provider/src/main/resources/log4j2.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<Configuration>
+    <Properties>
+        <property name="FILE_PATH" value="./logs/provider"/>
+    </Properties>
+
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d [%p][%t][%c:%L] %m%n"/>
+        </Console>
+
+        <RollingFile name="AccessLog" fileName="${FILE_PATH}/access.log"
+          filePattern="${FILE_PATH}/access-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <RollingFile name="MetricsLog" fileName="${FILE_PATH}/metrics.log"
+          filePattern="${FILE_PATH}/metrics-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <RollingFile name="SlowLog" fileName="${FILE_PATH}/slow.log"
+          filePattern="${FILE_PATH}/slow-%d{yyyy-MM-dd}_%i.log.gz">
+            <PatternLayout pattern="%d [%t] %m%n"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="20MB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="scb-access" level="INFO" additivity="false">
+            <AppenderRef ref="AccessLog"/>
+        </Logger>
+        <Logger name="scb-metrics" level="INFO" additivity="false">
+            <AppenderRef ref="MetricsLog"/>
+        </Logger>
+        <Logger name="scb-slow" level="INFO" additivity="false">
+            <AppenderRef ref="SlowLog"/>
+        </Logger>
+
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/java-chassis-perfermance/src/main/resources/logback.xml b/java-chassis-benchmark/common/pom.xml
similarity index 62%
rename from java-chassis-perfermance/src/main/resources/logback.xml
rename to java-chassis-benchmark/common/pom.xml
index 5264742..8dd1ada 100644
--- a/java-chassis-perfermance/src/main/resources/logback.xml
+++ b/java-chassis-benchmark/common/pom.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,14 +15,17 @@
   ~ limitations under the License.
   -->
 
-<configuration scan="true">
-  <jmxConfigurator/>
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    <encoder>
-      <pattern>%d[%level][%thread][%marker] - %msg (%F:%L\)%n</pattern>
-    </encoder>
-  </appender>
-  <root level="INFO">
-    <appender-ref ref="STDOUT"/>
-  </root>
-</configuration>
\ No newline at end of file
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>benchmark-parent</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>benchmark-common</artifactId>
+  <packaging>jar</packaging>
+
+</project>
diff --git a/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/ChildDataModel.java b/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/ChildDataModel.java
new file mode 100644
index 0000000..672c6a1
--- /dev/null
+++ b/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/ChildDataModel.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.samples;
+
+public class ChildDataModel {
+  private int numInt;
+
+  private long numLong;
+
+  private double numDouble;
+
+  private float numFloat;
+
+  private String data;
+
+  public int getNumInt() {
+    return numInt;
+  }
+
+  public void setNumInt(int numInt) {
+    this.numInt = numInt;
+  }
+
+  public long getNumLong() {
+    return numLong;
+  }
+
+  public void setNumLong(long numLong) {
+    this.numLong = numLong;
+  }
+
+  public double getNumDouble() {
+    return numDouble;
+  }
+
+  public void setNumDouble(double numDouble) {
+    this.numDouble = numDouble;
+  }
+
+  public float getNumFloat() {
+    return numFloat;
+  }
+
+  public void setNumFloat(float numFloat) {
+    this.numFloat = numFloat;
+  }
+
+  public String getData() {
+    return data;
+  }
+
+  public void setData(String data) {
+    this.data = data;
+  }
+}
diff --git a/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/DataModel.java b/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/DataModel.java
new file mode 100644
index 0000000..e0b1058
--- /dev/null
+++ b/java-chassis-benchmark/common/src/main/java/org/apache/servicecomb/samples/DataModel.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.samples;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DataModel {
+  private Map<String, ChildDataModel> data;
+
+  public Map<String, ChildDataModel> getData() {
+    return data;
+  }
+
+  public void setData(Map<String, ChildDataModel> data) {
+    this.data = data;
+  }
+
+  public static DataModel create(String key, int size) {
+    DataModel dataModel = new DataModel();
+    Map<String, ChildDataModel> data = new HashMap<String, ChildDataModel>(size);
+
+    for (int i = 0; i < size; i++) {
+      ChildDataModel childDataModel = new ChildDataModel();
+      childDataModel.setData("Have a nice day");
+      childDataModel.setNumDouble(3892382939.3333893D);
+      childDataModel.setNumFloat(87939873297.334F);
+      childDataModel.setNumInt(89273847);
+      childDataModel.setNumLong(983798787837438L);
+      data.put(key + i, childDataModel);
+    }
+
+    dataModel.setData(data);
+    return dataModel;
+  }
+}
diff --git a/java-chassis-benchmark/pom.xml b/java-chassis-benchmark/pom.xml
new file mode 100644
index 0000000..1ae9505
--- /dev/null
+++ b/java-chassis-benchmark/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.servicecomb.benchmark</groupId>
+  <artifactId>benchmark-parent</artifactId>
+  <version>3.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
+  </properties>
+
+  <modules>
+    <module>common</module>
+    <module>basic-3.0.x</module>
+    <module>test-tool</module>
+  </modules>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>${maven-compiler-plugin.version}</version>
+          <configuration>
+            <compilerArgument>-parameters</compilerArgument>
+            <source>17</source>
+            <target>17</target>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/java-chassis-benchmark/test-tool/pom.xml b/java-chassis-benchmark/test-tool/pom.xml
new file mode 100644
index 0000000..030e748
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/pom.xml
@@ -0,0 +1,110 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicecomb.benchmark</groupId>
+    <artifactId>benchmark-parent</artifactId>
+    <version>3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>test-tool</artifactId>
+  <packaging>jar</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <servicecomb.version>3.0.0-SNAPSHOT</servicecomb.version>
+    <spring-boot-maven-plugin.version>3.1.3</spring-boot-maven-plugin.version>
+    <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.servicecomb</groupId>
+        <artifactId>java-chassis-dependencies</artifactId>
+        <version>${servicecomb.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb.benchmark</groupId>
+      <artifactId>benchmark-common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>solution-basic</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>registry-local</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>${maven-compiler-plugin.version}</version>
+          <configuration>
+            <compilerArgument>-parameters</compilerArgument>
+            <source>17</source>
+            <target>17</target>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-maven-plugin</artifactId>
+          <version>${spring-boot-maven-plugin.version}</version>
+          <executions>
+            <execution>
+              <goals>
+                <goal>repackage</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
\ No newline at end of file
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/ProviderService.java
similarity index 74%
copy from java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java
copy to java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/ProviderService.java
index c671fda..00d560e 100644
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Intf.java
+++ b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/ProviderService.java
@@ -15,12 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.demo.perf;
+package org.apache.servicecomb.samples;
 
-import java.util.concurrent.CompletableFuture;
-
-public interface Intf {
-  String syncQuery(String id, int step, int all, boolean fromDB);
-
-  CompletableFuture<String> asyncQuery(String id, int step, int all, boolean fromDB);
+public interface ProviderService {
+  DataModel sayHello(int wait, DataModel dataModel);
 }
diff --git a/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestCaseService.java b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestCaseService.java
new file mode 100644
index 0000000..b44cee3
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestCaseService.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.samples;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.servicecomb.provider.pojo.RpcReference;
+import org.springframework.stereotype.Component;
+
+import io.micrometer.core.instrument.DistributionSummary;
+import io.micrometer.core.instrument.Meter;
+import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.distribution.CountAtBucket;
+import io.micrometer.core.instrument.distribution.HistogramSnapshot;
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+
+@Component
+public class TestCaseService {
+  @RpcReference(schemaId = "ProviderController", microserviceName = "gateway")
+  private ProviderService providerService;
+
+  private AtomicLong success = new AtomicLong(0);
+
+  private AtomicLong error = new AtomicLong(0);
+
+  private AtomicLong totalTime = new AtomicLong(0);
+
+  private static MeterRegistry registry = null;
+
+  private static DistributionSummary summary = null;
+
+  public TestCaseService() {
+    init();
+  }
+
+  protected void init() {
+    registerMetrics();
+  }
+
+  private void registerMetrics() {
+    if (registry != null) {
+      registry.close();
+    }
+    registry = new SimpleMeterRegistry();
+    summary = DistributionSummary
+        .builder("response.time")
+        .description("response.time")
+        .tags("response.time", "test") // optional
+        .distributionStatisticExpiry(Duration.ofMinutes(10))
+        .serviceLevelObjectives(10D, 20D, 50D, 100D, 200D, 500D, 1000D, 1000000D)
+        .register(registry);
+  }
+
+  public void run(int threadCount, int countPerThread, int wait, int dataSize) throws Exception {
+    System.out.println("Preparing run =======================================");
+    DataModel dataModel = DataModel.create("test-case", dataSize);
+
+    ExecutorService executor = Executors.newFixedThreadPool(threadCount, new ThreadFactory() {
+      AtomicLong count = new AtomicLong(0);
+
+      @Override
+      public Thread newThread(Runnable r) {
+        return new Thread(r, "test-thread" + count.getAndIncrement());
+      }
+    });
+    CountDownLatch initLatch = new CountDownLatch(threadCount);
+    for (int i = 0; i < threadCount; i++) {
+      executor.submit(() -> {
+        providerService.sayHello(wait, dataModel);
+        initLatch.countDown();
+      });
+    }
+    initLatch.await();
+
+    success.set(0);
+    error.set(0);
+    totalTime.set(0);
+    registerMetrics();
+
+    // run
+    System.out.println("Starting run =======================================");
+
+    CountDownLatch latch = new CountDownLatch(threadCount * countPerThread);
+    long begin = System.currentTimeMillis();
+    for (int i = 0; i < threadCount; i++) {
+      executor.submit(() -> {
+        for (int j = 0; j < countPerThread; j++) {
+          long b = System.currentTimeMillis();
+          try {
+            DataModel result = providerService.sayHello(wait, dataModel);
+            if (result.getData().size() != dataSize) {
+              error.incrementAndGet();
+            } else {
+              success.incrementAndGet();
+            }
+          } catch (Exception e) {
+            error.incrementAndGet();
+          }
+
+          totalTime.addAndGet(System.currentTimeMillis() - b);
+          summary.record(System.currentTimeMillis() - b);
+          latch.countDown();
+        }
+      });
+    }
+
+    latch.await();
+
+    System.out.println("Total time:" + (System.currentTimeMillis() - begin));
+    System.out.println("Success count:" + success.get());
+    System.out.println("Error count:" + error.get());
+    System.out.println("Success average Latency:" + totalTime.get() / (success.get() + error.get()));
+
+    List<Meter> meters = registry.getMeters();
+
+    for (Meter meter : meters) {
+      if ("response.time".equals(meter.getId().getName())) {
+        DistributionSummary distributionSummary = (DistributionSummary) meter;
+        HistogramSnapshot histogramSnapshot = distributionSummary.takeSnapshot();
+        CountAtBucket[] countAtBuckets = histogramSnapshot.histogramCounts();
+        System.out.println(histogramSnapshot);
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < countAtBuckets.length; i++) {
+          if (i == 0) {
+            sb.append("|(0, " + Double.valueOf(countAtBuckets[i].bucket()).intValue()
+                + ")" + Double.valueOf(countAtBuckets[i].count()).intValue());
+            continue;
+          }
+          sb.append("|(" + Double.valueOf(countAtBuckets[i - 1].bucket()).intValue() + "," +
+              Double.valueOf(countAtBuckets[i].bucket()).intValue() +
+              ")" + Double.valueOf(countAtBuckets[i].count() - countAtBuckets[i - 1].count()).intValue() + "|");
+        }
+        System.out.println(sb);
+      }
+    }
+
+    executor.shutdownNow();
+  }
+}
diff --git a/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestToolApplication.java b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestToolApplication.java
new file mode 100644
index 0000000..df85396
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/java/org/apache/servicecomb/samples/TestToolApplication.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.samples;
+
+import org.apache.servicecomb.foundation.common.utils.BeanUtils;
+import org.springframework.boot.WebApplicationType;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+
+@SpringBootApplication
+public class TestToolApplication {
+  public static void main(String[] args) throws Exception {
+    try {
+      new SpringApplicationBuilder()
+          .web(WebApplicationType.NONE)
+          .sources(TestToolApplication.class)
+          .run(args);
+
+      runTests();
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  private static void runTests() throws Exception {
+    TestCaseService testCaseService = BeanUtils.getBean(TestCaseService.class);
+    testCaseService.run(10, 1000, 0, 1);
+  }
+}
diff --git a/java-chassis-benchmark/test-tool/src/main/resources/application.yml b/java-chassis-benchmark/test-tool/src/main/resources/application.yml
new file mode 100644
index 0000000..6a7a115
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/resources/application.yml
@@ -0,0 +1,25 @@
+#
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+servicecomb:
+  service:
+    application: basic-application
+    name: consumer
+    version: 0.0.1
+
+  rest:
+    address: 0.0.0.0:19092
diff --git a/java-chassis-benchmark/test-tool/src/main/resources/log4j2.xml b/java-chassis-benchmark/test-tool/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..e14d65e
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/resources/log4j2.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<Configuration>
+  <Properties>
+    <property name="FILE_PATH" value="./logs/test-tool"/>
+  </Properties>
+
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d [%p][%t][%c:%L] %m%n"/>
+    </Console>
+
+    <RollingFile name="AccessLog" fileName="${FILE_PATH}/access.log"
+      filePattern="${FILE_PATH}/access-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+
+    <RollingFile name="MetricsLog" fileName="${FILE_PATH}/metrics.log"
+      filePattern="${FILE_PATH}/metrics-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+
+    <RollingFile name="SlowLog" fileName="${FILE_PATH}/slow.log"
+      filePattern="${FILE_PATH}/slow-%d{yyyy-MM-dd}_%i.log.gz">
+      <PatternLayout pattern="%d [%t] %m%n"/>
+      <Policies>
+        <SizeBasedTriggeringPolicy size="20MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="100"/>
+    </RollingFile>
+  </Appenders>
+
+  <Loggers>
+    <Logger name="scb-access" level="INFO" additivity="false">
+      <AppenderRef ref="AccessLog"/>
+    </Logger>
+    <Logger name="scb-metrics" level="INFO" additivity="false">
+      <AppenderRef ref="MetricsLog"/>
+    </Logger>
+    <Logger name="scb-slow" level="INFO" additivity="false">
+      <AppenderRef ref="SlowLog"/>
+    </Logger>
+
+    <Root level="INFO">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/java-chassis-benchmark/test-tool/src/main/resources/microservices/gateway/ProviderController.yaml b/java-chassis-benchmark/test-tool/src/main/resources/microservices/gateway/ProviderController.yaml
new file mode 100644
index 0000000..446d232
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/resources/microservices/gateway/ProviderController.yaml
@@ -0,0 +1,88 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+openapi: 3.0.1
+info:
+  title: swagger definition for org.apache.servicecomb.samples.ProviderController
+  version: 1.0.0
+servers:
+- url: /
+paths:
+  /benchmark:
+    post:
+      operationId: sayHello
+      parameters:
+      - name: wait
+        in: header
+        required: true
+        schema:
+          type: integer
+          format: int32
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataModel'
+          application/protobuf:
+            schema:
+              $ref: '#/components/schemas/DataModel'
+          text/plain:
+            schema:
+              $ref: '#/components/schemas/DataModel'
+        required: true
+        x-name: dataModel
+      responses:
+        "200":
+          description: response of 200
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataModel'
+            application/protobuf:
+              schema:
+                $ref: '#/components/schemas/DataModel'
+            text/plain:
+              schema:
+                $ref: '#/components/schemas/DataModel'
+components:
+  schemas:
+    ChildDataModel:
+      type: object
+      properties:
+        numInt:
+          type: integer
+          format: int32
+        numLong:
+          type: integer
+          format: int64
+        numDouble:
+          type: number
+          format: double
+        numFloat:
+          type: number
+          format: float
+        data:
+          type: string
+      x-java-class: org.apache.servicecomb.samples.ChildDataModel
+    DataModel:
+      type: object
+      properties:
+        data:
+          type: object
+          additionalProperties:
+            $ref: '#/components/schemas/ChildDataModel'
+      x-java-class: org.apache.servicecomb.samples.DataModel
diff --git a/java-chassis-benchmark/test-tool/src/main/resources/registry.yaml b/java-chassis-benchmark/test-tool/src/main/resources/registry.yaml
new file mode 100644
index 0000000..0fce4dc
--- /dev/null
+++ b/java-chassis-benchmark/test-tool/src/main/resources/registry.yaml
@@ -0,0 +1,26 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+gateway:
+  - id: "001"
+    version: "1.0"
+    appid: basic-application
+    schemaIds:
+      - ProviderController
+    instances:
+      - endpoints:
+          - rest://localhost:9090
diff --git a/java-chassis-perfermance/README.md b/java-chassis-perfermance/README.md
deleted file mode 100644
index 7c6a5a9..0000000
--- a/java-chassis-perfermance/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-## Precondition
-see [Precondition](../README.md)  
-
-suppose jar named perf.jar  
-1.copy perf.jar to different directory
-
-2.create microservice.yaml in each directory
-# change microserviceName to be perf1/perf2/perf3, and so on
-service_description:
-  name: perf1
-cse:
-  references:
-    # use which transport to invoke
-    transport: rest
-    
-# sync mode consumer count
-sync-count: 10
-# async mode consumer count
-async-count: 20
-# use sync mode or not
-# sync: /v1/syncQuery/{id}?step={step}&all={all}&fromDB={fromDB}
-# async:/v1/asyncQuery/{id}?step={step}&all={all}&fromDB={fromDB}
-sync: false
-# producer microserviceName
-producer: perf1
-id: 1
-# every producer determine:
-#   1)if step equals all, then this is final step, direct return or query from db
-#   2)otherwise inc step and invoke next microservice
-#   3)if self name if perf1, then next microservice is perf2
-step: 1
-all: 1
-fromDB: false
-response-size: 1
-
-# redis parameter
-redis:
-  client:
-    count: 8
-  host:
-  port:
-  password: 
-  
-3.start producers
-java -jar perf.jar
-
-4.start consumer
-java -jar perf.jar -c
-
diff --git a/java-chassis-perfermance/pom.xml b/java-chassis-perfermance/pom.xml
deleted file mode 100644
index bf2a136..0000000
--- a/java-chassis-perfermance/pom.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.servicecomb.samples.performance</groupId>
-  <artifactId>performance-application</artifactId>
-  <version>2.0-SNAPSHOT</version>
-  <packaging>jar</packaging>
-
-  <name>Java Chassis::Demo::Perf</name>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <servicecomb.version>2.6.0</servicecomb.version>
-    <demo.main>org.apache.servicecomb.demo.perf.PerfMain</demo.main>
-    <vertx.version>3.8.3</vertx.version>
-  </properties>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.mybatis</groupId>
-        <artifactId>mybatis</artifactId>
-        <version>3.4.5</version>
-      </dependency>
-      <dependency>
-        <groupId>org.mybatis</groupId>
-        <artifactId>mybatis-spring</artifactId>
-        <version>1.3.0</version>
-      </dependency>
-      <dependency>
-        <groupId>mysql</groupId>
-        <artifactId>mysql-connector-java</artifactId>
-        <version>5.1.46</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb</groupId>
-        <artifactId>java-chassis-dependencies</artifactId>
-        <version>${servicecomb.version}</version>
-        <type>pom</type>
-        <scope>import</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-  
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>registry-service-center</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>provider-pojo</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>provider-springmvc</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>transport-rest-vertx</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>transport-highway</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>inspector</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-redis-client</artifactId>
-      <version>${vertx.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>metrics-core</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.1</version>
-          <configuration>
-            <source>1.8</source>
-            <target>1.8</target>
-            <compilerArgument>-parameters</compilerArgument>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.springframework.boot</groupId>
-          <artifactId>spring-boot-maven-plugin</artifactId>
-          <version>2.1.6.RELEASE</version>
-          <executions>
-            <execution>
-              <goals>
-                <goal>repackage</goal>
-              </goals>
-              <configuration>
-                <mainClass>${main.class}</mainClass>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-</project>
\ No newline at end of file
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Code.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Code.java
deleted file mode 100644
index 92a93c2..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Code.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.demo.perf;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-
-// git log --author="wujimin" --pretty=tformat:%s --shortstat --since ==2017-9-1
-public class Code {
-  static File file = new File("d:/work/git/incubator-servicecomb-java-chassis/0218.txt");
-
-  public static void main(String[] args) throws IOException {
-    List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);
-
-    int totalAdd = 0;
-    int totalDel = 0;
-    List<String> output = new ArrayList<>();
-    System.out.println(lines.size());
-    for (int idx = 0; idx < lines.size(); ) {
-      String msg = lines.get(idx);
-
-      // skip a empty line
-      idx += 2;
-      // 2 files changed, 2 insertions(+), 2 deletions(-)
-      String line = lines.get(idx);
-      idx++;
-//      System.out.println(idx + ": " + msg);
-
-      int add = 0;
-      int delete = 0;
-      for (String part : line.split(",")) {
-        String key = " insertions(+)";
-        int matchIdx = part.indexOf(key);
-        if (matchIdx > 0) {
-          add = Integer.valueOf(part.substring(0, matchIdx).trim());
-          continue;
-        }
-
-        key = " deletions(-)";
-        matchIdx = part.indexOf(key);
-        if (matchIdx > 0) {
-          delete = Integer.valueOf(part.substring(0, matchIdx).trim());
-          continue;
-        }
-      }
-
-      totalAdd += add;
-      totalDel += delete;
-      output.add(String.format("%d | %d | %s", add, delete, msg));
-    }
-
-    output.add(String.format("summary, add: %d, del: %s", totalAdd, totalDel));
-    System.out.println(String.join("\n", output));
-  }
-}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Impl.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Impl.java
deleted file mode 100644
index e2505ed..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/Impl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.demo.perf;
-
-import java.util.concurrent.CompletableFuture;
-
-import org.apache.servicecomb.provider.pojo.Invoker;
-import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-@RestSchema(schemaId = "impl")
-@RequestMapping(path = "/v1")
-public class Impl {
-  private Intf intf;
-
-  @Value(value = "${service_description.name}")
-  public void setSelfMicroserviceName(String selfMicroserviceName) {
-    // self: perf-1/perf-a
-    // next: perf-2/perf-b
-    char last = selfMicroserviceName.charAt(selfMicroserviceName.length() - 1);
-    String nextMicroserviceName =
-        selfMicroserviceName.substring(0, selfMicroserviceName.length() - 1) + (char) (last + 1);
-    intf = Invoker.createProxy(nextMicroserviceName,
-        "impl",
-        Intf.class);
-  }
-
-  @GetMapping(path = "/syncQuery/{id}")
-  public String syncQuery(@PathVariable(name = "id") String id,
-      @RequestParam(name = "step") int step, @RequestParam(name = "all") int all,
-      @RequestParam(name = "fromDB") boolean fromDB) {
-    if (step == all) {
-      if (fromDB) {
-        return RedisClientUtils.syncQuery(id);
-      }
-
-      return buildFromMemoryResponse(id);
-    }
-
-    return intf.syncQuery(id, step + 1, all, fromDB);
-  }
-
-  public String buildFromMemoryResponse(String id) {
-    return PerfConfiguration.buildResponse("memory", id);
-  }
-
-  @GetMapping(path = "/asyncQuery/{id}")
-  public CompletableFuture<String> asyncQuery(@PathVariable(name = "id") String id,
-      @RequestParam(name = "step") int step, @RequestParam(name = "all") int all,
-      @RequestParam(name = "fromDB") boolean fromDB) {
-    if (step == all) {
-      if (fromDB) {
-        return RedisClientUtils.asyncQuery(id);
-      }
-
-      CompletableFuture<String> future = new CompletableFuture<>();
-      future.complete(buildFromMemoryResponse(id));
-      return future;
-    }
-
-    return intf.asyncQuery(id, step + 1, all, fromDB);
-  }
-}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConfiguration.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConfiguration.java
deleted file mode 100644
index 8d750b0..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConfiguration.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.demo.perf;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import com.google.common.base.Strings;
-
-@Component
-public class PerfConfiguration {
-  public static int syncCount;
-
-  public static int asyncCount;
-
-  public static boolean sync;
-
-  public static String producer;
-
-  public static String id;
-
-  public static int step;
-
-  public static int all;
-
-  public static boolean fromDB;
-
-  public static int responseSize;
-
-  public static String responseData;
-
-  public static int redisClientCount;
-
-  public static String redisHost;
-
-  public static int redisPort;
-
-  public static String redisPassword;
-
-  public static String buildResponse(String from, String id) {
-    return new StringBuilder(64 + PerfConfiguration.responseData.length())
-        .append(id)
-        .append(" from ")
-        .append(from)
-        .append(": ")
-        .append(PerfConfiguration.responseData)
-        .toString();
-  }
-
-  @Value(value = "${response-size}")
-  public void setResponseSize(int responseSize) {
-    PerfConfiguration.responseSize = responseSize;
-    PerfConfiguration.responseData = Strings.repeat("a", responseSize);
-  }
-
-  @Value(value = "${sync-count}")
-  public void setSyncCount(int syncCount) {
-    PerfConfiguration.syncCount = syncCount;
-  }
-
-  @Value(value = "${async-count}")
-  public void setAsyncCount(int asyncCount) {
-    PerfConfiguration.asyncCount = asyncCount;
-  }
-
-  @Value(value = "${sync}")
-  public void setSync(boolean sync) {
-    PerfConfiguration.sync = sync;
-  }
-
-  @Value(value = "${producer}")
-  public void setProducer(String producer) {
-    PerfConfiguration.producer = producer;
-  }
-
-  @Value(value = "${id}")
-  public void setId(String id) {
-    PerfConfiguration.id = id;
-  }
-
-  @Value(value = "${step}")
-  public void setStep(int step) {
-    PerfConfiguration.step = step;
-  }
-
-  @Value(value = "${all}")
-  public void setAll(int all) {
-    PerfConfiguration.all = all;
-  }
-
-  @Value(value = "${fromDB}")
-  public void setFromDB(boolean fromDB) {
-    PerfConfiguration.fromDB = fromDB;
-  }
-
-  @Value(value = "${redis.client.count}")
-  public void setRedisClientCount(int redisClientCount) {
-    PerfConfiguration.redisClientCount = redisClientCount;
-  }
-
-  @Value(value = "${redis.host}")
-  public void setRedisHost(String redisHost) {
-    PerfConfiguration.redisHost = redisHost;
-  }
-
-  @Value(value = "${redis.port}")
-  public void setRedisPort(int redisPort) {
-    PerfConfiguration.redisPort = redisPort;
-  }
-
-  @Value(value = "${redis.password:}")
-  public void setRedisPassword(String redisPassword) {
-    if (StringUtils.isEmpty(redisPassword)) {
-      return;
-    }
-    PerfConfiguration.redisPassword = redisPassword;
-  }
-}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConsumer.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConsumer.java
deleted file mode 100644
index a73b768..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/PerfConsumer.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.demo.perf;
-
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-
-import org.apache.servicecomb.provider.pojo.Invoker;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-@Component
-public class PerfConsumer {
-  private static final Logger LOGGER = LoggerFactory.getLogger(PerfConsumer.class);
-
-  private Intf intf;
-
-  public void runConsumer() throws InterruptedException, ExecutionException {
-    intf = Invoker.createProxy(
-        PerfConfiguration.producer,
-        "impl",
-        Intf.class);
-
-    if (PerfConfiguration.sync) {
-      runSyncConsumers();
-      return;
-    }
-
-    runAsyncConsumers();
-  }
-
-  private void runAsyncConsumers() throws InterruptedException, ExecutionException {
-    CompletableFuture<String> future = intf.asyncQuery(PerfConfiguration.id,
-        PerfConfiguration.step,
-        PerfConfiguration.all,
-        PerfConfiguration.fromDB);
-    LOGGER.info("runAsyncConsumer: {}", future.get());
-
-    for (int idx = 0; idx < PerfConfiguration.asyncCount; idx++) {
-      runAsyncConsumer();
-    }
-  }
-
-  private void runAsyncConsumer() {
-    CompletableFuture<String> future = intf.asyncQuery(PerfConfiguration.id,
-        PerfConfiguration.step,
-        PerfConfiguration.all,
-        PerfConfiguration.fromDB);
-    future.whenComplete((r, e) -> {
-      if (e == null) {
-        runAsyncConsumer();
-        return;
-      }
-
-      throw new IllegalStateException("invoke failed.", e);
-    });
-  }
-
-  private void runSyncConsumers() {
-    LOGGER.info("runSyncConsumer: {}",
-        intf.syncQuery(PerfConfiguration.id,
-            PerfConfiguration.step,
-            PerfConfiguration.all,
-            PerfConfiguration.fromDB));
-
-    Executor executor = Executors.newFixedThreadPool(PerfConfiguration.syncCount);
-    for (int idx = 0; idx < PerfConfiguration.syncCount; idx++) {
-      executor.execute(this::runSyncConsumer);
-    }
-  }
-
-  private void runSyncConsumer() {
-    try {
-      for (; ; ) {
-        intf.syncQuery(PerfConfiguration.id,
-            PerfConfiguration.step,
-            PerfConfiguration.all,
-            PerfConfiguration.fromDB);
-      }
-    } catch (Throwable e) {
-      throw new IllegalStateException("invoke failed.", e);
-    }
-  }
-}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
deleted file mode 100644
index 0ce693a..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.demo.perf;
-
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.apache.servicecomb.foundation.vertx.VertxUtils;
-import org.apache.servicecomb.foundation.vertx.client.ClientPoolFactory;
-import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager;
-import org.apache.servicecomb.foundation.vertx.client.ClientVerticle;
-import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
-
-import io.vertx.core.DeploymentOptions;
-import io.vertx.core.Vertx;
-import io.vertx.redis.RedisClient;
-import io.vertx.redis.RedisOptions;
-
-public class RedisClientUtils {
-  private static ClientPoolManager<RedisClient> clientMgr;
-
-  public static void init(Vertx vertx) throws InterruptedException {
-    RedisOptions redisOptions = new RedisOptions()
-        .setHost(PerfConfiguration.redisHost)
-        .setPort(PerfConfiguration.redisPort)
-        .setAuth(PerfConfiguration.redisPassword);
-    ClientPoolFactory<RedisClient> factory = (ctx) -> {
-      return RedisClient.create(vertx, redisOptions);
-    };
-    clientMgr = new ClientPoolManager<>(vertx, factory);
-
-    DeploymentOptions deployOptions = VertxUtils.createClientDeployOptions(clientMgr,
-        PerfConfiguration.redisClientCount);
-    VertxUtils.blockDeploy(vertx, ClientVerticle.class, deployOptions);
-  }
-
-  public static String syncQuery(String id) {
-    CompletableFuture<String> future = doQuery(id, true);
-    try {
-      return future.get();
-    } catch (InterruptedException | ExecutionException e) {
-      throw new InvocationException(Status.INTERNAL_SERVER_ERROR.getStatusCode(),
-          Status.INTERNAL_SERVER_ERROR.getReasonPhrase(), (Object) "Failed to query from redis.", e);
-    }
-  }
-
-  public static CompletableFuture<String> asyncQuery(String id) {
-    return doQuery(id, false);
-  }
-
-  private static CompletableFuture<String> doQuery(String id, boolean sync) {
-    CompletableFuture<String> future = new CompletableFuture<>();
-    RedisClient redisClient = clientMgr.findClientPool(sync);
-    RedisSession session = new RedisSession(redisClient, id, future);
-    session.query();
-    return future;
-  }
-}
diff --git a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisSession.java b/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisSession.java
deleted file mode 100644
index f9d657f..0000000
--- a/java-chassis-perfermance/src/main/java/org/apache/servicecomb/demo/perf/RedisSession.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.demo.perf;
-
-import java.util.concurrent.CompletableFuture;
-
-import io.vertx.core.AsyncResult;
-import io.vertx.redis.RedisClient;
-
-public class RedisSession {
-  RedisClient redis;
-
-  String id;
-
-  CompletableFuture<String> future;
-
-  String createResult;
-
-  public RedisSession(RedisClient redis, String id, CompletableFuture<String> future) {
-    this.redis = redis;
-    this.id = id;
-    this.future = future;
-  }
-
-  public void query() {
-    redis.get(id, this::onGetResponse);
-  }
-
-  private void onGetResponse(AsyncResult<String> ar) {
-    if (ar.succeeded()) {
-      if (ar.result() == null) {
-        createCache();
-        return;
-      }
-
-      future.complete(ar.result());
-      return;
-    }
-
-    future.completeExceptionally(ar.cause());
-  }
-
-  private void createCache() {
-    createResult = PerfConfiguration.buildResponse("redis", id);
-    redis.set(id, createResult, this::onCreateCacheResponse);
-  }
-
-  private void onCreateCacheResponse(AsyncResult<Void> ar) {
-    if (ar.succeeded()) {
-      future.complete(createResult);
-      return;
-    }
-
-    future.completeExceptionally(ar.cause());
-  }
-}
diff --git a/java-chassis-perfermance/src/main/resources/microservice.yaml b/java-chassis-perfermance/src/main/resources/microservice.yaml
deleted file mode 100644
index 4a26c08..0000000
--- a/java-chassis-perfermance/src/main/resources/microservice.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
-## ---------------------------------------------------------------------------
-## Licensed to the Apache Software Foundation (ASF) under one or more
-## contributor license agreements.  See the NOTICE file distributed with
-## this work for additional information regarding copyright ownership.
-## The ASF licenses this file to You under the Apache License, Version 2.0
-## (the "License"); you may not use this file except in compliance with
-## the License.  You may obtain a copy of the License at
-##
-##      http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-## ---------------------------------------------------------------------------
-
-APPLICATION_ID: perfTest
-service_description:
-  name: perf1
-  version: 0.0.1
-servicecomb:
-  service:
-    registry:
-      address: http://127.0.0.1:30100
-  rest:
-    address: 0.0.0.0:8080?sslEnabled=false
-    server:
-      verticle-count: 8
-    client:
-      verticle-count: 8
-      connection:
-        maxPoolSize: 30
-  highway:
-    address: 0.0.0.0:7070?sslEnabled=false
-    server:
-      verticle-count: 8
-    client:
-      verticle-count: 8
-  executor:
-    default:
-      group: 4
-      maxThreads-per-group: 4
-  references:
-    transport: highway
-    transport: rest
-  metrics:
-    endpoint:
-      enabled: false
-    window_time: 1000
-    invocation.latencyDistribution: 0,1,3,10,100
-    Consumer.invocation.slow:
-      enabled: true
-      msTime: 40
-    Provider.invocation.slow:
-      enabled: true
-      msTime: 1
-    publisher.defaultLog:
-      enabled: true
-      endpoints.client.detail.enabled: true
-      invocation.latencyDistribution:
-        minScopeLength: 9
-
-sync-count: 10
-async-count: 10
-sync: false
-producer: perf1
-id: 1
-step: 1
-all: 1
-fromDB: false
-response-size: 1
-
-redis:
-  client:
-    count: 8
-  host: localhost
-  port: 6379
-#  password: