Browse Source

Update 2.3.0 (#6462)

* Update application.xml

* jdk16

* Update redkale-jdk16.dockerfile

* zgc
Redkale 4 years ago
parent
commit
3daee00934

+ 38 - 0
frameworks/Java/redkale/benchmark_config.json

@@ -60,6 +60,44 @@
                 "notes": "",
                 "versus": "Redkale"
             },
+            "jdk16": {
+                "plaintext_url": "/plaintext",
+                "json_url": "/json",
+                "port": 8080,
+                "approach": "Realistic",
+                "classification": "Fullstack",
+                "database": "Postgres",
+                "framework": "Redkale",
+                "language": "Java",
+                "flavor": "None",
+                "orm": "Raw",
+                "platform": "Redkale",
+                "webserver": "Redkale",
+                "os": "Linux",
+                "database_os": "Linux",
+                "display_name": "redkale-io",
+                "notes": "",
+                "versus": "Redkale"
+            },
+            "zgc": {
+                "plaintext_url": "/plaintext",
+                "json_url": "/json",
+                "port": 8080,
+                "approach": "Realistic",
+                "classification": "Fullstack",
+                "database": "Postgres",
+                "framework": "Redkale",
+                "language": "Java",
+                "flavor": "None",
+                "orm": "Raw",
+                "platform": "Redkale",
+                "webserver": "Redkale",
+                "os": "Linux",
+                "database_os": "Linux",
+                "display_name": "redkale-io",
+                "notes": "",
+                "versus": "Redkale"
+            },
             "io": {
                 "plaintext_url": "/plaintext",
                 "json_url": "/json",

+ 1 - 0
frameworks/Java/redkale/conf/application.xml

@@ -6,6 +6,7 @@
         <executor threads="0"/>
         <properties>    
             <property name="system.property.convert.tiny" value="false"/>    
+            <property name="system.property.http.response.header.server" value="redkale"/>
             <property name="system.property.http.response.header.connection" value="none"/>
         </properties>
     </resources> 

+ 26 - 0
frameworks/Java/redkale/config.toml

@@ -53,3 +53,29 @@ orm = "Raw"
 platform = "Redkale"
 webserver = "Redkale"
 versus = "Redkale"
+
+[jdk16]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Fullstack"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "Redkale"
+webserver = "Redkale"
+versus = "Redkale"
+
+[zgc]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Fullstack"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "Redkale"
+webserver = "Redkale"
+versus = "Redkale"

+ 15 - 0
frameworks/Java/redkale/redkale-jdk16.dockerfile

@@ -0,0 +1,15 @@
+FROM maven:3.6.3-openjdk-16-slim as maven
+WORKDIR /redkale
+COPY src src
+COPY conf conf
+COPY pom.xml pom.xml
+RUN mvn package -q
+
+FROM openjdk:16-jdk-slim
+WORKDIR /redkale
+COPY conf conf
+COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:AutoBoxCacheMax=160000", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

+ 15 - 0
frameworks/Java/redkale/redkale-zgc.dockerfile

@@ -0,0 +1,15 @@
+FROM maven:3.6.3-openjdk-16-slim as maven
+WORKDIR /redkale
+COPY src src
+COPY conf conf
+COPY pom.xml pom.xml
+RUN mvn package -q
+
+FROM openjdk:16-jdk-slim
+WORKDIR /redkale
+COPY conf conf
+COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseZGC", "-XX:AutoBoxCacheMax=160000", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

+ 18 - 26
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/Service.java

@@ -7,8 +7,6 @@ package org.redkalex.benchmark;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
 import javax.annotation.Resource;
 import org.redkale.net.http.*;
 import org.redkale.service.AbstractService;
@@ -24,17 +22,17 @@ public class Service extends AbstractService {
 
     private static final byte[] helloBytes = "Hello, world!".intern().getBytes();
 
-    private final ThreadLocal<Random> localRandom = ThreadLocal.withInitial(Random::new);
+    private final Random random = new Random();
 
     @Resource
     private DataSource source;
 
-    private EntityCache<CachedWorld> entityCache;
+    private EntityCache<CachedWorld> cache;
 
     @Override
     public void init(AnyValue conf) {
         if (source instanceof DataSqlSource) {
-            this.entityCache = ((DataSqlSource) source).loadCache(CachedWorld.class);
+            this.cache = ((DataSqlSource) source).loadCache(CachedWorld.class);
         }
     }
 
@@ -50,39 +48,31 @@ public class Service extends AbstractService {
 
     @RestMapping(name = "db")
     public CompletableFuture<World> findWorldAsync() {
-        return source.findAsync(World.class, 1 + localRandom.get().nextInt(10000));
+        return source.findAsync(World.class, randomId());
     }
 
     @RestMapping(name = "queries")
     public CompletableFuture<World[]> queryWorldAsync(int q) {
         final int size = Math.min(500, Math.max(1, q));
-        final Random random = localRandom.get();
         final World[] worlds = new World[size];
-
-        final AtomicInteger index = new AtomicInteger();
-        final Function<?, CompletableFuture> func = f -> source.findAsync(World.class, 1 + random.nextInt(10000))
-            .thenAccept(v -> worlds[index.getAndIncrement()] = v);
-        CompletableFuture future = func.apply(null);
-        for (int i = 1; i < size; i++) {
-            future = future.thenCompose(func);
+        final CompletableFuture[] futures = new CompletableFuture[size];
+        for (int i = 0; i < size; i++) {
+            final int index = i;
+            futures[index] = source.findAsync(World.class, randomId()).thenAccept(v -> worlds[index] = v);
         }
-        return future.thenApply(v -> worlds);
+        return CompletableFuture.allOf(futures).thenApply(v -> worlds);
     }
 
     @RestMapping(name = "updates")
     public CompletableFuture<World[]> updateWorldAsync(int q) {
         final int size = Math.min(500, Math.max(1, q));
-        final Random random = localRandom.get();
         final World[] worlds = new World[size];
-
-        final AtomicInteger index = new AtomicInteger();
-        final Function<?, CompletableFuture> func = f -> source.findAsync(World.class, 1 + random.nextInt(10000))
-            .thenAccept(v -> worlds[index.getAndIncrement()] = v.randomNumber(1 + random.nextInt(10000)));
-        CompletableFuture future = func.apply(null);
-        for (int i = 1; i < size; i++) {
-            future = future.thenCompose(func);
+        final CompletableFuture[] futures = new CompletableFuture[size];
+        for (int i = 0; i < size; i++) {
+            final int index = i;
+            futures[index] = source.findAsync(World.class, randomId()).thenAccept(v -> worlds[index] = v.randomNumber(randomId()));
         }
-        return future.thenCompose(v -> {
+        return CompletableFuture.allOf(futures).thenCompose(v -> {
             Arrays.sort(worlds);
             return source.updateAsync(worlds);
         }).thenApply(v -> worlds);
@@ -101,12 +91,14 @@ public class Service extends AbstractService {
     @RestMapping(name = "cached-worlds")
     public CachedWorld[] cachedWorlds(int q) {
         final int size = Math.min(500, Math.max(1, q));
-        final Random random = localRandom.get();
         final CachedWorld[] worlds = new CachedWorld[size];
         for (int i = 0; i < size; i++) {
-            worlds[i] = entityCache.find(1 + random.nextInt(10000));
+            worlds[i] = cache.find(randomId());
         }
         return worlds;
     }
 
+    private int randomId() {
+        return 1 + random.nextInt(10000);
+    }
 }