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: