什么是 Java 的 Serverless?

Java 仍然是开发企业应用程序最流行的语言之一。那么,为什么 serverless 开发者避开它呢?
99 位读者喜欢这篇文章。
What is your favorite open source Java IDE?

Pixabay。CC0。

几十年来,企业已经在各种平台上开发了关键业务应用程序,包括物理服务器、虚拟机和云环境。这些应用程序在各个行业中的一个共同点是,它们需要持续可用(24x7x365),以保证稳定性、可靠性和性能,而无需考虑需求。因此,每个企业都必须承担维护基础设施的高昂成本(例如,CPU、内存、磁盘、网络等),即使实际资源利用率低于 50%。

Serverless 架构的开发是为了帮助解决这些问题。Serverless 允许开发者按需构建和运行应用程序,保证高可用性,而无需在多云和混合云环境中管理服务器。在幕后,serverless 拓扑结构中仍然有很多服务器,但它们对应用程序开发是抽象的。相反,云提供商使用 serverless 服务进行资源管理,例如配置、维护、网络和扩展服务器实例。

由于其有效性,serverless 开发模型现在已成为希望按需启动业务应用程序而不是始终运行它们的企业的要求。

已经创建了许多开源项目,用于在 Kubernetes 集群上通过虚拟机上的 Linux 容器包来管理 serverless 应用程序。CNCF 的交互式 Serverless 全景图是开源项目、工具、框架和公共云平台的指南,这些项目、工具、框架和公共云平台使 DevOps 团队能够处理 serverless 应用程序。

开发者可以编写代码,然后将其快速部署到各种 serverless 环境中。然后,serverless 应用程序响应需求,并根据需要自动向上和向下扩展。

您可能想知道哪种编程语言和运行时最适合 serverless 应用程序开发,以便与上图中的技术集成。这个问题没有唯一的答案,但让我们退后一步,讨论一下在企业生产环境中开发业务应用程序最流行的应用程序运行时:Java。

根据 Developer Economics 的数据,截至 2020 年第三季度,仍有超过 800 万企业开发者使用 Java 来实现其业务需求。然而,根据 2020 年 NewRelic 调查,Java(占 6%)显然不是使用流行云服务的前瞻性开发者的首选。

NewRelic data on serverless runtimes and languages

来自 NewRelic 的 Serverless Benchmark Report 的数据 (Daniel Oh, CC BY-SA 4.0)

资源使用率、响应时间和延迟在 serverless 开发中至关重要。公共云提供商的 Serverless 产品通常按需计量,仅当 serverless 应用程序启动时才收费,通过事件驱动的执行模型。因此,当 serverless 应用程序空闲或缩减为零时,企业无需支付任何费用。

Java 与容器的状态

有了这个背景,您可能会问:“为什么 开发者 不尝试使用 Java 技术栈 进行 serverless 应用程序开发呢? 考虑到 现有的业务应用程序很可能是在 Java 技术上开发的?

这里有一个隐藏的真相:在新兴的不可变基础设施(也称为容器平台,例如 Kubernetes)中,很难优化 Java 应用程序。

此图描绘了 Java 进程与竞争语言和框架(例如 Node.jsGo)之间内存资源使用率的差异。Java HotSpot 具有最大的占用空间,其中包括每个 Java 虚拟机 (JVM) 实例分配的堆内存。中间部分显示了 Node.js 上每个进程比 Java 小多少。最后,Go 是一种在云端流行的编译语言,因为它具有低内存消耗。

正如您所见,您在此图上从左到右移动时,密度会更高。这就是开发者在云、容器和 Kubernetes 上编写 serverless 应用程序时避开 Java(包括 Spring Boot,一个固执己见的微服务 Java 框架)的原因。

下一步是什么?

企业可以通过实施 serverless 应用程序获得显著的优势,但资源密度问题导致他们避免使用 Java 技术栈在 Kubernetes 上开发 serverless 应用程序。但是,选择不同的语言会给全球数百万 Java 开发者带来负担。因此,在本系列的下一篇文章中,我将指导您如何开始使用 Java serverless 函数,而不是选择不同的语言。

接下来阅读什么
danieloh
技术营销, 开发者布道师, CNCF 大使, 公开演讲者, 已出版作者, Quarkus, Red Hat Runtimes

4 条评论

Daniel,这是一个非常有用的开端!感谢您承担这项工作,并以如此清晰的方式解释了重要的“为什么会这样”的背景。

谢谢 Chris!这是一个 Java serverless 函数博客系列文章。请继续关注。下一篇博客即将发布 :)

回复 作者 clhermansen

好文章,谢谢你 Daniel。请问,提到的“下一篇”文章会是哪一篇?

© . All rights reserved.