From 7b9ee74c2164bb38cff9b25fd10c2377df4aaf49 Mon Sep 17 00:00:00 2001 From: tjq Date: Sat, 7 Jan 2023 16:58:33 +0800 Subject: [PATCH] feat: benchmark remote framework --- powerjob-remote/pom.xml | 1 + .../powerjob-remote-benchmark/pom.xml | 52 ++++++++++++++ .../benchmark/BenchmarkApplication.java | 19 ++++++ .../remote/benchmark/EngineService.java | 68 +++++++++++++++++++ .../benchmark/PressureTestController.java | 37 ++++++++++ .../remote/akka/AkkaCSInitializer.java | 2 +- .../src/main/resources/powerjob.akka.conf | 2 +- .../powerjob-remote-impl-http/pom.xml | 1 + 8 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 powerjob-remote/powerjob-remote-benchmark/pom.xml create mode 100644 powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/BenchmarkApplication.java create mode 100644 powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/EngineService.java create mode 100644 powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java diff --git a/powerjob-remote/pom.xml b/powerjob-remote/pom.xml index e6c935ff..166a7b17 100644 --- a/powerjob-remote/pom.xml +++ b/powerjob-remote/pom.xml @@ -11,6 +11,7 @@ pom powerjob-remote-framework + powerjob-remote-benchmark powerjob-remote-impl-http powerjob-remote-impl-akka diff --git a/powerjob-remote/powerjob-remote-benchmark/pom.xml b/powerjob-remote/powerjob-remote-benchmark/pom.xml new file mode 100644 index 00000000..09f0b97b --- /dev/null +++ b/powerjob-remote/powerjob-remote-benchmark/pom.xml @@ -0,0 +1,52 @@ + + + + powerjob-remote + tech.powerjob + 3.0.0 + + 4.0.0 + + powerjob-remote-benchmark + + + 8 + 8 + UTF-8 + + 1.2.9 + 2.7.4 + 4.2.0 + 4.2.0 + + + + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.springframework.boot + spring-boot-starter-web + ${springboot.version} + + + + tech.powerjob + powerjob-remote-impl-http + ${powerjob-remote-impl-http.version} + + + + tech.powerjob + powerjob-remote-impl-akka + ${powerjob-remote-impl-akka.version} + + + + \ No newline at end of file diff --git a/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/BenchmarkApplication.java b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/BenchmarkApplication.java new file mode 100644 index 00000000..64dcb25e --- /dev/null +++ b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/BenchmarkApplication.java @@ -0,0 +1,19 @@ +package tech.powerjob.remote.benchmark; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 测试工程 + * 用于 remote 协议压测 + * + * @author tjq + * @since 2023/1/7 + */ +@SpringBootApplication +public class BenchmarkApplication { + + public static void main(String[] args) { + SpringApplication.run(BenchmarkApplication.class, args); + } +} diff --git a/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/EngineService.java b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/EngineService.java new file mode 100644 index 00000000..41079878 --- /dev/null +++ b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/EngineService.java @@ -0,0 +1,68 @@ +package tech.powerjob.remote.benchmark; + +import com.google.common.collect.Lists; +import lombok.Getter; +import org.springframework.stereotype.Service; +import tech.powerjob.common.enums.Protocol; +import tech.powerjob.remote.framework.BenchmarkActor; +import tech.powerjob.remote.framework.base.Address; +import tech.powerjob.remote.framework.base.ServerType; +import tech.powerjob.remote.framework.engine.EngineConfig; +import tech.powerjob.remote.framework.engine.impl.PowerJobRemoteEngine; +import tech.powerjob.remote.framework.transporter.Transporter; + +import javax.annotation.PostConstruct; + +/** + * EngineService + * + * @author tjq + * @since 2023/1/7 + */ +@Service +public class EngineService { + + public static final String HOST = "127.0.0.1"; + + public static final int SERVER_AKKA_PORT = 10001; + public static final int SERVER_HTTP_PORT = 10002; + + public static final int CLIENT_AKKA_PORT = 20001; + public static final int CLIENT_HTTP_PORT = 20002; + + @Getter + private Transporter akkaTransporter; + @Getter + private Transporter httpTransporter; + + @PostConstruct + public void init() { + // http server + new PowerJobRemoteEngine().start(new EngineConfig() + .setServerType(ServerType.SERVER) + .setActorList(Lists.newArrayList(new BenchmarkActor())) + .setType(Protocol.HTTP.name()) + .setBindAddress(new Address().setHost(HOST).setPort(SERVER_HTTP_PORT))); + + // akka server + new PowerJobRemoteEngine().start(new EngineConfig() + .setServerType(ServerType.SERVER) + .setActorList(Lists.newArrayList(new BenchmarkActor())) + .setType(Protocol.AKKA.name()) + .setBindAddress(new Address().setHost(HOST).setPort(SERVER_AKKA_PORT))); + + // http client + httpTransporter = new PowerJobRemoteEngine().start(new EngineConfig() + .setServerType(ServerType.WORKER) + .setActorList(Lists.newArrayList(new BenchmarkActor())) + .setType(Protocol.HTTP.name()) + .setBindAddress(new Address().setHost(HOST).setPort(CLIENT_HTTP_PORT))).getTransporter(); + + // akka client + akkaTransporter = new PowerJobRemoteEngine().start(new EngineConfig() + .setServerType(ServerType.WORKER) + .setActorList(Lists.newArrayList(new BenchmarkActor())) + .setType(Protocol.AKKA.name()) + .setBindAddress(new Address().setHost(HOST).setPort(CLIENT_AKKA_PORT))).getTransporter(); + } +} diff --git a/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java new file mode 100644 index 00000000..290112c3 --- /dev/null +++ b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java @@ -0,0 +1,37 @@ +package tech.powerjob.remote.benchmark; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import tech.powerjob.remote.framework.BenchmarkActor; +import tech.powerjob.remote.framework.base.Address; +import tech.powerjob.remote.framework.base.HandlerLocation; +import tech.powerjob.remote.framework.base.URL; + +import javax.annotation.Resource; + +import static tech.powerjob.remote.benchmark.EngineService.*; + +/** + * 压测测试入口 + * + * @author tjq + * @since 2023/1/7 + */ +@RestController +@RequestMapping("/pressure") +public class PressureTestController { + + private static final HandlerLocation HL = new HandlerLocation().setRootPath("benchmark").setMethodPath("standard"); + + @Resource + private EngineService engineService; + + @GetMapping("/httpTell") + public void httpTell(Integer blockMs, Integer responseSize, String content) { + URL url = new URL().setLocation(HL).setAddress(new Address().setPort(SERVER_HTTP_PORT).setHost(HOST)); + final BenchmarkActor.BenchmarkRequest request = new BenchmarkActor.BenchmarkRequest().setContent(content).setBlockingMills(blockMs).setResponseSize(responseSize); + engineService.getHttpTransporter().tell(url, request); + } + +} diff --git a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java index 3fc3b2a4..70af8292 100644 --- a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java +++ b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java @@ -81,7 +81,7 @@ public class AkkaCSInitializer implements CSInitializer { log.info("[PowerJob-AKKA] start to process actor[path={},config={}]", rootPath, JsonUtils.toJSONString(actorConfig)); actorSystem.actorOf(AkkaProxyActor.props(actorInfo) - .withDispatcher(actorConfig.getDispatcherName()) + .withDispatcher("akka.".concat(actorConfig.getDispatcherName())) .withRouter(new RoundRobinPool(cores)), actorConfig.getActorName()); }); diff --git a/powerjob-remote/powerjob-remote-impl-akka/src/main/resources/powerjob.akka.conf b/powerjob-remote/powerjob-remote-impl-akka/src/main/resources/powerjob.akka.conf index 001a4177..f34e043e 100644 --- a/powerjob-remote/powerjob-remote-impl-akka/src/main/resources/powerjob.akka.conf +++ b/powerjob-remote/powerjob-remote-impl-akka/src/main/resources/powerjob.akka.conf @@ -111,7 +111,7 @@ akka { } ##################### default config ##################### - common-dispatcher { + common-dispatcher { # Dispatcher is the name of the event-based dispatcher type = Dispatcher # What kind of ExecutionService to use diff --git a/powerjob-remote/powerjob-remote-impl-http/pom.xml b/powerjob-remote/powerjob-remote-impl-http/pom.xml index 387b5559..3979cde2 100644 --- a/powerjob-remote/powerjob-remote-impl-http/pom.xml +++ b/powerjob-remote/powerjob-remote-impl-http/pom.xml @@ -10,6 +10,7 @@ 4.0.0 powerjob-remote-impl-http + 4.2.0 8