几十年来,企业已经在各种平台上开发了关键业务应用程序,包括物理服务器、虚拟机和云环境。 这些应用程序在各个行业中的一个共同点是,它们需要持续可用 (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的Serverless基准报告的数据(Daniel Oh,CC BY-SA 4.0)
资源使用率、响应时间和延迟在Serverless开发中至关重要。 公共云提供商提供的Serverless产品通常是按需计量的,仅当Serverless应用程序通过事件驱动的执行模型启动时才收费。 因此,当Serverless应用程序空闲或缩小为零时,企业无需支付任何费用。
Java与容器的状态
有了这个背景,您可能会问:“为什么 开发人员 不 尝试使用 Java 栈 进行Serverless应用程序开发,因为 现有的业务应用程序最有可能是在Java技术上开发的?”
这里有一个隐藏的真相:在新出现的不可变基础设施(也称为容器平台,例如 Kubernetes)中很难优化 Java 应用程序。

(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 条评论