ToB企服应用市场:ToB评测及商务社交产业平台

标题: 支持JDK19虚拟线程的web框架,之一:体验 [打印本页]

作者: 千千梦丶琪    时间: 2023-9-15 16:13
标题: 支持JDK19虚拟线程的web框架,之一:体验
欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
关于虚拟线程

关于支持虚拟线程的框架

本篇概览

环境信息



部署数据库

  1. sudo docker run \
  2. --name postgres \
  3. -p 5432:5432 \
  4. -e POSTGRES_DB=quarkus_test \
  5. -e POSTGRES_USER=quarkus \
  6. -e POSTGRES_PASSWORD=123456 \
  7. -d \
  8. postgres:15
复制代码
建表,添加数据

  1. create table person (
  2.   id serial primary key,
  3.   name varchar(255),
  4.   gender varchar(255),
  5.   age int,
  6.   external_id int
  7. );
  8. insert into person(name, age, gender, external_id) values('John Smith', 25, 'MALE', 10);
  9. insert into person(name, age, gender, external_id) values('Paul Walker', 65, 'MALE', 20);
  10. insert into person(name, age, gender, external_id) values('Lewis Hamilton', 35, 'MALE', 30);
  11. insert into person(name, age, gender, external_id) values('Veronica Jones', 20, 'FEMALE', 40);
  12. insert into person(name, age, gender, external_id) values('Anne Brown', 60, 'FEMALE', 50);
  13. insert into person(name, age, gender, external_id) values('Felicia Scott', 45, 'FEMALE', 60);
复制代码
部署quarkus应用

  1. quarkus.datasource.db-kind=postgresql
  2. quarkus.datasource.username=quarkus
  3. quarkus.datasource.password=123456
  4. quarkus.datasource.reactive.url=postgresql://192.168.0.99:5432/quarkus_test
复制代码
  1. sudo chmod a+r application.properties
复制代码
  1. docker run -idt \
  2. --name quarkus \
  3. -p 8080:8080 \
  4. -v /home/lighthouse/config/quarkus/application.properties:/application/config/application.properties \
  5. bolingcavalry/quarkus-virual-threads-demo:x64-0.0.3
复制代码
  1. __  ____  __  _____   ___  __ ____  ______
  2. --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
  3. -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
  4. --\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
  5. 2022-10-16 11:46:41,406 INFO  [io.quarkus] (main) quarkus-virual-threads-demo 1.0-SNAPSHOT on JVM (powered by Quarkus 2.13.2.Final) started in 0.804s. Listening on: http://0.0.0.0:8080
  6. 2022-10-16 11:46:41,414 INFO  [io.quarkus] (main) Profile prod activated.
  7. 2022-10-16 11:46:41,414 INFO  [io.quarkus] (main) Installed features: [cdi, reactive-pg-client, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
复制代码
验证基本功能



压测使用虚拟线程的接口

  1. import http from 'k6/http';
  2. import { sleep, check } from 'k6';
  3. export let options = {
  4.   vus: 30,
  5.   duration: '60s',
  6. };
  7. export default function () {
  8.   let r = Math.floor(Math.random() * 6) + 1;
  9.   const res = http.get(`http://192.168.0.1:8080/vt/persons/${r}`);
  10.   check(res, {
  11.     'is status 200': (res) => res.status === 200,
  12.     'body size is > 0': (r) => r.body.length > 0,
  13.   });
  14.   sleep(1);
  15. }
复制代码
  1. docker run --rm -i loadimpact/k6 run - < k6-vt-docker.js
复制代码



压测使用线程池的接口

  1. import http from 'k6/http';
  2. import { sleep, check } from 'k6';
  3. export let options = {
  4.   vus: 30,
  5.   duration: '60s',
  6. };
  7. export default function () {
  8.   let r = Math.floor(Math.random() * 6) + 1;
  9.   const res = http.get(`http://192.168.0.1:8080/pool/persons/${r}`);
  10.   check(res, {
  11.     'is status 200': (res) => res.status === 200,
  12.     'body size is > 0': (r) => r.body.length > 0,
  13.   });
  14.   sleep(1);
  15. }
复制代码


小结

停止quarkus应用

  1. sudo docker stop quarkus
复制代码
启动SpringBoot应用

  1. spring.datasource.url=jdbc:postgresql://42.193.162.141:5432/quarkus_test
  2. spring.datasource.username=quarkus
  3. spring.datasource.password=123456
  4. spring.datasource.driver-class-name=org.postgresql.Driver
  5. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
  6. spring.jpa.properties.hibernate.hbm2ddl.auto=update
  7. spring.datasource.hikari.maximum-pool-size=256
复制代码
  1. sudo chmod a+r application.properties
复制代码
  1. docker run -idt \
  2. --name springboot \
  3. -p 8080:8080 \
  4. -v /home/lighthouse/config/springboot/application.properties:/application/BOOT-INF/classes/application.properties \
  5. bolingcavalry/springboot-postgresql-demo:x64-0.0.3
复制代码
  1.   .   ____          _            __ _ _
  2. /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  3. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  4. \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  5.   '  |____| .__|_| |_|_| |_\__, | / / / /
  6. =========|_|==============|___/=/_/_/_/
  7. :: Spring Boot ::                (v2.7.4)
  8. 2022-10-16 13:01:01.022  INFO 1 --- [           main] .b.s.SpringbootPostgresqlDemoApplication : Starting SpringbootPostgresqlDemoApplication v0.0.1-SNAPSHOT using Java 11.0.13 on 5c25db81639e with PID 1 (/application/BOOT-INF/classes started by root in /application)
  9. 2022-10-16 13:01:01.025  INFO 1 --- [           main] .b.s.SpringbootPostgresqlDemoApplication : No active profile set, falling back to 1 default profile: "default"
  10. 2022-10-16 13:01:01.795  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
  11. 2022-10-16 13:01:01.857  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 47 ms. Found 1 JPA repository interfaces.
  12. 2022-10-16 13:01:02.392  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
  13. 2022-10-16 13:01:02.405  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
  14. 2022-10-16 13:01:02.405  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
  15. 2022-10-16 13:01:02.492  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
  16. 2022-10-16 13:01:02.492  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1364 ms
  17. 2022-10-16 13:01:02.701  INFO 1 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
  18. 2022-10-16 13:01:02.741  INFO 1 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.11.Final
  19. 2022-10-16 13:01:02.867  INFO 1 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
  20. 2022-10-16 13:01:02.942  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
  21. 2022-10-16 13:01:03.164  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
  22. 2022-10-16 13:01:03.179  INFO 1 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
  23. 2022-10-16 13:01:03.688  INFO 1 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
  24. 2022-10-16 13:01:03.695  INFO 1 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
复制代码

压测SpringBoot应用

  1. import http from 'k6/http';
  2. import { sleep, check } from 'k6';
  3. export let options = {
  4.   vus: 30,
  5.   duration: '60s',
  6. };
  7. export default function () {
  8.   let r = Math.floor(Math.random() * 6) + 1;
  9.   const res = http.get(`http://192.168.0.1:8080/springboot/persons/${r}`);
  10.   check(res, {
  11.     'is status 200': (res) => res.status === 200,
  12.     'body size is > 0': (r) => r.body.length > 0,
  13.   });
  14.   sleep(1);
  15. }
复制代码



欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4