所有公司都是软件公司,企业将始终面临保持用户和应用程序之间集成可扩展、高效、快速和高质量的挑战。为了解决这个问题,云、微服务和其他现代解决方案越来越多地出现在架构决策中。
问题是,Java 是否准备好在企业环境中处理这些不同的概念?
是的,为了展示Jakarta EE和Eclipse MicroProfile如何在云端完美运行,Payara 和 Platform.sh 合作举办了这次网络研讨会。您可以在下面观看 Otavio Santana 和 Rudy de Busscher 的视频演示:
软件无处不在。无论你看向何处,都有软件在运行。在人类历史上,我们看到机器/软件的数量随着时间的推移而增加,从一群人共享的一台机器,到一个人使用数千个软件程序。现在,我们可以看到软件与其他软件交互,例如当你购买机票时:一个系统发送电子邮件,另一个系统阅读它并在你的日历中触发一个事件。这种新方法为每个人打开了更多的商业视角和机会,包括机器学习。毫无疑问,天网即将到来。
敏捷宣言
增加的不仅仅是软件的数量,程序本身的交互数量也增加了。更多的用户、更多的需求、更多的反馈。等待数年才发布产品是没有意义的,上市时间和用户反馈对于推动产品朝着正确的方向发展至关重要。这就是为什么在 2001 年,一小群人厌倦了管理软件开发项目的传统方法,设计了敏捷宣言,从而催生了敏捷方法。敏捷是一种帮助团队对他们收到的项目反馈做出快速且不可预测的响应的过程。它创造了在开发周期内评估项目方向的机会。组织在称为冲刺或迭代的定期会议中评估项目。
从更技术的角度看,与敏捷开发相一致的领域驱动设计 (DDD) 方法用于开发满足复杂需求的软件,将实现与核心业务概念的不断发展的模型紧密联系起来。诸如通用语言之类的技术用于使代码更接近业务,减少开发人员和用户之间的障碍,因此,与敏捷开发相比,交互更多。
越来越多的公司认识到,所有公司都是软件公司。由于严重依赖软件,公司经常需要聘请软件开发人员。于是,如何处理几个人只负责一个项目的问题就出现了。为了解决这个现代问题,我们可以看看古罗马的军事战略:分而治之。是的,把一个高度复杂的问题分成小块,把团队分成小组,把单片项目分成更小的项目。微服务架构风格是一种将单个应用程序开发成一套小型服务的方法,这样,例如,电子商务公司就不必只使用一个代码库和一个实现,而是可以将团队/代码分为财务、产品库存、营销等。有一点需要指出,DDD 上下文仍然存在。事实上,它与基于一些有界概念创建有用服务的方法一起工作;我们不是要抛弃或贬低这个概念,而是要将其聚合到微服务中。
微服务
微服务除了使团队更加敏捷之外,还带来了许多优势,例如独立扩展和发布离散服务。然而,它在运营方面带来了更多曲折。如果不投入生产,最终代码是不够的。因此,运营必须跟随开发团队每天发布系统需要部署的内容。原因如下:DevOps 是一套软件开发实践,它将软件开发 (Dev) 和信息技术运营 (Ops) 结合起来,以缩短系统开发生命周期,同时根据业务目标频繁提供功能、修复和更新。
随着开发和运营团队的整合以及 DevOps 方法的协同工作,我们已准备好处理软件和运营。但是硬件怎么办?整合团队意味着设备不存在。当团队需要更多计算机能力时会发生什么?有人去购买新服务器是否合理?它不够快。在全球市场中,在毫秒之争中争取更少的响应时间,更靠近客户端的服务器意味着更少的吞吐时间,但是我们如何在几个大洲购买/保留服务器?
云计算
云计算是指按需提供计算机系统资源,尤其是数据存储和计算能力,无需用户直接主动管理,云计算意味着:我们不必关心硬件本身。这些服务大致分为三类:基础设施即服务 (IaaS)、平台即服务 (PaaS) 和软件即服务 (SaaS)。
这些类别为市场带来了新的商业理念。此外,每项服务都带来了新的便利,主要是快速送货。
总之...
IaaS 的优势:
• 无需投资自己的硬件
• 基础设施可按需扩展以支持动态工作负载
PaaS 的优势:
• 开发应用程序并更快地将产品推向市场
• 使用中间件即服务降低复杂性
SaaS 的优势:
• 任何联网的计算机都可以访问应用程序和数据。
• 即使笔记本电脑坏了,数据也不会丢失,因为信息存储在云端。
软件项目以快速交付为最佳战略方法。快速发布可带来多种好处,例如接收反馈、修复错误,以及主要根据用户需求推动产品朝着正确的方向发展。
这就是为什么敏捷、微服务、DevOps 或云等多种方法/技术诞生的原因。如今,很难想象要等一年才发布一个项目,因为可能会错过正确的时机。Java 社区已决定每六个月发布一次,Jakarta EE 也在寻求同样的道路。
云原生
云计算带来了许多方法和技术,彻底改变了商业和技术世界。其中出现的术语之一是云原生。为了满足和涵盖 Java 世界中的这些期望,Jakarta EE 应运而生。
与任何新概念一样,有多个同名概念;如果你阅读有关云原生的书籍或文章,可能找不到关于它的共识。例如:
“云原生是一种构建和运行应用程序的方法,它利用了云计算模型的优势。” ——来自 Pivotal
“云原生是一种关于软件系统的不同思考和推理方式。它体现了以下概念:由一次性基础设施提供支持、由有界组成、全球扩展、采用一次性架构。” —构建云原生应用程序:为云设计高性能且经济高效的应用程序。
“一般来说,‘云原生’是一种利用云计算交付模型优势构建和运行应用程序的方法。‘云原生’是指应用程序的创建和部署方式,而不是部署地点。” — InfoWorld
根据几篇文章的定义,我们可以说云原生是一个用于描述基于容器的环境的术语。因此,云原生与特定的编程语言或框架甚至云提供商公司无关,而是与容器有关。