在 Kubernetes 中优化 Java 的 Serverless 功能

在 Kubernetes 中优化 Java 的 Serverless 功能

作者:黄平安 翻译 2023-04-25 08:01:23

开发

前端

云原生 本文介绍了如何优化 Java 性能以使用 Quarkus 在 Kubernetes 上运行 Serverless 功能。

实现更快的启动和更小的内存占用,以在 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 通过 Java serverless 功能项目构建本机可执行文件。

一、创建 Quarkus serverless Maven 项目

这个命令会生成一个 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 发行版优化 Java serverless功能,将它们作为无服务器功能部署在 Knative 和 Kubernetes 上。 Quarkus 使用普通微服务中的简单配置来实现这种性能优化。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/251280.html<

(0)
管理的头像管理
上一篇2025-04-28 21:53
下一篇 2025-04-28 21:54

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注