Java 无服务器函数入门

网站建设5年前发布
101 0 0

20230306010656b94431d844fa58eb264192c8ed32b567ef244d492,对 ​​无服务器 Java​​ 的研究始于函数 —— 就是按需求运行的一小段代码。这一阶段并没有持续很长时间。虽然在 1.0 阶段,基于虚拟机架构的函数使这种范式变得很流行,但它仍然有局限性,例如执行时间、协议和糟糕的本地开发体验,都不太理想,如下图所示。,开发者随后意识到,可以把同样的无服务器特性应用于微服务和 Linux 容器,带来的好处也是一样的。由此进入 1.5 阶段,在这个阶段,一些无服务器容器完全抽象化了 ​​Kubernetes​​,通过 ​​Knative​​ 或其它位于它之上的抽象层来提供无服务器的体验。,在 2.0 阶段,无服务器开始处理更复杂的编排和集成模式,并结合某些层级的状态管理。更重要的是,开发者关注的是能否在旧的系统中使用熟悉的 Java 应用程序运行时来组合运行无服务器和非无服务器的工作负载。,202303060107101780049132d7a9d977d864d16624d1f88a88af178,The serverless Java journey,Java 开发者开始进行无服务器函数开发之前,第一步是要选择一种新的云原生 Java 框架,从而能够以快于传统单体应用程序的速度和较小的内存占用运行 Java 函数。这在各种基础设施环境中,包括物理服务器、虚拟机、多云或混合云环境中的容器,都是适用的。,开发者也有可能固执地选择 Spring 框架中的 ​​Spring 云函数​​ 来进行命令式和反应式函数的开发。Spring 也支持将 Java 函数部署到可安装的无服务器平台,比如 ​​Kubeless​​、​​Apache OpenWhisk​​、​​Fission​​ 和 ​​Project Riff​​。然而,人们担心 Spring 的启动慢、响应时间长以及内存占用大的问题。在诸如 Kubernetes 这种可扩展的容器环境中运行 Java 函数,这些问题可能会更严重。,​​Quarkus​​ 是一个新推出的开源云原生 Java 框架,它有助于解决这些问题。它的作用是设计无服务器应用程序,以及编写运行于云基础设施(例如 Kubernetes)的云原生微服务。,Quarkus 重新审视了 Java,它使用了封闭的方法构建和运行 Java 程序。它把 Java 转变为一种可与 Go 相媲美的运行时。Quarkus 也包含 100 多种扩展功能,集成了企业级能力,例如数据库访问、无服务器集成、消息、安全、可观察性和业务自动化。,这里有一个简单例子,展现如何使用 Quarkus 创建一个 Java 无服务器项目的框架。,安装一个本地 Kubernetes 集群,开发者有多种选择,包括 ​​Minikube​​ 和 ​​OKD​​。因为使用 OKD 在 Knative 和 DevOps 工具上安装无服务器相关功能较方便,本文使用 OKD 安装集群。这些关于 ​​OKD 安装​​ 和 ​​Knative 操作员安装​​ 的相关指南中提供了更多的设置资料。,下面的命令创建了一个 Quarkus 项目(例如 ​​quarkus-serverless-restapi​​),对外暴露一个简单的 REST API,并下载 ​​quarkus-openshift​​ 扩展,用于 Knative 服务的部署:,使用 Quarkus 开发模式运行程序,检查 REST API 是否有效,稍稍调整一下代码:,输出如下内容:,现在,你可以使用一个 ​​curl​​ 命令快速访问 REST API。输出结果应当是 ​​Hello RESTEasy​​:,在 ​​GreetingResource.java​​ 中修改返回值:,再次访问 REST API,输出信息也会相应更新:,普通的微服务跟无服务器函数之间的差别并不大。使用 Quarkus 的好处在于:开发者可以使用任何微服务,将 Kubernetes 部署为无服务器函数。,如果你还没有创建命名空间,就在你的 OKD 集群上 ​​创建命名空间​​(例如 ​​quarkus-serverless-restapi​​),用来部署 Java 无服务器函数。,Quarkus 令开发者可以通过在 ​​src/main/resources/application.properties​​ 中添加以下变量,创建 Knative 和 Kubernetes 资源:,说明:,执行以下命令,构建应用程序,并直接部署到 OKD 集群:,输出结果应该以 ​​BUILD SUCCESS​​ 结束。,在对于 Knative 服务执行的 ​​oc​​ 命令中,加上标签:,然后访问 OKD 网页控制台,就能进入 ​​开发人员透视图中的拓扑视图​​。你可能会看到你的容器荚Pod(无服务器函数)已经缩小为零(白线圈)。,20230306010657a5ae0f2497c0c06f8f00923f832136875efc84135,Topology view,运行如下 ​​oc​​ 命令,搜索含有无服务器函数的路由:,使用 ​​curl​​ 命令访问搜索到的路由:,过几秒钟,你可以得到跟在本地相同的结果:,当你回到 OKD 集群内的拓扑图,Knative 服务会自动扩展。,2023030601065742fb1d4018226e5f23f328ca51578f7bf41f5c135,Scaling the Knative Function,由于 Knative 服务的默认设置,其 pod 在 30 秒后会再次下降至零。,无服务器不断地在演变,始于运行于虚拟机的函数,到后来的无服务器容器,并与企业原有系统集成。在此过程中,企业开发者借助 Quarkus,仍然可以使用自己熟悉的技术(比如 Java)创建一个项目,然后构建并部署到 Kubernetes。,本系列的下一篇文章将指导你优化 Kubernetes 中的 Java 无服务器函数,从而令程序启动更快,内存占用更小。

© 版权声明

相关文章