各位 Spring 爱好者!欢迎收看本周 Spring 另一期特别节目,我们不仅回顾上周的新闻,还将回顾过去一年的亮点。2018 年是技术格局动荡的一年,Spring 社区得以从容应对。在这特别的年终总结中,我们将一如既往——回顾生态系统中最新、最棒的内容,但我们还将重温我,你们友好的邻居 @starbuxman,认为对 2018 年的 Spring 开发者影响最大的事情。
首先,当然,让我先说件显而易见的事。这篇文章发布时是圣诞节,12月25日。所以,如果你庆祝节日:圣诞快乐!
现在,让我们来回顾一下我们每周的常规 roundup - 有大量内容要看! - 然后我们将回顾 Spring 的年度总结。
今年是很有趣的一年,见证了现有实践以令人惊叹的新方式得到改进。以下是我将从 2018 年所经历的事情中记住的内容。
- 响应式编程我们在列表中的其他项目中有涉及这方面,但 2018 年无疑是响应式之年。在 2018 年,我们在合理的情况下交付了所有响应式集成的 GA 版本。2018 年,我们发布了 Spring Boot 2 和 Spring Cloud Finchley 的 GA 版本,它们汇总了 Spring Data Kay、Spring Security 5 以及 Spring Framework 5 等其他项目。这些版本在阻塞和同步世界中带来了与现有用例相匹配的功能。也是在这一年,我们开始着手提供仅限响应式(reactive-only)的选项;这些选项超越了以往的可能性,并且由于它们基于响应式编程,例如 R2DBC 和 RSocket,因此更加出色。
- RSocket 系统集成很难。集成本身就很困难。HTTP 是一个强大的文档检索协议,但它缺乏应用程序级别的语义,每个开发人员都必须在 HTTP 动词(REST)之上重新构想。它面向请求-响应架构,但缺乏处理其他消息交换模式的能力,如请求-响应、防火即忘(fire-and-forget)和流(在请求、响应或两者都有)。我们知道,响应式流规范为处理集成提供了一个很好的心智模型。在这个模型中,边界被假定为异步且解耦的。组件通过“背压”(backpressure)的概念支持流控制。此外,HTTP 是文本编码的。当然,你可以传输二进制数据,但你需要将其编码为文本。RSocket 是一个全新的二进制协议,由 Netflix 和 Facebook 的专家们共同开发,内置支持响应式流规范。它支持上述所有消息交换模式。由于它是一个协议,因此有不同的客户端库支持不同的平台和语言,包括 JavaScript、C++ 和 Java。Java 实现自然是基于 Project Reactor 的。在我们的重要会议 SpringOne Platform 2018 上,我们宣布了对即将发布的 Spring Framework 5.2 版本系列的 RSocket 的正式支持。
- R2DBC 当人们谈论响应式编程时,我们*总是*会问:“应该使用 JDBC 吗?”或“可以使用 JDBC 吗?” 或者更直白地说,如果没有响应式 JDBC 选项,“我应该费心去研究响应式编程吗?”而答案总是令人沮丧的、相当悲观的:如果你在流的任何点都需要阻塞来处理规模,那么你就无法获得响应式编程所声称的规模效益。如果你最终启动新线程来扩展与 JDBC 的交互,那么你就限制了系统的规模潜力。但这并不意味着无法实现响应式 SQL。只是它不是 JDBC。对于那些驱动程序原生支持异步 IO 和响应式编程的数据库供应商来说,有一些即将出现的新选项可能会成为 JDBC 的有趣替代方案。其中一个选项是 R2DBC,我们在 2018 年的 SpringOne Platform 会议上宣布了它。集成分为三个层次:首先是低级别的 R2DBC SPI,在此之上构建数据库绑定。目前有 H2、Microsoft SQL Server 和 PostgreSQL 的绑定。在这个级别,你会发现一个 `DatabaseClient`,它或多或少等同于 `JdbcTemplate`,这使得使用低级别 R2DBC 尽可能方便。然后,最后,在整个堆栈的顶层是 Spring Data R2DBC。我在上周的 Spring Tips 中也详细介绍了所有这些以及更多内容!
- KNative Serverless,这个术语本身如今几乎毫无意义,但它却风靡一时。它描述了我们应该让平台处理越来越多的软件部署工作的想法。在函数即服务(function-as-a-service)平台中,货币单位是函数。平台会根据请求调用它。其余的一切——路由、调度、扩展——都由平台处理。一个函数的输出可以成为另一个函数的输入。这种组合意味着可以发生有趣的事情。函数可以临时地相互连接以产生结果。此外,函数可以附加到事件源,响应函数生态系统中的事件,无论函数运行在哪个平台。在这里,它们作为集成代码的优势就显现出来了。我们在 Pivotal 于 2017 年宣布了 Project Riff。正如我们最初设想的那样,它是一个构建在 Kubernetes 之上的函数即服务平台。但这仅仅是第一步。在我们于 SpringOne Platform 2017 会议上介绍它几个月后,Riff 团队开始与 Google 合作 开发 KNative。KNative 是对 Kubernetes 的进一步抽象。它提供了基础的基元,像 Project Riff 这样的东西可以设想在其之上构建。而这正是我们所做的。在 2018 年,Google 和 Pivotal 在 Google NEXT 上宣布了 KNative,我与 Ray Tsang 在 Google Next 的联合演示中成为了第一个进行 KNative 演示的非 Google 员工。KNative 不仅对 Project Riff 来说是个大事件,对整个 Kubernetes 生态系统来说也是如此,我很高兴看到它的发展。
- Spring Cloud 的至高无上今年巩固了 Spring Cloud 在开发人员分布式系统工具包中的地位。Spring Cloud 本身已经变得响应式。它引入了许多用户一直要求的功能,如 Spring Cloud Gateway。它还发布了 Spring Cloud for Google Cloud 和 Spring Cloud for Microsoft Azure 的 GA 版本。此外,它还推出了 Spring Cloud for Alibaba(这将在明天的 Spring Tips 中介绍!)。今年,比以往任何时候都更多地看到大型组织转向微服务,甚至像 Netflix 这样的先驱技术公司(它们已经在集成 Spring Cloud)今年更是加倍投入了 Spring Cloud。
真是令人难忘的一年!而明年*已经*看起来会更大更好!2019 年的总结就到这里。明年见,2019 年 1 月 1 日。
我们全体祝大家新年快乐!