【译】Spring 的 2020 总结
共 3831字,需浏览 8分钟
·
2021-01-06 21:17
嗨,spring 的粉丝们
Spring 团队重新回归 VMware 虽然最早的时候(2013) Spring 团队是从 VMware 分离出来组件的 Pivotal 公司,VMware 在 2020 年完成全资收购了 Pivotal。 超过 40000 人参与 SpringOne 受全球疫情影响,今年的 SpringOne 2020 大会改由线上会议,有超过 40000 来自于不同国家、不同宗教、不同行业的人员参与。
Kubernetes
或许你听过听 VMware Tanzu ? (当然是目前 Spring 团队是 Tanzu 的一部分)您是否还知道 Kubernetes 的三个创始人中有两个也是 Tanzu 的成员 ? 您是否知道 VMware 还是 Kubernetes 的第三大贡献者?
Tanzu Kubernetes Grid 是非常优秀的 Kubernetes 发行版。Harbor 是一个企业级 Registry 服务器。Tanzu Mission Control 提供跨云的多集群 Kubernetes 管理。VMware 也是 Carvell 的重要贡献者之一,它提供了一组可靠的、单一用途的、可组合的工具,帮助您构建应用程序、配置和部署到 Kubernetes。Tanzu Build Service 它可自动化了企业规模的容器创建、管理和治理。Spring 甚至对 Cloud Foundry(平台即服务产品)进行了改造,以便在 Kubernetes 之上工作。开发者可以丝滑的接入到 Kubernetes 容器编排。
近年来,Java 和 Spring 在容器化云基础架构(如 Kubernetes)中已经做出许多改进和适配。
今年,Spring Boot 通过 CNCF Paketo buildpacks 项目引入了对 buildpacks 的内置支持。大家在使用 Spring Boot 2.3 或更高版本的 SpringBoot 项目时候,试试这个:mvn spring-boot:build-image(也同样支持 Gradle),大约一分钟后您将获得一个容器化的应用程序。然后,您可以使用 docker tag 和 docker push 将应用程序推送到配置的 Kubernetes 集群,支持任何的 OCI/Docker 镜像。 Spring Boot(2.4.x)现在可以从 Config trees 读取配置。Config tree 是将 Kubernetes ConfigMap 装载为 Kubernetes volume 时获取的配置目录 。它是另一种配置源,和 classpath 配置, 环境变量, 文件 等类似。 Spring Boot 的 Actuator 模块可以公开端点,作为 Kubernetes 的 liveness 和 readiness 探测器。readiness 端点告诉 Kubernetes 一个刚刚启动的服务是否已准备好进行提供服务。liveness 端点告诉 Kubernetes 服务是否还活着。 然后应用程序面临的问题是:Kubernetes 是应该立即销毁应用程序,还是应该等待一个配置好的时间间隔以完成正在运行的事务?这种行为在 Kubernetes 中是可配置的。**Spring Boot 支持使用一个新的特性(优雅关机)**来执行正在进行的事务并拒绝任何新的请求。
Spring Boot 及其周边的生态系统(包括 Spring Cloud Kubernetes)构建专为云原生 Kubernetes 环境设计的微服务解决方案,正在逐步完善,所以请持续关注!
Reactive 响应式编程
Reactive 编程是一种新的编程范例,具有三个优点:资源效率、数据 API 的一致性和可组合性、健壮性。它提供了更好的资源效率,因为编写代码可以很好地释放空闲线程以供重用。它提供了一致性,因为它为我们提供了一种抽象,一种思考不同数据流的方法。有数据作为 Java 8 Stream传入吗?一个 Collection?CompletableFuture?一个值还是一个数组?没问题。Reactive 为我们提供了一种统一调用这些 API 来描述数据流管道的方法。 学习 Reactive 编程难度较大。尽管如此,在整个生态系统中的应用进行封装和处理后,将能够忘记很多其他抽象和 API。自 2011 年以来,Spring 生态系统在积极适配 Reactive 编程,但真正的变化出现在 2017 年 Spring Framework 5 中引入了 Reactive 支持。此后 Reactive 已渗透到 Spring 生态系统的各个方面。 目前可以开箱即用的支持 Reactive 的组件有: 事务、SQL 数据访问、消息传递集成、负载均衡器,重试,限流、API 网关、NoSQL 数据访问、HTTP、WebSocket、RPC、指标、分布式链路跟踪、可靠性监控
异步即未来,Spring 将与您一起站在最前沿。Spring 布道师 Josh Long 新书《Reactive Spring》推荐大家阅读。
Native Images with GraalVM
GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务,更快的启动速度、更小的内存消耗、更短的服务响应。但目前一旦编译为 Native Images,运行时将无法执行 JVM 所期望的一些功能。要将类加载到类加载器中吗?使用 CGlib 代理?在类进行反射吗?从加载资源(例如 banner.txt 文件)从类加载器?所有这些都将在 GraalVM AOT 编译中失效了。 Spring GraalVM 项目目标来解决 AOT 带来的问题。它支持识别 Spring 应用程序所需要的操作,并提供了注册任何需要配置的操作。这个项目正在飞速发展,其目标是到Spring Boot 3 和 Spring Framework 6 内置达到开箱即用。
RSocket
RSocket 是一个二进制协议,使微服务之间消息交换变得轻而易举。它具体化了网络的反应流概念,支持线上的背压。在 Spring Framework 和 Spring Boot 本身中已内置支持,此外还支持 Spring Security 和 Spring Batch。 RSocket 是由 VMware、阿里巴巴、Facebook 和 Lightbend 向 Reactive Foundation 组织共同捐赠的第一个项目,有着比 HTPP2 、GRPC 更好的通信和交互能力。Spring 团队正在使用的新RSocket broker替代 Netflix Eureka 等服务注册中心以及 RabbitMQ 之类的消息总线。RSocket JVM 客户端使用 Reactor,默认支持:简单的重试、错误处理、背压等等。 Facebook 和阿里巴巴已经在大规模使用它,通过 Spring 封装和整合使它更加容易使用。在接下来的几周,几个月甚至几年内基于 RSocket 进行构建服务将越来越流行。
Java and Kotlin
在最新的 Spring 版本中与 Java 和 Kotlin 最新版本进行了深度集成。Spring Boot 每六个月发布一次,与 Java 发布节奏非常一致。来看一下 Java15 中开箱即用的功能!多行文本字符串和 var 关键字等。Java 的新版本非常优秀,这些新的特性使 Java 更快、更健壮、更容器友好、更安全等等。 使用最新的 MacBook Pro(Apple Silicon M1),并且使用支持 ARM 芯片的 Microsoft OpenJDK 的配置,使得大多数应用程序在 0.8 秒左右启动完成!记住,M1 芯片是几个月前发布的!Microsoft/Azul Systems 目前已经有来兼容 M1 的 OpenJDK,这证明了 Java 生态的活力。 Kotlin 具有协程的概念。使用 Kotlin 中的 coroutine 语言关键字,允许您将特定代码段标记为执行异步操作,运行时可以重新调度线程。Spring 基于这种机制,通过协程集成了反应式编程。因此可以借助响应式代码的非阻塞性质,轻松进行命令式编程。
译者注
本文原作者 Josh Long (龙之春)
译者:如梦技术、冷冷、xkcoding、李寻欢
原文地址:https://spring.io/blog/2020/12/31/this-year-in-spring-2020-edition
译者说
从此篇文章我们可以看出 Spring 官方未来几年大致的技术方向,少走弯路。欢迎大家关注 java架构日记,新的一年里我们会联合如梦技术、pig、SpringBlade、Avue、JustAuth、IJPay、xkcoding 团队为大家带来更多的技术分享和开源作品。