几十年来,企业已经在各种平台上开发了业务关键型应用程序,包括物理服务器、虚拟机和云环境。这些应用程序在各个行业中的一个共同点是,它们需要持续可用(24x7x365),以保证稳定性、可靠性和性能,而无需考虑需求。因此,即使实际资源利用率低于 50%,每个企业也必须承担维护基础设施(例如,CPU、内存、磁盘、网络等)的高昂成本。
Serverless 架构的开发是为了帮助解决这些问题。Serverless 允许开发人员按需构建和运行应用程序,保证高可用性,而无需在多云和混合云环境中管理服务器。在后台,serverless 拓扑中仍然有很多服务器,但它们从应用程序开发中抽象出来。相反,云提供商使用 serverless 服务进行资源管理,例如配置、维护、网络连接和扩展服务器实例。
由于其有效性,serverless 开发模型现在已成为希望按需启动其业务应用程序而不是一直运行它们的企业的要求。
许多开源项目已经被创建出来,用于在 Kubernetes 集群上通过 Linux 容器包管理虚拟机上的 serverless 应用程序。CNCF 的交互式 Serverless Landscape 是开源项目、工具、框架和公共云平台的指南,这些项目、工具、框架和公共云平台使 DevOps 团队能够处理 serverless 应用程序。

开发人员可以编写代码,然后快速将其部署到各种 serverless 环境中。然后,serverless 应用程序响应需求并根据需要自动向上和向下扩展。
您可能想知道哪种编程语言和运行时最适合 serverless 应用程序开发,以便与上图中的技术集成。这个问题没有唯一的答案,但让我们退后一步,讨论一下在企业生产环境中开发业务应用程序最流行的应用程序运行时:Java。
根据 Developer Economics 的数据,截至 2020 年第三季度,仍有超过 800 万企业开发人员使用 Java 来实现其业务需求。然而,根据 2020 年 NewRelic 调查,Java(占比 6%)显然不是使用流行云服务的前瞻性开发人员的首选。

来自 NewRelic 的 Serverless Benchmark Report 的数据(Daniel Oh,CC BY-SA 4.0)
资源使用率、响应时间和延迟在 serverless 开发中至关重要。公共云提供商的 serverless 产品通常按需计量,仅在 serverless 应用程序启动时通过事件驱动的执行模型收费。因此,当 serverless 应用程序空闲或缩减到零时,企业无需支付任何费用。
Java 与容器的状态
有了这个背景,您可能会问:“鉴于现有业务应用程序很可能是在 Java 技术上开发的,为什么 开发人员不尝试使用 Java 技术栈进行 serverless 应用程序开发呢?”
这就是隐藏的真相:在新immutable 基础设施中优化 Java 应用程序很困难,这种基础设施也称为容器平台(例如,Kubernetes)。

(Daniel Oh,CC BY-SA 4.0)
该图表描述了 Java 进程与竞争语言和框架(例如 Node.js 和 Go)之间内存资源使用率的差异。Java HotSpot 的占用空间最大,其中包括每个 Java 虚拟机 (JVM) 实例分配的堆内存。中间部分显示了 Node.js 上每个进程比 Java 小多少。最后,Go 是一种在云端流行的编译语言,因为它内存消耗低。
正如您所看到的,当您从该图表的左侧向右侧移动时,您会获得更高的密度。这就是开发人员在云、容器和 Kubernetes 上编写 serverless 应用程序时避开 Java(包括 Spring Boot,一个有主见的微服务 Java 框架)的原因。
下一步是什么?
企业可以通过实施 serverless 应用程序获得显著的好处,但资源密度问题导致他们避免使用 Java 技术栈在 Kubernetes 上开发 serverless 应用程序。但是,选择不同的语言会给全球数百万 Java 开发人员带来负担。因此,在本系列的下一篇文章中,我将指导您如何开始使用 Java serverless 函数,而不是选择不同的语言。
4 条评论