注意⚠️:本文只是我个人在了解十年间 Java 框架历史与技术演进过程中的小记,颇具主观。
自 2014 年 Spring Cloud 发布以来,Java 框架的生态系统持续发展并引入了许多新的技术和框架,以适应现代应用程序开发,特别是云原生、微服务、容器化等趋势。
在 2014 到 2024 年之间,Java 框架的演进表现为以下两个方面的创新和更新:
- 新兴的 Java 框架 (2014-2024)
- Spring 框架本身的演进 (2014-2024)
- GraalVM (2019)
- Java 框架的演进趋势总结 (2014-2024)
1. 新兴的 Java 框架 (2014-2024)
1. JHipster (2013)
JHipster 是一个生成器,用于生成 Spring Boot + Angular/React/Vue 前后端分离的应用程序。它帮助开发者快速构建一个完整的 Java 企业应用和前端应用架构,支持微服务架构、Spring Cloud、OAuth 2.0、JWT 和 Docker。
-
目标:通过自动化生成代码,JHipster 帮助开发者快速启动全栈应用,简化了开发和架构决策。
-
核心特点:
-
全栈生成:生成 Spring Boot 后端与 Angular/React/Vue 前端的完整代码。
-
微服务支持:支持基于 Spring Cloud 的微服务架构。
-
集成 Docker 和 Kubernetes:帮助开发者将应用容器化,并集成到现代的云平台。
https://github.com/jhipster/generator-jhipster
2. Vert.x - 异步框架(2014)
Vert.x 是一个多语言的、轻量级的异步框架,它不仅支持 Java,还支持 JavaScript、Groovy 等多种编程语言。尽管它早在 2014 年就发布了,但它在云原生、微服务和事件驱动架构的环境中受到了越来越多的关注。
https://github.com/eclipse-vertx/vert.x
Eclipse Vert.x™ Reactive applications on the JVM
https://vertx.io/
-
目标:Vert.x 旨在提供一个高性能、非阻塞的框架,能够处理大规模并发连接,特别适合构建实时应用。
-
核心特点:
-
非阻塞 I/O:Vert.x 使用非阻塞的事件循环模型处理 I/O 操作,因此能够处理数十万的并发连接。
-
多语言支持:除了 Java,Vert.x 还支持 JavaScript、Groovy、Ruby 等其他语言,适用于多语言开发的团队。
-
易于扩展:Vert.x 支持轻量级的微服务和事件驱动的架构,并且具有很强的横向扩展能力。
-
适用场景:
-
高并发、低延迟的系统。
-
微服务架构和事件驱动的应用。
-
实时聊天、实时通知等需要大规模并发连接的应用。
What’s new in Vert.x 5 - https://vertx.io/blog/whats-new-in-vert-x-5/
3. Jakarta EE - 继承 J2EE,拥抱现代化(2017)
https://en.wikipedia.org/wiki/Jakarta_EE
Jakarta EE 是 Java EE(J2EE)的继承者。2017 年,Java EE 被转交给了 Eclipse 基金会,并重新命名为 Jakarta EE。Jakarta EE 在保持企业级应用特性的同时,进行了多项改进,使其更适应现代开发需求。
-
目标:Jakarta EE 旨在继承 Java EE 的企业级特性,同时进行现代化改造,使其能够与微服务架构、容器化和云原生应用相兼容。
-
核心特点:
-
微服务支持:Jakarta EE 与 MicroProfile(轻量级微服务开发规范)紧密集成,适合构建云原生微服务应用。
-
云原生特性:Jakarta EE 引入了更轻量级的架构和更现代的 API,使得企业级应用能够更加灵活地部署在容器化和云环境中。
-
适用场景:
-
传统企业级应用的现代化迁移。
-
需要支持云原生和微服务架构的企业应用。
4. Helidon - 轻量级微服务框架(2018)
https://github.com/helidon-io/helidon
Helidon 是由 Oracle 发布的一个轻量级 Java 微服务框架,专注于快速、简洁地构建云原生的微服务。
-
目标:Helidon 旨在提供一个简洁、高效的方式来开发和部署微服务,尤其是容器化的云原生应用。
-
核心特点:
-
两种编程模型:Helidon 提供了两种编程模型,Helidon SE(轻量级、基于函数式编程的模型)和 Helidon MP(基于 Jakarta EE 和 MicroProfile 的模型)。
-
原生镜像支持:Helidon 支持 GraalVM 原生镜像,减少了启动时间和内存消耗。
-
内置微服务特性:Helidon 提供了服务发现、负载均衡、配置管理等内建的微服务支持。
-
适用场景:
-
云原生微服务和容器化应用。
-
希望通过简单、灵活的框架快速构建微服务的开发者。
5. Quarkus - 云原生 Java 框架(2019)
Quarkus 是由 Red Hat 开发的一个新兴框架,专为 云原生 和 容器化 开发而设计,特别适用于 Kubernetes 和 OpenShift 环境。它在 2019 年发布,并逐渐成为 Java 开发中的一颗新星。
https://github.com/quarkusio/quarkus
-
目标:Quarkus 旨在为开发者提供一个轻量级、快速启动和高性能的框架,适应云原生、微服务和无服务器架构的需求。
-
核心特点:
-
极快的启动时间和低内存占用:Quarkus 是为了现代云原生应用而设计,特别注重低内存占用和快速启动,这使得它特别适合容器化和 Kubernetes 环境。
-
支持 GraalVM:Quarkus 与 GraalVM 紧密集成,支持原生镜像构建,使得 Java 应用可以编译成原生代码,进一步提升启动速度和内存效率。
-
开发者友好:Quarkus 提供了“开发模式”,支持热重载(hot-reload)和实时反馈,极大地提升了开发效率。
-
集成支持:Quarkus 提供了与很多流行的框架和库(如 Hibernate、Camel、Kafka、ActiveMQ、Redis)无缝集成,支持 Reactive 编程模型和微服务架构。
-
适用场景:
-
云原生应用和容器化微服务。
-
无服务器架构和功能快速启动的场景。
-
希望优化 Java 应用启动时间和内存占用的场景。
2. Spring 框架本身的演进
Spring 框架在过去十年中的演进反映了对现代开发趋势的响应,尤其是在微服务、云原生和容器化时代。Spring 本身经历了几个重要的演变:
1. Spring Boot(2013年)
-
Spring Boot 的推出简化了 Spring 应用的构建,自动化配置和约定大于配置的理念大大提升了开发效率。
-
它将 Spring 开发变得更加简洁,支持嵌入式应用服务器(如 Tomcat、Jetty),避免了开发者配置外部服务器的麻烦。
-
Spring Boot Actuator 提供了生产环境所需的监控、日志等功能。
2. Spring Cloud(2014年)
-
Spring Cloud 旨在为开发微服务应用提供一整套解决方案,解决了分布式系统中面临的一些复杂问题(如服务注册与发现、负载均衡、断路器、配置管理等)。
-
它成为构建云原生应用和微服务架构的标配框架,并支持与容器化平台(如 Docker 和 Kubernetes)的深度集成。
3. Spring WebFlux(2016年)
-
Spring WebFlux 是 Spring 5 中引入的响应式编程模块,支持异步和非阻塞的编程模型,使用 Reactive Streams。
-
该模块专为构建 高并发、低延迟 的 Web 应用设计,适合需要处理大量并发连接的场景。
4. Spring Native(2020年)
# Native Images with Spring Boot and GraalVM
-
Spring Native 是一个帮助将 Spring 应用编译为 GraalVM 原生镜像的项目。它旨在提高应用的启动速度和减少内存占用,支持现代云原生应用的需求。
-
它的推出使得 Spring 应用能够更好地与 容器化 和 微服务架构 环境兼容,进一步推动了 Spring 的现代化。
5. Spring 6 和 Spring Boot 3(2022年)
- Spring 6 和 Spring Boot 3 是 Spring 生态的重大版本更新,它们标志着 Spring 框架全面进入 JDK 17+ 时代。
# Spring Boot 3 and Spring Framework 6.0 – What’s New
- 主要改进包括对 Jakarta EE 9 的迁移、引入对 GraalVM Native Image 的更好支持、以及与现代编程模型(如 Java 17 的新特性)更紧密的集成。
3. GraalVM (2019)
GraalVM 是一个多语言虚拟机,可以执行 Java、JavaScript、Python、Ruby、R 和 WebAssembly 等多种语言。GraalVM 提供了一种新方式,允许 Java 应用编译为原生镜像(native images),从而极大提升启动速度和降低内存占用。
# Build Java Modules into a Native Executable
https://github.com/oracle/graal
-
目标:通过 GraalVM,Java 开发者可以将应用程序编译成本地代码,获得更快的启动时间和更低的内存消耗,尤其适合容器化和无服务器架构。
-
核心特点:
-
原生镜像:GraalVM 可以将 Java 应用程序编译为原生镜像,这使得启动时间和内存占用大幅降低。
-
多语言支持:GraalVM 支持多语言,并且具有跨语言调用的能力,极大地增强了 Java 与其他语言(如 JavaScript、Python)的互操作性。
-
性能优化:通过 JIT(即时编译)和 AOT( Ahead-Of-Time)编译,GraalVM 提供了更高效的执行性能。
-
适用场景:需要高性能、快速启动和低内存占用的 Java 应用,特别是在容器化和无服务器架构中非常有用。
4. Java 框架的演进趋势总结 (2014-2024)
在过去十年,Java 框架的演进呈现出以下几个显著趋势:
1. 云原生与容器化
-
随着 Kubernetes 和 Docker 的普及,Java 框架加大了对 容器化 和 云原生架构 的支持。框架如 Quarkus 优化了内存使用和启动时间,使 Java 应用更适合容器化和云环境。Java 框架不断向云原生、微服务和容器化环境转型。
-
Spring Boot 3 和 Helidon 也加强了对云原生开发的支持,支持多云平台、微服务以及无服务器架构。
2. 轻量级框架与微服务架构
-
微服务架构的流行推动了许多轻量级框架(如 Helidon、Quarkus)的崛起,这些框架提供了快速启动和低内存占用的特性,非常适合微服务开发。
-
这些框架通过自动化配置、依赖注入和原生镜像支持,帮助开发者构建高效、灵活的微服务系统。
3. 响应式编程与高并发
- 随着对高吞吐量和低延迟的需求增大,响应式编程逐渐成为主流。Spring WebFlux 和 Vert.x 等框架提供了响应式编程模型,特别适用于处理大量并发请求和实时数据流。
4. 多语言与跨平台
- GraalVM 的出现打破了传统 Java 的局限,支持多语言的执行,使 Java 应用能够与其他语言(如 JavaScript、Python)进行无缝交互。它使得 Java 可以更灵活地融入现代多语言开发的环境中。GraalVM 和原生镜像的支持使得 Java 应用能够更好地适应现代云原生架构。
写于:2024年12月14日 周六