环球热头条丨在 Kubernetes 中优化 Java 的 Serverless 功能

2023-04-25 11:12:06 来源:新钛云服

实现更快的启动和更小的内存占用,以在Kubernetes上运行serverless功能。

由于运行数千个应用程序pod的费用以及使用更少的工作节点和其他资源来节省成本,在Kubernetes中更快的启动和更小的内存占用总是很重要的。 在Kubernetes上的容器化微服务上,内存比吞吐量更重要,因为:


【资料图】

由于永久性(与CPU周期不同),它更昂贵。微服务成倍增加开销成本。一个单体应用变成N个微服务(例如,20个微服务 ≈20GB)

这会显着影响serverless功能开发和Java部署模型。 这是因为许多企业开发人员选择了Go、Python和Nodejs等替代方案来克服性能瓶颈——直到现在,感谢Quarkus,一个新的Kubernetes原生Java堆栈。 本文介绍了如何优化Java性能以使用Quarkus在Kubernetes上运行serverless功能。

容器优先设计

Java生态系统中的传统框架在初始化这些框架所需的内存和启动时间方面是有代价的,包括配置处理、类路径扫描、类加载、注释处理和构建世界的元模型,框架需要这些操作。对于不同的框架,这一次又一次地成倍增加。

Quarkus通过将几乎所有开销“左移”到构建阶段来帮助解决这些Java性能问题。通过在构建时只进行一次代码和框架分析、字节码转换和动态元模型生成,您最终会得到一个高度优化的运行时可执行文件,它启动速度超快,并且不需要传统启动的所有内存,因为工作在构建阶段完成一次。

更重要的是,Quarkus允许您构建具有性能优势的本机可执行文件,包括惊人的快速启动时间和非常小的驻留集大小(RSS)内存,与传统云相比,可实现即时扩展和高密度内存利用率—— 本机Java堆栈。

这是一个快速示例,说明如何使用Quarkus通过Javaserverless功能项目构建本机可执行文件。

一、创建QuarkusserverlessMaven项目

这个命令会生成一个Quarkus项目(例如quarkus-serverless-native)来创建一个简单的函数:

二、构建原生可执行文件

您需要一个GraalVM来为Java应用程序构建本机可执行文件。 您可以选择任何GraalVM发行版,例如Oracle GraalVM社区版(CE)和Mandrel(Oracle GraalVM CE的下游发行版)。Mandrel旨在支持在OpenJDK 11上构建Quarkus原生可执行文件。

打开pom.xml,你会发现这个原生配置文件。 您将使用它来构建本机可执行文件:

注意:您可以在本地安装GraalVM或Mandrel发行版。 您还可以下载Mandrel容器镜像来构建它(就像我所做的那样),因此您需要在本地运行容器引擎(例如Docker)。

假设您已经启动了容器运行时,请运行以下Maven命令之一。

对于Docker:

对于Podman:

输出应以BUILD SUCCESS结束。

在没有Java虚拟机(JVM)的情况下直接运行本机可执行文件:

输出将如下所示:

超音速!启动时间为19毫秒。 时间可能因您的环境而异。

正如Linux ps实用程序报告的那样,它还具有极低的内存使用率。 在应用程序运行时,在另一个终端中运行此命令:

你应该看到类似的东西:

此过程使用大约11MB的内存(RSS)。 相当紧凑!

注意:任何应用程序(包括Quarkus)的RSS和内存使用量将根据您的特定环境而有所不同,并且会随着应用程序体验的加载而增加。

您还可以使用REST API访问该函数。 那么输出应该是Hello RESTEasy:

三、将功能部署到Knative服务

如果您还没有,请在OKD(OpenShift Kubernetes Distribution)上创建一个命名空间(例如quarkus-serverless-native),以将此本机可执行文件部署为无服务器功能。 然后为Knative服务部署添加一个quarkus-openshift扩展:

在src/main/resources/application.properties中添加以下变量来配置Knative和Kubernetes资源:

构建本机可执行文件,然后直接将其部署到OLD集群:

注意:确保提前使用oc login命令登录到正确的项目(例如quarkus-serverless-native)。

输出应以BUILD SUCCESS结束。 完成原生二进制构建并部署新的Knative服务需要几分钟时间。 成功创建服务后,您应该使用kubectl或oc命令工具看到Knative服务(KSVC)和修订版(REV):

四、访问原生可执行函数

通过运行以下kubectl命令检索serverless函数的端点:

输出应如下所示:

使用curl命令访问路由URL:

不到一秒钟,您将获得与本地相同的结果:

当您访问OLD集群中的Quarkus运行pods日志时,您将看到本机可执行文件作为Knative服务运行。

下一步是什么?

您可以使用GraalVM发行版优化Javaserverless功能,将它们作为无服务器功能部署在Knative和Kubernetes上。Quarkus使用普通微服务中的简单配置来实现这种性能优化。

标签:

环球速讯:626国际禁毒日丨金海街道小微“潭”法之全民禁毒共参与

2023-06-26

马来西亚空军训练事故致2死1伤 全球聚焦

2023-06-26

深圳通报百富兴大厦异响振动事件后续:房屋基础薄弱,将全面加固

2023-06-26

限娱令_关于限娱令的介绍

2023-06-26

热文:泡泡人消消乐

2023-06-26

美以涉芬太尼问题逮捕中国公民,我驻美使馆提出强烈抗议 当前速看

2023-06-26

2023年浙江高考分数线公布:普通类本科一段488分

2023-06-25

长华集团(605018.SH):收到国内车企关于新能源新车型冲焊件的定点通知书

2023-06-25

武磊感叹中日差距 日媒评价武磊|全球热消息

2023-06-25

每日观点:天津外国语大学2023年招生咨询方式汇总

2023-06-25

大戏看北京|6.26-30日文艺资讯

2023-06-25

英雄联盟手游主动装备有哪些 英雄联盟手游主动装备介绍

2023-06-25

cctv1中秋晚会节目表-cctv1中秋晚会-全球时快讯

2023-06-25

为中国式现代化提供坚实资源支撑——写在第三十三个全国土地日之际 世界今热点

2023-06-25

北京高考分数线公布:普通本科录取控制分数线448分 全球速递

2023-06-25

每日热讯!花呗临时额度二维码_花呗突然给你临时额度

2023-06-25

世界聚焦:探索丰盈美好生活,与星纪元STERRA ES一起夏日露营

2023-06-25

小米录音文件在哪个文件夹里面 小米录音文件在哪个文件夹

2023-06-25

已确认,网红大雁“大宝”突然死亡!公安介入 天天热讯

2023-06-25

我的端午 通讯

2023-06-25

成渝地区双城经济圈建设围绕“十项行动”推进“四重清单” 全球热资讯

2023-06-25

2023年“新一线城市”榜单发布,“昆明”替换“佛山”重回榜单

2023-06-25

打pp的男打女视频 打pp的故事男打女视频_全球热闻

2023-06-25

曝国家电网招聘严格,只要985,211学生,且要专业对口,非年年招_天天观点

2023-06-25

环球新消息丨山枝根(山枝根泡酒是什么作用)

2023-06-25

超级棒球明星2013闪退_超级棒球明星II

2023-06-25

俄罗斯总统普京与土耳其总统埃尔多安通电话

2023-06-24

大连足球史上今天:2012年中超阿尔滨连追2球!绝平申花(6月24日)

2023-06-24

惠州汽车站官网(惠州汽车站)

2023-06-24

河蚌吃啥(河蚌吃什么简介介绍)

2023-06-24

Copyright ©  2015-2022 南极频道网版权所有  备案号:粤ICP备2022077823号-13   联系邮箱: 317 493 128@qq.com