为什么无服务器和Java合不来?

开源云中文社区
几十年来,企业已经在各种平台上开发了业务关键型应用程序,包括物理服务器、虚拟机和云环境。各个行业中的这些应用程序有一个共同点,那就是它们需要连续可用(24x7x365),以保证稳定性、可靠性和性能,而不管需求如何。

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

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

由于其有效性,无服务器开发模式现在成为希望按需启动业务应用程序而不是一直运行它们的企业的必需。

已经有许多开源项目来管理Kubernetes集群上的无服务器应用程序,这些应用程序通过虚拟机上的Linux容器包进行管理。CNCF的Interactive Serverless Landscape是一个开源项目、工具、框架和公共云平台的指南,使DevOps团队能够处理无服务器应用程序。

1.png

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

你可能想知道,什么编程语言和运行时最适合无服务器应用程序开发,以便与上图中的技术集成?这个问题的答案不止一个,让我们来讨论在企业生产环境中开发业务应用程序最流行的应用程序运行时:Java。

根据Developer Economics的数据,截至2020年第3季度,仍有800多万企业级开发人员使用Java来实现其业务需求。然而,根据NewRelic在2020年的一项调查,Java(6%)显然不是使用流行云服务的有远见的开发人员的首选。

2.png

关于无服务器运行时和语言的NewRelic数据

在无服务器开发中,资源使用、响应时间和延迟是至关重要的。公共云提供商提供的无服务器服务通常是按需计费的,只有在无服务器应用程序启动时,才会通过事件驱动的执行模型收费。因此,当无服务器应用程序处于空闲状态或缩减为零时,企业不需要支付任何费用。

Java在容器领域的状态

在这种背景下,你可能会问:“既然现有的业务应用程序很可能是基于Java技术开发的,那么开发人员为什么不尝试使用Java堆栈进行无服务器应用程序的开发呢?”

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

3.png

内存资源使用的差异

此图描述了Java进程与其他语言和框架(如Node.js和Go)之间在内存资源使用方面的差异。JavaHotSpot的占用空间最大,它包括为每个Java虚拟机(JVM)实例分配的堆内存。中间部分显示了Node.js上的每个进程与Java相比要小得多。最后,Go是云上流行的一种编译语言,因为它的内存消耗很低。

如你所见,在这张图上,从左到右,密度增加。这就是开发人员在云端、容器和Kubernetes上编写无服务器应用程序时回避Java(包括Spring Boot,一个微服务框架)的原因。

下一步是什么?

企业可以通过实现无服务器应用程序获得显著的好处,但是资源密度问题导致它们避免使用Java堆栈在Kubernetes上开发无服务器应用程序。但是选择一种不同的语言会给全球数以百万计的Java开发人员带来负担。因此,使用Java无服务器功能(而不是选择不同的语言)是一个折中。

原文链接:

https://opensource.com/article/21/5/what-serverless-java

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论