作者 | AddoZhang       责编 | 欧阳姝黎

当讨论起世界上最好的开发语言是什么的时候,Java 的粉丝们总会遇到这种场景:

吹:“Java 语法简单,容易上手!” 黑:“Java 启动慢,性能差,耗资源!” 吹:“Java 有世界上最多的程序员!” 黑:“Java 启动慢,性能差,耗资源!” 吹:“Java 生态好!” 黑:“Java 启动慢,性能差,耗资源!” 吹:“滚!”

在对 Java 语言的评价中,往往少不了“启动慢”的字眼。但对着汇编语言的发展,更快的 Java 架构——Quarkus 出现了,今天我们就来说说应“云”而生的  Quarkus。

TL;DR

废话不多说,先上结论。Quarkus 与 Spring 首个请求的响应耗时:2.5s vs 5.7s。

注:为了忽略拉取镜像的时间差异,提前 pull 镜像。

验证

环境准备

  • Kubernetes 1.18+ via minikube

  • Istio 1.9.2

  • Knative 0.22.0

  • Knative CLI (brew 安装)

  • watch (brew 安装)

环境的安装准备参考官方的文档。

镜像

资源镜像就使用上一篇文章构建的,但需要做下调整:

docker tag quarkus/quarkus-getting-started:distroless dev.local/quarkus/quarkus-getting-started:distroless
docker tag spring/spring-getting-started:latest dev.local/spring/spring-getting-started:latest

注:knative 会忽略 dev.local 镜像的预加载,不会在创建 knative service 的时候拉取。

然后使用 minikube image load 加载到 minikube环境中:

minikube image load dev.local/quarkus/quarkus-getting-started:distroless
minikube image load dev.local/spring/spring-getting-started:latest

knative 配置(可选)

修改 istio-system namespace 下的 configmap config-domain,增加新的 domain:nip.io

注:这个操作纯属个人喜好,不喜欢那个 example.com,可跳过。

获取 Istio Ingress 地址

使用命令获取 Ingress 的访问方式,这里 http2/80 后的 http://192.168.64.2:31608 就是我们需要的,记下这个 ip 和端口。

minikube service list
|------------------|----------------------------|-------------------|---------------------------|
|    NAMESPACE     |            NAME            |    TARGET PORT    |            URL            |
|------------------|----------------------------|-------------------|---------------------------|
| default          | kubernetes                 | No node port      |
| istio-system     | istio-egressgateway        | No node port      |
| istio-system     | istio-ingressgateway       | status-port/15021 | http://192.168.64.2:32431 |
|                  |                            | http2/80          | http://192.168.64.2:31608 |
|                  |                            | https/443         | http://192.168.64.2:31795 |
|                  |                            | tcp/31400         | http://192.168.64.2:31369 |
|                  |                            | tls/15443         | http://192.168.64.2:30293 |
| istio-system     | istiod                     | No node port      |
| istio-system     | knative-local-gateway      | No node port      |
| knative-eventing | broker-filter              | No node port      |
| knative-eventing | broker-ingress             | No node port      |
| knative-eventing | eventing-webhook           | No node port      |
| knative-eventing | imc-dispatcher             | No node port      |
| knative-serving  | activator-service          | No node port      |
| knative-serving  | autoscaler                 | No node port      |
| knative-serving  | autoscaler-bucket-00-of-01 | No node port      |
| knative-serving  | autoscaler-hpa             | No node port      |
| knative-serving  | controller                 | No node port      |
| knative-serving  | istio-webhook              | No node port      |
| knative-serving  | webhook                    | No node port      |
| kube-system      | kube-dns                   | No node port      |
|------------------|----------------------------|-------------------|---------------------------|

创建 Knative service

#quarkus
apiVersion: serving.knative.dev/v1
kind: Service
metadata:name: hello-quarkusnamespace: default
spec:template:spec:containers:- image: dev.local/quarkus/quarkus-getting-started:distrolessimagePullPolicy: Never
---
#spring
apiVersion: serving.knative.dev/v1
kind: Service
metadata:name: hello-springnamespace: default
spec:template:spec:containers:- image: dev.local/spring/spring-getting-started:latestimagePullPolicy: Never

通过 cli kn 命令查看下 service 的信息:

kn service describe hello-quarkus -n default
Name:       hello-quarkus
Namespace:  default
Age:        21s
URL:        http://hello-quarkus.default.nip.io
Revisions:100%  @latest (hello-quarkus-00001) [1] (21s)Image:  dev.local/quarkus/quarkus-getting-started:distroless
Conditions:OK TYPE                   AGE REASON++ Ready                   9s++ ConfigurationsReady    10s++ RoutesReady             9s
kn service describe hello-spring -n default
Name:       hello-spring
Namespace:  default
Age:        44s
URL:        http://hello-spring.default.nip.io
Revisions:100%  @latest (hello-spring-00001) [1] (44s)Image:  dev.local/spring/spring-getting-started:latest
Conditions:OK TYPE                   AGE REASON++ Ready                  31s++ ConfigurationsReady    32s++ RoutesReady            31s

从描述信息中可以拿到服务的访问地址,分别是 http://hello-quarkus.default.nip.io 和 http://hello-spring.default.nip.io。

接下来就需要在本地主机的 hosts 中加入解析:

192.168.64.2    hello-quarkus.default.nip.io
192.168.64.2    hello-spring.default.nip.io

测试

上面操作完之后,就可以使用下面的地址访问服务了。

http://hello-quarkus.default.nip.io:31608/hello/greeting/quarkus http://hello-spring.default.nip.io:31608/hello/greeting/spring

在测试的过程中,可以通过 watch -n 1 'kubectl get po -n default | grep hello' 命令来查看 pod 的创建和销毁。

☞95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;Android Studio 4.2 发布|极客头条☞从“玩具”到“工具”,低代码能否完全替换纯代码?☞运行 Java、Python、Go 等 25 种代码后,发现性能最强的竟然是它!

谁说 Java 不能用来跑 Serverless?相关推荐

  1. 天天酷跑php源码_使用Java实现天天酷跑(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...

  2. Java必突-JVM知识专题(一): Java代码是如何跑起来的+类加载到使用的过程+类从加载到使用核心阶段(类初始化)+类加载的层级结构+什么是JVM的内存区域划分?Java虚拟机栈、Java堆内存

    前言: 该章节知识点梳理:本文主要是入门和了解jvm,不做深入 1.Java代码是如何运行起来的? 2.类加载到使用的过程? 3.验证准备和初始化的过程? 4.类从加载到使用核心阶段:初始化.类加载器 ...

  3. 用Java实现天天酷跑(附源码),这个真的有点强了!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:MyHuey https://blog.csdn.n ...

  4. 用Java实现天天酷跑(附源码),只能用牛逼来形容了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:M ...

  5. element 密码输入框用*显示_用 Java 实现天天酷跑,这个真的有点强了

    一.登录界面 界面功能需求图如下: 接下来我们再做一些准备工作:导入相关图片素材. 将天天酷跑的图片(Image)资源解压到桌面后,(Image文件如下图所示:) 复制到Eclipse中,单击src, ...

  6. 天天酷跑电脑版代码C语言,Java实现天天酷跑小游戏完整代码(附源码).pdf

    Java实实现现天天天天酷酷跑跑小小游游戏戏完完整整代代码码(附附源源码码) 首首先先,,写写一一个个需需求求文文档档:: 一.项目名称: <天天酷跑> (RunDay ) 二.功能介绍: ...

  7. java实现天天酷跑开发_Java项目实战之天天酷跑

    作者:MyHuey 来源:blog.csdn.net/qq_45909299 首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍:闯关类游戏,玩家登录后,选择 ...

  8. 用 Java 实现天天酷跑(附源码),这个真的有点强了!

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  9. 上班摸鱼,用Java实现天天酷跑!

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 blog.csdn.net/qq_45909299 推荐:https://www ...

最新文章

  1. python读取文件某一行-python和shell读取文件某一行
  2. numpy.absolute详解
  3. 第十一章 图形视图、动画、状态机框架
  4. uitableView group模式下的间距问题
  5. Python3 Tkinter 之 (1) 主窗口框架
  6. matlab中的ftell函数,Matlab之文件操作函数fclose | ferror | fopen | frewind | fseek | ftell函数...
  7. talib 安装与使用
  8. 手写minist的DataLoader
  9. Java面试之爱立信
  10. 小白的理财之道:赚钱人生第一桶金
  11. 数据可视化Error:matplotlib is required for plotting when the default backend “matplotlib“ is selected
  12. Pandoc 安装与使用
  13. linux kvm切换器,PS2系列KVM切换器
  14. 计算机读光盘出现乱码,解决刻录音乐光盘mp3出现中文乱码的方法
  15. 微服务选择Spring Cloud还是Dubbo?
  16. 如何查找视频文件 android,如何扫描出android手机中所有的视频文件
  17. 检测ip和port是否可连接
  18. 登录页面渗透测试思路总结
  19. Helios Ethereum Client for Wallets and Dapp
  20. [***Model mj_objectArrayWithKeyValuesArray:]: unrecognized selector sent to class 0x10ace5df0

热门文章

  1. 面试北京XX数通总结
  2. extract()和extact_first()的区别
  3. POJ 3352 无向图边双连通分量,缩点,无重边
  4. 利用pagespeed插件优化网站css层叠样式文件
  5. Hive从一个表向另一个表插入数据的注意事项
  6. [vscode] 禁止 pylance 插件自动添加 import
  7. 在矩池云中如何使用TensorBoard?
  8. 汉语语法分析的重点是_语法特定句式 |现代汉语专题研讨(15)
  9. server接收dtu透传代码_Swoole学习笔记二:初探server与client(Client同步)
  10. 网站爬取工具_Python项目:结合Django和爬虫开发小说网站,免安装,无广告