You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by co...@apache.org on 2020/04/17 00:47:31 UTC

[dubbo-benchmark] 05/16: add fst support, simplify project structure

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

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

commit 1f21438105c964d15b5d202c1b405807539f154c
Author: beiwei30 <ia...@gmail.com>
AuthorDate: Thu May 24 16:04:36 2018 +0800

    add fst support, simplify project structure
---
 .gitignore                                         |  4 +
 benchmark.sh                                       |  4 +-
 client-base/pom.xml                                | 51 ++++++++++++
 .../src/main/java/org/apache/dubbo/Client.java     | 15 ++++
 .../java/org/apache/dubbo/benchmark/Client.java    |  2 +-
 .../src/main/resources/benchmark.properties        |  0
 .../src/main/resources/logback.xml                 |  8 +-
 .../pom.xml                                        | 37 ++-------
 .../src/main/resources/consumer.xml                |  8 +-
 .../src/main/resources/logback.xml                 | 10 +--
 .../pom.xml                                        | 37 ++-------
 .../src/main/resources/provider.xml                | 14 ++--
 dubbo-hessianlite-client/pom.xml                   | 33 +-------
 .../java/org/apache/dubbo/benchmark/Client.java    | 95 ----------------------
 .../src/main/resources/benchmark.properties        |  2 -
 dubbo-hessianlite-server/pom.xml                   | 50 +-----------
 .../java/org/apache/dubbo/benchmark/Server.java    | 14 ----
 .../src/main/resources/benchmark.properties        |  2 -
 dubbo-kryo-client/pom.xml                          | 30 +------
 dubbo-kryo-client/src/main/resources/consumer.xml  |  2 +-
 dubbo-kryo-server/pom.xml                          | 56 +------------
 pom.xml                                            | 49 +++++++++++
 server-base/pom.xml                                | 41 ++++++++++
 .../java/org/apache/dubbo/benchmark/Server.java    |  0
 .../src/main/resources/benchmark.properties        |  0
 .../src/main/resources/logback.xml                 |  4 +-
 26 files changed, 205 insertions(+), 363 deletions(-)

diff --git a/.gitignore b/.gitignore
index 2d74208..82665a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ target/
 
 # Log file
 *.log
+logs/
 
 # BlueJ files
 *.ctxt
@@ -29,3 +30,6 @@ hs_err_pid*
 
 # preflight record result
 *.jfr
+
+# jmh output
+*.json
diff --git a/benchmark.sh b/benchmark.sh
index 90c9fe4..0a015fe 100755
--- a/benchmark.sh
+++ b/benchmark.sh
@@ -5,7 +5,7 @@ usage() {
 }
 
 build() {
-    mvn -Dserver.host=${SERVER} -Dserver.port=${PORT} --projects benchmark-base,${PROJECT_DIR} clean package
+    mvn --projects benchmark-base,client-base,server-base,${PROJECT_DIR} clean package
 }
 
 java_options() {
@@ -24,7 +24,7 @@ run() {
         JAR=`find ${PROJECT_DIR}/target/*.jar | head -n 1`
         echo
         echo "RUN ${PROJECT_DIR} IN ${MODE:-benchmark} MODE"
-        CMD="java ${JAVA_OPTIONS} -jar ${JAR}"
+        CMD="java ${JAVA_OPTIONS} -Dserver.host=${SERVER} -Dserver.port=${PORT} -jar ${JAR}"
         echo "command is: ${CMD}"
         echo
         ${CMD}
diff --git a/client-base/pom.xml b/client-base/pom.xml
new file mode 100644
index 0000000..3f279f1
--- /dev/null
+++ b/client-base/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>client-base</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>benchmark-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>dubbo</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-generator-annprocess</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/client-base/src/main/java/org/apache/dubbo/Client.java b/client-base/src/main/java/org/apache/dubbo/Client.java
new file mode 100644
index 0000000..c2f81f7
--- /dev/null
+++ b/client-base/src/main/java/org/apache/dubbo/Client.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo;
+
+import org.apache.dubbo.benchmark.bean.User;
+import org.apache.dubbo.benchmark.service.UserService;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class Client {
+    public static void main(String[] args) {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
+        context.start();
+        UserService userService = (UserService) context.getBean("userService");
+        User user = userService.getUser(1);
+        System.out.println("user: " + user);
+    }
+}
diff --git a/dubbo-kryo-client/src/main/java/org/apache/dubbo/benchmark/Client.java b/client-base/src/main/java/org/apache/dubbo/benchmark/Client.java
similarity index 98%
rename from dubbo-kryo-client/src/main/java/org/apache/dubbo/benchmark/Client.java
rename to client-base/src/main/java/org/apache/dubbo/benchmark/Client.java
index 08fe221..e6f9051 100644
--- a/dubbo-kryo-client/src/main/java/org/apache/dubbo/benchmark/Client.java
+++ b/client-base/src/main/java/org/apache/dubbo/benchmark/Client.java
@@ -86,7 +86,7 @@ public class Client extends AbstractClient {
                 .measurementIterations(3)
                 .measurementTime(TimeValue.seconds(10))
                 .threads(CONCURRENCY)
-                .resultFormat(ResultFormatType.JSON)
+//                .resultFormat(ResultFormatType.JSON)
                 .forks(1)
                 .build();
 
diff --git a/dubbo-kryo-server/src/main/resources/benchmark.properties b/client-base/src/main/resources/benchmark.properties
similarity index 100%
rename from dubbo-kryo-server/src/main/resources/benchmark.properties
rename to client-base/src/main/resources/benchmark.properties
diff --git a/dubbo-hessianlite-server/src/main/resources/logback.xml b/client-base/src/main/resources/logback.xml
similarity index 76%
rename from dubbo-hessianlite-server/src/main/resources/logback.xml
rename to client-base/src/main/resources/logback.xml
index 033bde0..202a8f4 100644
--- a/dubbo-hessianlite-server/src/main/resources/logback.xml
+++ b/client-base/src/main/resources/logback.xml
@@ -10,17 +10,17 @@
     </appender>
 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>logs/dubbo-hessianlite-server.log</file>
+        <file>logs/client-benchmark.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>logs/dubbo-hessianlite-server.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
+            <fileNamePattern>logs/client-benchmark.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
         </rollingPolicy>
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>
         </encoder>
     </appender>
 
     <root level="INFO">
-        <appender-ref ref="CONSOLE"/>
+         <appender-ref ref="CONSOLE" />
         <appender-ref ref="FILE"/>
     </root>
 </configuration>
diff --git a/dubbo-hessianlite-client/pom.xml b/dubbo-fst-client/pom.xml
similarity index 53%
copy from dubbo-hessianlite-client/pom.xml
copy to dubbo-fst-client/pom.xml
index fd24a64..d00e9a8 100644
--- a/dubbo-hessianlite-client/pom.xml
+++ b/dubbo-fst-client/pom.xml
@@ -9,23 +9,17 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-hessianlite-client</artifactId>
-
+    <artifactId>dubbo-fst-client</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>client-base</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
+            <groupId>de.ruedigermoeller</groupId>
+            <artifactId>fst</artifactId>
         </dependency>
     </dependencies>
 
@@ -34,32 +28,16 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
+                <inherited>true</inherited>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
+                <inherited>true</inherited>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
                             <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
                         </manifest>
                     </archive>
@@ -67,7 +45,4 @@
             </plugin>
         </plugins>
     </build>
-
-
-
 </project>
\ No newline at end of file
diff --git a/dubbo-kryo-client/src/main/resources/consumer.xml b/dubbo-fst-client/src/main/resources/consumer.xml
similarity index 63%
copy from dubbo-kryo-client/src/main/resources/consumer.xml
copy to dubbo-fst-client/src/main/resources/consumer.xml
index e87fbda..59fd942 100644
--- a/dubbo-kryo-client/src/main/resources/consumer.xml
+++ b/dubbo-fst-client/src/main/resources/consumer.xml
@@ -4,9 +4,13 @@
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
-    <dubbo:application name="dubbo-kyro-client"/>
+    <dubbo:application name="dubbo-fst-client"/>
+    <!-- FIXME: need to investigate why serialization optimizer doesn't work -->
+    <!--<dubbo:reference id="userService" check="false"-->
+                     <!--interface="org.apache.dubbo.benchmark.service.UserService"-->
+                     <!--url="dubbo://${server.host}:${server.port}?optimizer=org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl&amp;serialization=fst"/>-->
     <dubbo:reference id="userService" check="false"
                      interface="org.apache.dubbo.benchmark.service.UserService"
-                     url="dubbo://localhost:8080?optimizer=org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl&amp;serialization=kryo"/>
+                     url="dubbo://${server.host}:${server.port}?serialization=fst"/>
     <dubbo:consumer client="netty4" filter="-default"/>
 </beans>
\ No newline at end of file
diff --git a/dubbo-kryo-server/src/main/resources/logback.xml b/dubbo-fst-client/src/main/resources/logback.xml
similarity index 74%
copy from dubbo-kryo-server/src/main/resources/logback.xml
copy to dubbo-fst-client/src/main/resources/logback.xml
index 6b20820..a9b8f56 100644
--- a/dubbo-kryo-server/src/main/resources/logback.xml
+++ b/dubbo-fst-client/src/main/resources/logback.xml
@@ -10,17 +10,17 @@
     </appender>
 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>logs/dubbo-kryo-server.log</file>
+        <file>logs/dubbo-fst-client.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>logs/dubbo-kryo-server.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
+            <fileNamePattern>logs/dubbo-fst-client.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
         </rollingPolicy>
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>
         </encoder>
     </appender>
 
-    <root level="INFO">
-        <appender-ref ref="CONSOLE"/>
+    <root level="DEBUG">
+         <appender-ref ref="CONSOLE" />
         <appender-ref ref="FILE"/>
     </root>
 </configuration>
diff --git a/dubbo-hessianlite-client/pom.xml b/dubbo-fst-server/pom.xml
similarity index 52%
copy from dubbo-hessianlite-client/pom.xml
copy to dubbo-fst-server/pom.xml
index fd24a64..ee45cfa 100644
--- a/dubbo-hessianlite-client/pom.xml
+++ b/dubbo-fst-server/pom.xml
@@ -9,23 +9,17 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-hessianlite-client</artifactId>
-
+    <artifactId>dubbo-fst-server</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>server-base</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
+            <groupId>de.ruedigermoeller</groupId>
+            <artifactId>fst</artifactId>
         </dependency>
     </dependencies>
 
@@ -34,40 +28,19 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
-                            <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
+                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
                         </manifest>
                     </archive>
                 </configuration>
             </plugin>
         </plugins>
     </build>
-
-
-
 </project>
\ No newline at end of file
diff --git a/dubbo-kryo-client/src/main/resources/consumer.xml b/dubbo-fst-server/src/main/resources/provider.xml
similarity index 50%
copy from dubbo-kryo-client/src/main/resources/consumer.xml
copy to dubbo-fst-server/src/main/resources/provider.xml
index e87fbda..df2df05 100644
--- a/dubbo-kryo-client/src/main/resources/consumer.xml
+++ b/dubbo-fst-server/src/main/resources/provider.xml
@@ -4,9 +4,13 @@
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
-    <dubbo:application name="dubbo-kyro-client"/>
-    <dubbo:reference id="userService" check="false"
-                     interface="org.apache.dubbo.benchmark.service.UserService"
-                     url="dubbo://localhost:8080?optimizer=org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl&amp;serialization=kryo"/>
-    <dubbo:consumer client="netty4" filter="-default"/>
+    <dubbo:application name="dubbo-fst-server"/>
+
+    <!-- FIXME: need to investigate why serialization optimizer doesn't work -->
+    <!--<dubbo:protocol name="dubbo" host="${server.host}" server="netty4" port="${server.port}" serialization="fst"-->
+                    <!--optimizer="org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl"/>-->
+    <dubbo:protocol name="dubbo" host="${server.host}" server="netty4" port="${server.port}" serialization="fst"/>
+    <dubbo:registry address="N/A"/>
+    <dubbo:service interface="org.apache.dubbo.benchmark.service.UserService" ref="userService" filter="-default"/>
+    <bean id="userService" class="org.apache.dubbo.benchmark.service.UserServiceServerImpl"/>
 </beans>
\ No newline at end of file
diff --git a/dubbo-hessianlite-client/pom.xml b/dubbo-hessianlite-client/pom.xml
index fd24a64..03f40ee 100644
--- a/dubbo-hessianlite-client/pom.xml
+++ b/dubbo-hessianlite-client/pom.xml
@@ -14,19 +14,9 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>client-base</artifactId>
             <version>${project.version}</version>
         </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
@@ -34,32 +24,14 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
                             <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
                         </manifest>
                     </archive>
@@ -67,7 +39,4 @@
             </plugin>
         </plugins>
     </build>
-
-
-
 </project>
\ No newline at end of file
diff --git a/dubbo-hessianlite-client/src/main/java/org/apache/dubbo/benchmark/Client.java b/dubbo-hessianlite-client/src/main/java/org/apache/dubbo/benchmark/Client.java
deleted file mode 100644
index 08fe221..0000000
--- a/dubbo-hessianlite-client/src/main/java/org/apache/dubbo/benchmark/Client.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.dubbo.benchmark;
-
-import com.alibaba.dubbo.config.ProtocolConfig;
-import org.apache.dubbo.benchmark.bean.Page;
-import org.apache.dubbo.benchmark.bean.User;
-import org.apache.dubbo.benchmark.rpc.AbstractClient;
-import org.apache.dubbo.benchmark.service.UserService;
-import org.openjdk.jmh.annotations.Benchmark;
-import org.openjdk.jmh.annotations.BenchmarkMode;
-import org.openjdk.jmh.annotations.Mode;
-import org.openjdk.jmh.annotations.OutputTimeUnit;
-import org.openjdk.jmh.annotations.Scope;
-import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
-import org.openjdk.jmh.results.format.ResultFormatType;
-import org.openjdk.jmh.runner.Runner;
-import org.openjdk.jmh.runner.options.Options;
-import org.openjdk.jmh.runner.options.OptionsBuilder;
-import org.openjdk.jmh.runner.options.TimeValue;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-
-@State(Scope.Benchmark)
-public class Client extends AbstractClient {
-    private static final int CONCURRENCY = 32;
-
-    private final ClassPathXmlApplicationContext context;
-    private final UserService userService;
-
-    public Client() {
-        context = new ClassPathXmlApplicationContext("consumer.xml");
-        context.start();
-        userService = (UserService) context.getBean("userService");
-    }
-
-    @Override
-    protected UserService getUserService() {
-        return userService;
-    }
-
-    @TearDown
-    public void close() throws IOException {
-        context.close();
-        ProtocolConfig.destroyAll();
-    }
-
-    @Benchmark
-    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
-    @OutputTimeUnit(TimeUnit.MILLISECONDS)
-    @Override
-    public boolean existUser() throws Exception {
-        return super.existUser();
-    }
-
-    @Benchmark
-    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
-    @OutputTimeUnit(TimeUnit.MILLISECONDS)
-    @Override
-    public boolean createUser() throws Exception {
-        return super.createUser();
-    }
-
-    @Benchmark
-    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
-    @OutputTimeUnit(TimeUnit.MILLISECONDS)
-    @Override
-    public User getUser() throws Exception {
-        return super.getUser();
-    }
-
-    @Benchmark
-    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
-    @OutputTimeUnit(TimeUnit.MILLISECONDS)
-    @Override
-    public Page<User> listUser() throws Exception {
-        return super.listUser();
-    }
-
-    public static void main(String[] args) throws Exception {
-        Options opt = new OptionsBuilder()
-                .include(Client.class.getSimpleName())
-                .warmupIterations(3)
-                .warmupTime(TimeValue.seconds(10))
-                .measurementIterations(3)
-                .measurementTime(TimeValue.seconds(10))
-                .threads(CONCURRENCY)
-                .resultFormat(ResultFormatType.JSON)
-                .forks(1)
-                .build();
-
-        new Runner(opt).run();
-    }
-}
diff --git a/dubbo-hessianlite-client/src/main/resources/benchmark.properties b/dubbo-hessianlite-client/src/main/resources/benchmark.properties
deleted file mode 100644
index 9d276bf..0000000
--- a/dubbo-hessianlite-client/src/main/resources/benchmark.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-server.host=localhost
-server.port=8080
\ No newline at end of file
diff --git a/dubbo-hessianlite-server/pom.xml b/dubbo-hessianlite-server/pom.xml
index 3cf144a..7955249 100644
--- a/dubbo-hessianlite-server/pom.xml
+++ b/dubbo-hessianlite-server/pom.xml
@@ -14,39 +14,9 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>server-base</artifactId>
             <version>${project.version}</version>
         </dependency>
-
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>dubbo</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
@@ -54,32 +24,14 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
                             <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
                         </manifest>
                     </archive>
diff --git a/dubbo-hessianlite-server/src/main/java/org/apache/dubbo/benchmark/Server.java b/dubbo-hessianlite-server/src/main/java/org/apache/dubbo/benchmark/Server.java
deleted file mode 100644
index 6787d36..0000000
--- a/dubbo-hessianlite-server/src/main/java/org/apache/dubbo/benchmark/Server.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.dubbo.benchmark;
-
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-public class Server {
-
-    public static void main(String[] args) throws InterruptedException {
-        try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml")) {
-            context.start();
-            Thread.sleep(Integer.MAX_VALUE);
-        }
-    }
-
-}
diff --git a/dubbo-hessianlite-server/src/main/resources/benchmark.properties b/dubbo-hessianlite-server/src/main/resources/benchmark.properties
deleted file mode 100644
index 9d276bf..0000000
--- a/dubbo-hessianlite-server/src/main/resources/benchmark.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-server.host=localhost
-server.port=8080
\ No newline at end of file
diff --git a/dubbo-kryo-client/pom.xml b/dubbo-kryo-client/pom.xml
index 4c1e8e8..cb62297 100644
--- a/dubbo-kryo-client/pom.xml
+++ b/dubbo-kryo-client/pom.xml
@@ -14,7 +14,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>client-base</artifactId>
             <version>${project.version}</version>
         </dependency>
 
@@ -27,16 +27,6 @@
             <groupId>com.esotericsoftware</groupId>
             <artifactId>kryo</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
@@ -44,32 +34,14 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
                             <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
                         </manifest>
                     </archive>
diff --git a/dubbo-kryo-client/src/main/resources/consumer.xml b/dubbo-kryo-client/src/main/resources/consumer.xml
index e87fbda..78cfd28 100644
--- a/dubbo-kryo-client/src/main/resources/consumer.xml
+++ b/dubbo-kryo-client/src/main/resources/consumer.xml
@@ -7,6 +7,6 @@
     <dubbo:application name="dubbo-kyro-client"/>
     <dubbo:reference id="userService" check="false"
                      interface="org.apache.dubbo.benchmark.service.UserService"
-                     url="dubbo://localhost:8080?optimizer=org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl&amp;serialization=kryo"/>
+                     url="dubbo://${server.host}:${server.port}?optimizer=org.apache.dubbo.benchmark.serialize.SerializationOptimizerImpl&amp;serialization=kryo"/>
     <dubbo:consumer client="netty4" filter="-default"/>
 </beans>
\ No newline at end of file
diff --git a/dubbo-kryo-server/pom.xml b/dubbo-kryo-server/pom.xml
index 44415ee..67f2f1a 100644
--- a/dubbo-kryo-server/pom.xml
+++ b/dubbo-kryo-server/pom.xml
@@ -14,50 +14,14 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>benchmark-base</artifactId>
+            <artifactId>server-base</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>dubbo</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>de.javakaffee</groupId>
             <artifactId>kryo-serializers</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>com.esotericsoftware</groupId>
-            <artifactId>kryo</artifactId>
-            <version>${kryo.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openjdk.jmh</groupId>
-            <artifactId>jmh-generator-annprocess</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
@@ -65,32 +29,14 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.1.0</version>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>
-                                ${project.build.directory}/libs
-                            </outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
 
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
-                            <addClasspath>true</addClasspath>
-                            <classpathPrefix>libs/</classpathPrefix>
                             <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
                         </manifest>
                     </archive>
diff --git a/pom.xml b/pom.xml
index 4f37b2d..bd9695d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
         <netty.version>4.1.25.Final</netty.version>
         <kryo.version>4.0.2</kryo.version>
         <kryo-serializers.version>0.42</kryo-serializers.version>
+        <fst.version>2.48-jdk-6</fst.version>
         <jmh.version>1.21</jmh.version>
         <slf4j.version>1.7.25</slf4j.version>
         <logback.version>1.2.3</logback.version>
@@ -24,10 +25,14 @@
 
     <modules>
         <module>benchmark-base</module>
+        <module>client-base</module>
         <module>dubbo-kryo-client</module>
         <module>dubbo-kryo-server</module>
         <module>dubbo-hessianlite-client</module>
         <module>dubbo-hessianlite-server</module>
+        <module>dubbo-fst-client</module>
+        <module>dubbo-fst-server</module>
+        <module>server-base</module>
     </modules>
 
     <dependencies>
@@ -86,6 +91,12 @@
             </dependency>
 
             <dependency>
+                <groupId>de.ruedigermoeller</groupId>
+                <artifactId>fst</artifactId>
+                <version>${fst.version}</version>
+            </dependency>
+
+            <dependency>
                 <groupId>org.openjdk.jmh</groupId>
                 <artifactId>jmh-core</artifactId>
                 <version>${jmh.version}</version>
@@ -119,6 +130,44 @@
     </dependencyManagement>
 
     <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <version>3.1.0</version>
+                    <executions>
+                        <execution>
+                            <id>copy-dependencies</id>
+                            <phase>prepare-package</phase>
+                            <goals>
+                                <goal>copy-dependencies</goal>
+                            </goals>
+                            <configuration>
+                                <outputDirectory>
+                                    ${project.build.directory}/libs
+                                </outputDirectory>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>3.1.0</version>
+                    <configuration>
+                        <archive>
+                            <manifest>
+                                <addClasspath>true</addClasspath>
+                                <classpathPrefix>libs/</classpathPrefix>
+                            </manifest>
+                        </archive>
+                    </configuration>
+                </plugin>
+            </plugins>
+
+        </pluginManagement>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/server-base/pom.xml b/server-base/pom.xml
new file mode 100644
index 0000000..2a11cf2
--- /dev/null
+++ b/server-base/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>server-base</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>benchmark-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>dubbo</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/dubbo-kryo-server/src/main/java/org/apache/dubbo/benchmark/Server.java b/server-base/src/main/java/org/apache/dubbo/benchmark/Server.java
similarity index 100%
rename from dubbo-kryo-server/src/main/java/org/apache/dubbo/benchmark/Server.java
rename to server-base/src/main/java/org/apache/dubbo/benchmark/Server.java
diff --git a/dubbo-kryo-client/src/main/resources/benchmark.properties b/server-base/src/main/resources/benchmark.properties
similarity index 100%
rename from dubbo-kryo-client/src/main/resources/benchmark.properties
rename to server-base/src/main/resources/benchmark.properties
diff --git a/dubbo-kryo-server/src/main/resources/logback.xml b/server-base/src/main/resources/logback.xml
similarity index 84%
rename from dubbo-kryo-server/src/main/resources/logback.xml
rename to server-base/src/main/resources/logback.xml
index 6b20820..12b8926 100644
--- a/dubbo-kryo-server/src/main/resources/logback.xml
+++ b/server-base/src/main/resources/logback.xml
@@ -10,9 +10,9 @@
     </appender>
 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>logs/dubbo-kryo-server.log</file>
+        <file>logs/server-benchmark.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>logs/dubbo-kryo-server.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
+            <fileNamePattern>logs/server-benchmark.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
         </rollingPolicy>
         <encoder>
             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>