部署quarkus应用
- 登录用于部署quarkus应用的服务器,确保服务器上已经成功部署了docker
- 新建名为application.properties的配置文件,内容是数据库相关的参数,如下所示
quarkus.datasource.db-kind=postgresqlquarkus.datasource.username=quarkusquarkus.datasource.password=123456quarkus.datasource.reactive.url=postgresql://192.168.0.99:5432/quarkus_test
- 我这里,application.properties的路径是:/home/lighthouse/config/quarkus/application.properties
- 检查application.properties文件的可读性,执行以下命令设置
sudo chmod a+r application.properties
- 执行以下命令即可部署和启动quarkus应用,注意application.properties文件的位置要换成您自己的配置文件路径
docker run -idt \--name quarkus \-p 8080:8080 \-v /home/lighthouse/config/quarkus/application.properties:/application/config/application.properties \bolingcavalry/quarkus-virual-threads-demo:x64-0.0.3
- 上述命令中 , quarkus应用的镜像bolingcavalry/quarkus-virual-threads-demo:x64-0.0.3是我提前准备好的 , 本篇只管使用即可,至于如何制作此镜像,接下来的文章会有详细说明
- 用sudo docker logs quarkus命令查看启动日志 , 如果启动成功,信息如下所示
__________________ __________ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \--\___\_\____/_/ |_/_/|_/_/|_|\____/___/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:80802022-10-16 11:46:41,414 INFO[io.quarkus] (main) Profile prod activated.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]
验证基本功能- 假设quarkus所在宿主机的IP地址是192.168.0.1,那么在浏览器上访问地址http://192.168.0.1:8080/vt/persons/1,如下图 , 应用成功从数据库取得数据,并且将当前线程信息也返回给浏览器
![支持JDK19虚拟线程的web框架,之一:体验](http://img.zhejianglong.com/231018/21312C118-3.png)
文章插图
- 作为对比,该服务器上还有个使用虚拟线程的常规web服务,地址是:http://192.168.0.1:8080/pool/persons/1,如下图,该接口也能从数据库取得数据,并且将当前线程信息也返回给浏览器,注意两个接口线程信息的差异
![支持JDK19虚拟线程的web框架,之一:体验](http://img.zhejianglong.com/231018/2131262D9-4.png)
文章插图
- 对于虚拟线程的接口http://192.168.0.1:8080/vt/persons/1,可以尝试多次访问,可见每次返回的虚拟线程Id都不一样 , 而使用线程池的接口http://192.168.0.1:8080/pool/persons/1,多次访问,返回的始终是同一个线程的id
- 基本功能似乎没有问题,接下来可以压测了,用数据说话
- 这次使用的压测工具名为k6,选它的原因只有两个字:简单
- 在执行压测的电脑上,确保docker可以正常使用
- 新建名为k6-vt-docker.js的文件,内容如下,可见非常简单,发请求再校验响应,只要返回码是200,并且body大小大于0就算一次成功 , 要注意的事两个参数,其中vus是并发数,duration是测试持续时间,可见这里设置的是模拟30用户并发请求 , 持续时间是60秒
import http from 'k6/http';import { sleep, check } from 'k6';export let options = {vus: 30,duration: '60s',};export default function () {let r = Math.floor(Math.random() * 6) + 1;const res = http.get(`http://192.168.0.1:8080/vt/persons/${r}`);check(res, {'is status 200': (res) => res.status === 200,'body size is > 0': (r) => r.body.length > 0,});sleep(1);}
- 一行命令即可开始压测 , 如下
docker run --rm -i loadimpact/k6 run - < k6-vt-docker.js
- 等待一分钟,压测完成,得到以下数据
![支持JDK19虚拟线程的web框架,之一:体验](http://img.zhejianglong.com/231018/21312A350-5.png)
文章插图
- 这里将几个重要参数介绍一下
- checks : 通过率,如果满足返回码200且包体大小大于0的条件,就表示本次请求成功,这里显示100.00%,表示全部通过
- http_req_waiting:等待响应的事件,这里avg=33.83ms,表示平均等待时间为33.83毫秒
- http_reqs:每秒处理请求数,即常说的QPS,这里是28个每秒
- 接下来将并发数调整为300(即vue参数),如下图
![支持JDK19虚拟线程的web框架,之一:体验](http://img.zhejianglong.com/231018/2131264954-6.png)
文章插图
推荐阅读
- 华为P50支持几倍变焦_华为P50有光学防抖吗
- 小米11Ultra支持变焦吗_支持多少倍变焦
- 虚拟化_Vmware——敬请期待!
- 虚拟化_Xen——敬请期待!
- 小米11支持人脸支付吗_小米11支持人脸识别吗
- 如何用Virtualbox搭建一个虚拟机
- 华为nova9支持NFC吗_华为nova9有NFC功能吗
- vulnhub靶场之EMPIRE
- 华为nova9pro是5g手机吗_支持5g吗
- iPhone13有高刷吗_iPhone13支持高刷吗