https://linux.cn/article-15111-1.html?utm_source=rss&utm_medium=rss

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eb783397-2d1e-4237-904d-24ce4b9329d2/154731xejvfcai8e0auimh.jpg

Quarkus 令你可以使用类似 Java 的技术开发无服务器的工作负载。

无服务器 Java 的研究始于函数 —— 就是按需求运行的一小段代码。这一阶段并没有持续很长时间。虽然在 1.0 阶段,基于虚拟机架构的函数使这种范式变得很流行,但它仍然有局限性,例如执行时间、协议和糟糕的本地开发体验,都不太理想,如下图所示。

开发者随后意识到,可以把同样的无服务器特性应用于微服务和 Linux 容器,带来的好处也是一样的。由此进入 1.5 阶段,在这个阶段,一些无服务器容器完全抽象化了 Kubernetes,通过 Knative 或其它位于它之上的抽象层来提供无服务器的体验。

在 2.0 阶段,无服务器开始处理更复杂的编排和集成模式,并结合某些层级的状态管理。更重要的是,开发者关注的是能否在旧的系统中使用熟悉的 Java 应用程序运行时来组合运行无服务器和非无服务器的工作负载。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a685e730-84a9-44ef-9285-c955f7ad6884/154735b3ijlvyoti4saapv.png

Java 开发者开始进行无服务器函数开发之前,第一步是要选择一种新的云原生 Java 框架,从而能够以快于传统单体应用程序的速度和较小的内存占用运行 Java 函数。这在各种基础设施环境中,包括物理服务器、虚拟机、多云或混合云环境中的容器,都是适用的。

开发者也有可能固执地选择 Spring 框架中的 Spring 云函数 来进行命令式和反应式函数的开发。Spring 也支持将 Java 函数部署到可安装的无服务器平台,比如 KubelessApache OpenWhiskFissionProject Riff。然而,人们担心 Spring 的启动慢、响应时间长以及内存占用大的问题。在诸如 Kubernetes 这种可扩展的容器环境中运行 Java 函数,这些问题可能会更严重。

Quarkus 是一个新推出的开源云原生 Java 框架,它有助于解决这些问题。它的作用是设计无服务器应用程序,以及编写运行于云基础设施(例如 Kubernetes)的云原生微服务。

Quarkus 重新审视了 Java,它使用了封闭的方法构建和运行 Java 程序。它把 Java 转变为一种可与 Go 相媲美的运行时。Quarkus 也包含 100 多种扩展功能,集成了企业级能力,例如数据库访问、无服务器集成、消息、安全、可观察性和业务自动化。

这里有一个简单例子,展现如何使用 Quarkus 创建一个 Java 无服务器项目的框架。

1、基于 Maven 创建一个 Quarkus 无服务器项目

安装一个本地 Kubernetes 集群,开发者有多种选择,包括 MinikubeOKD。因为使用 OKD 在 Knative 和 DevOps 工具上安装无服务器相关功能较方便,本文使用 OKD 安装集群。这些关于 OKD 安装Knative 操作员安装 的相关指南中提供了更多的设置资料。

下面的命令创建了一个 Quarkus 项目(例如 quarkus-serverless-restapi),对外暴露一个简单的 REST API,并下载 quarkus-openshift 扩展,用于 Knative 服务的部署:

$ mvn io.quarkus:quarkus-maven-plugin:1.13.4.Final:create \\
       -DprojectGroupId=org.acme \\
       -DprojectArtifactId=quarkus-serverless-restapi \\
       -Dextensions="openshift" \\
       -DclassName="org.acme.getting.started.GreetingResource"

2、在本地运行无服务器功能

使用 Quarkus 开发模式运行程序,检查 REST API 是否有效,稍稍调整一下代码:

$ ./mvnw quarkus:dev