Java 上的无服务器架构:为何它并不可怕,甚至更有利?
\n\n当听到“无服务器”时,第一反应往往是 Node.js 或 Python。Java 看起来像个“启动慢”、“内存占用高”的庞然大物。但让我们面对现实:Java 仍然是企业级标准,而现代的无服务器架构不仅仅是“运行一个函数然后忘记它”。它是一种架构,如果运用得当,可以为你节省大量资金和精力。
\n\n在本文中,我们将以 AWS Lambda 为例,探讨如何编写 Java 无服务器函数,并介绍替代方案:Google Cloud Functions、Azure Functions 和 Vercel 平台。您将了解 Java 开发者在无服务器世界中会遇到哪些陷阱,以及如何规避它们。我们开始吧!
\n\n什么是无服务器架构,为什么选择 Java?
\n\n无服务器架构(或 FaaS——函数即服务) 是一种云计算模型,您编写代码并将其上传到云端,由云服务商自行决定何时以及如何运行它。您只需为实际执行时间和请求次数付费。无需管理服务器,无需管理基础设施。
\n\n为什么选择 Java?原因如下:
\n- \n
- 稳定性和成熟度。 Java 凭借其强类型系统和久经考验的库,非常适合企业级任务。 \n
- 性能。 现代 JVM(尤其是 GraalVM)可以将冷启动时间缩短到毫秒级。 \n
- 生态系统。 Spring Boot、Micronaut、Quarkus——所有这些都已适配无服务器架构。 \n
但有一个问题:Java 的“冷启动”可能比 Python 或 Go 更长。不过,使用正确的工具可以解决这个问题。
\n\nAWS Lambda:Java 无服务器市场的主要参与者
\n\nAWS Lambda 可以说是最流行的无服务器函数服务。它原生支持 Java,并提供两种路径:经典的 Java 8/11/17 和 SnapStart(一种使冷启动几乎不可见的技术)。
\n\n编写第一个 Java Lambda 函数
\n\n让我们创建一个简单的函数,通过 Amazon API Gateway 处理 HTTP 请求。为此,我们需要一个 Maven 项目和几个依赖项。
\n\n步骤 1. 创建一个包含以下 pom.xml 的 Maven 项目:
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://maven.apache.org/POM/4.0.0\n http://maven.apache.org/xsd/maven-4.0.0.xsd">\n <modelVersion>4.0.0</modelVersion>\n\n <groupId>com.pythonlib</groupId>\n <artifactId>serverless-java</artifactId>\n <version>1.0-SNAPSHOT</version>\n\n <dependencies>\n <dependency>\n <groupId>com.amazonaws</groupId>\n <artifactId>aws-lambda-java-core</artifactId>\n <version>1.2.2</version>\n </dependency>\n <dependency>\n <groupId>com.amazonaws</groupId>\n <artifactId>aws-lambda-java-events</artifactId>\n <version>3.11.3</version>\n </dependency>\n </dependencies>\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-shade-plugin</artifactId>\n <version>3.2.4</version>\n <executions>\n <execution>\n <phase>package</phase>\n <goals><goal>shade</goal></goals>\n </execution>\n </execution