阅读 397

spring概览 2020

Event Driven

事件驱动系统反映了现代企业的实际工作方式——每天每天都有成千上万的小变化发生。Spring处理事件的能力使开发人员能够围绕事件构建应用程序,这意味着您的应用程序将与您的业务保持同步。Spring有许多事件驱动选项可供选择,从集成和流一直到云功能和数据流。

事件驱动microservices

当与微服务结合时,事件流打开了令人兴奋的机会——事件驱动的体系结构就是一个常见的例子。Spring简化了事件的生产、处理和使用,提供了几种有用的抽象。

Streaming data

流数据表示事件的恒定流。一个例子就是股票行情。每次股票价格变化时,都会创建一个新的事件。它被称为“流数据”,因为有成千上万这样的事件导致一个持续的数据流。

Integration

任何事件驱动系统的基础都是消息处理。连接到消息平台,路由消息,转换消息,处理消息。使用Spring,您可以快速地解决这些集成挑战。

Spring Cloud Stream

当您使用Apache Kafka、RabbitMQ、Azure Event Hub等工具时,Spring Cloud Stream可以提高您的工作效率,提供三个关键的抽象来简化代码。“Binders”与外部消息传递系统集成。“Binders”在消息传递系统和代码之间架起了一座桥梁。“Messages”提供了代码用来发送和接收数据的结构。

Spring Cloud Stream还提供了对配置、内容转换、错误处理、配置管理、消费者组、分区、监控和运行状况检查的支持。

“Spring [Cloud] Stream和Spring解决方案帮助我们拥有针对迫切需求和反应需求的内聚解决方案。”

Spring Cloud Function

Spring Cloud函数,允许您一次性编写函数并在任何地方运行(AWS、Azure等),同时继续使用所有熟悉和全面的Spring api。您可以将多个功能链接在一起以创建新的功能。对多个输入和输出的支持带来了合并、连接和其他更高级的用例。了解更多

Spring Cloud Data Flow

Spring Cloud Data Flow为开发人员提供了一系列工具和自动化,用于处理各种数据源和目的地。Spring Cloud Data Flow帮助您在多个云本地平台上开发、部署、管理和扩展高吞吐量流数据管道。它还提供了用于构建和监视应用程序的丰富用户界面。

Spring Cloud Kafka Streams

Spring Cloud Stream仅为Kafka流提供了第二个更具体的绑定。这个特殊绑定器仍然关注开发人员的生产力,但是增加了对kafka特有特性的支持,如KStream、KTable和GlobalKTable。与常规的Spring云流一样,绑定器还负责连接Kafka,以及创建、配置和维护流和主题。

Spring AMQP and Spring for Apache Kafka

使用Spring AMQP和Spring for Apache Kafka项目,您可以将Spring的核心概念应用到基于Kafka或rabbitmq的消息传递解决方案的开发中。

两者都包括作为高级消息处理抽象的“模板”,并支持带有“侦听器容器”的消息驱动pojo。

Spring Integration

应用程序集成对每个企业都是一个挑战。Spring Integration通过扩展流行的Spring编程模型来包括所有最常见的集成模式,从而减轻了这种负担。有用于消息传递平台、通信协议、文件系统和服务提供者的现成连接器,以及诸如消息路由、数据转换和过滤器等常见模式的实现。

Microservices

微服务架构是“新常态”。构建小型的、自包含的、随时可以运行的应用程序可以为您的代码带来极大的灵活性并增加弹性。Spring Boot的许多专门构建的特性使得在生产环境中大规模构建和运行微服务变得非常容易。不要忘记,没有Spring云管理和提高容错能力,任何微服务体系结构都是不完整的。

What are microservices?

微服务是一种现代的软件方法,通过它,应用程序代码以小的、可管理的片段交付,独立于其他部分。

Why build microservices?

它们的小规模和相对隔离可以带来许多额外的好处,比如更容易维护、提高生产率、更强的容错能力、更好的业务一致性等等

Microservices with Spring Boot

使用Spring Boot,您的微服务可以从小处开始并快速迭代。这就是为什么它已经成为Java™微服务事实上的标准的原因。使用Spring初始化快速启动项目,然后打包成JAR。使用Spring Boot的嵌入式服务器模型,您可以在几分钟内准备就绪。

Microservice resilience with Spring Cloud

微服务的分布式特性带来了挑战。Spring可以帮助您减轻这些问题。通过几种随时可以运行的云模式,Spring cloud可以帮助进行服务发现、负载平衡、电路断开、分布式跟踪和监视。它甚至可以作为一个API网关。

Build streaming data microservices with Spring Cloud Stream

无论您选择哪种消息传递平台,Spring Cloud Stream都可以轻松地消费和生成事件。Spring Cloud Stream只需几行代码就可以将您的微服务与实时消息传递连接起来,从而帮助您构建高度可伸缩的事件驱动系统。

Manage your microservices

Spring Boot的可选仪器框架,Micrometer,直接向Prometheus, Atlas等公司发送数据,提供有价值的见解。Spring Cloud的Sleuth和Zipkin项目补充了这一点,它们提供分布式跟踪,以便您可以实时跟踪正在发生的事情。

Microservices on Cloud Foundry

微服务的小而无状态特性使其非常适合水平扩展。像TAS和PKS这样的平台可以提供可伸缩的基础设施来匹配,并极大地减少管理开销。使用云连接器,您还可以轻松地使用多个后端服务。

Reactive

反应系统具有某些特性,使其非常适合低延迟、高吞吐量的工作负载。Project Reactor和Spring组合一起工作,使开发人员能够构建响应性、弹性、弹性和消息驱动的企业级反应性系统。

What is reactive processing?

反应处理是一种范例,它使开发人员能够构建非阻塞的、异步的、能够处理反向压力(流控制)的应用程序。

Why use reactive processing?

反应系统更好地利用现代处理器。此外,反应性编程中包含的背压确保了解耦组件之间具有更好的弹性。

Project Reactor

工程反应堆是一个完全无阻塞的基础,包括背压支持。它是Spring生态系统中反应堆栈的基础,并在Spring WebFlux、Spring Data和Spring Cloud Gateway等项目中具有特色。

Reactive Microservices

开发人员从阻塞代码转向非阻塞代码的主要原因之一是效率。反应性代码用更少的资源做更多的工作。Project Reactor和Spring WebFlux让开发人员充分利用了多核、下一代处理器的优势——可以处理大量的并发连接。使用反应处理,您可以用更少的微服务实例满足更多并发用户。

Reactive Microservices With Spring Boot

Spring投资组合提供了两个并行的堆栈。一种是基于带有Spring MVC和Spring数据结构的Servlet API。另一个是完全被动的堆栈,它利用了Spring WebFlux和Spring Data的被动存储库。在这两种情况下,Spring Security都为您提供了对这两个栈的本机支持。

Integration with common technologies

以被动的方式访问和处理数据非常重要。MongoDB、Redis和Cassandra在Spring数据中都有本地反应性支持。许多关系数据库(Postgres、Microsoft SQL Server、MySQL、H2和谷歌Spanner)都通过R2DBC提供响应性支持。在消息传递领域,Spring Cloud Stream还支持对RabbitMQ和Kafka等平台的响应式访问。

Cloud

开发分布式系统可能具有挑战性。复杂性从应用层转移到网络层,并要求在服务之间进行更多的交互。让你的代码成为“云本地”意味着要处理12个方面的问题,比如外部配置、无状态、日志和连接到后台服务。Spring Cloud项目套件包含使应用程序在云中运行所需的许多服务。

Spring Cloud architecture highlights

Service discovery

在云计算中,应用程序并不总是知道其他服务的确切位置。服务注册中心(如Netflix Eureka)或sidecar解决方案(如HashiCorp领事)可以提供帮助。Spring Cloud为Eureka、领事、Zookeeper甚至是Kubernetes的内置系统等流行的注册表提供了DiscoveryClient实现。还有一个Spring Cloud负载均衡器,可以帮助您在服务实例之间仔细地分配负载。

API gateway

有这么多客户端和服务器在运行,在您的云架构中包含一个API网关通常很有帮助。网关可以保护和路由消息、隐藏服务、限制负载,以及许多其他有用的功能。Spring Cloud Gateway提供了对API层的精确控制,集成了Spring Cloud服务发现和客户端负载平衡解决方案来简化配置和维护。

“我们发现(Spring Cloud Gateway)的性能非常吸引人。低延迟,良好的吞吐量,[和]在我们的用例中超时的百分比非常小。

Cloud configuration

在云中,配置不能简单地嵌入到应用程序中。配置必须足够灵活,以应对多个应用程序、环境和服务实例,并在不停机的情况下处理动态更改。Spring Cloud Config旨在减轻这些负担,并提供与版本控制系统(如Git)的集成,以帮助您保持配置的安全性。

Circuit breakers

分布式系统可能不可靠。请求可能会遇到超时或完全失败。断路器可以帮助缓解这些问题,Spring Cloud断路器为您提供了三个流行的选项:Resilience4J、Sentinel或Hystrix。

Tracing

调试分布式应用程序可能很复杂,并且需要很长时间。对于任何给定的故障,您可能需要将来自几个独立服务的信息跟踪拼凑在一起。Spring Cloud Sleuth可以以可预测和可重复的方式检测应用程序。当与Zipkin一起使用时,您可以针对任何可能存在的延迟问题。

Testing

在云计算中,你可以因为拥有可靠、值得信赖、稳定的api而获得额外的积分——但要达到这个目标可能需要一段旅程。基于契约的测试是高绩效团队经常使用的一种技术,以保持在正确的轨道上。它有助于形式化api的内容,并围绕它们构建测试,以确保代码得到检查。

Spring Cloud Contract通过用Groovy、Java或Kotlin编写的契约,为REST和基于消息的api提供基于契约的测试支持。

Web Applications

Spring使构建web应用程序变得快速而无麻烦。通过删除与web开发相关的大量样板代码和配置,您将获得一个现代web编程模型,该模型简化了服务器端HTML应用程序、REST api和双向、基于事件的系统的开发。

Developer productivity

Spring Boot是您开发人员体验的起点,无论您正在构建什么。Spring Boot的设计是让您尽可能快地启动和运行,前期配置最少。使用它的嵌入式应用服务器,您可以在几秒钟内提供服务。

Spring的开箱即用、生产就绪的特性(如跟踪、度量和运行状况状态)为开发人员提供了对其应用程序的深入了解。

最后,Spring支持多种JVM语言:Java、Kotlin和Groovy。

Battle-tested security

当需要保护web应用程序时,Spring Security支持许多行业标准的身份验证协议,包括SAML、OAuth和LDAP。

从顶级的OWASP攻击,如会话固定,点击劫持,跨站点请求伪造,更多的保护。

Data access made easy

Spring帮助开发人员将他们的web应用程序连接到大量的数据存储。它支持关系型和非关系型数据库、map-reduce框架和基于云的数据服务。

Serverless

无服务器应用程序利用现代云计算功能和抽象,使您能够关注逻辑而不是基础设施。在无服务器环境中,您可以专注于编写应用程序代码,而底层平台负责扩展、运行时、资源分配、安全性和其他“服务器”细节。

What is serverless?

无服务器工作负载是“与通常由服务器基础设施处理的方面无关的事件驱动的工作负载。像“运行多少个实例”和“使用什么操作系统”这样的问题都是由功能作为服务平台(或FaaS)来管理的,让开发人员可以自由地专注于业务逻辑。

Serverless characteristics?

无服务器应用程序有许多具体的特点,包括:

  • 使用触发器执行事件驱动的代码
  • 平台处理所有的启动、停止和缩放任务
  • 可伸缩性为零,空闲时成本低到没有
  • Stateless

Serverless vs Traditional Stack

Function as a Service (FaaS)

  • 事件驱动执行。
  • 开发人员将所有特定于服务器的任务委托给FaaS平台。
  • 开发人员只编写平台调用的业务逻辑,允许随着业务需求的变化而有更强的弹性需求发展。

Traditional applications

  • 必须维护服务器基础设施(安装、配置、补丁、升级等)。
  • 基础设施的伸缩性对于工作负载来说可能不够动态(浪费资源)。
  • 开发人员编写集成代码来处理消息传递平台、HTTP请求/响应等

Why Spring and Serverless?

Spring投资组合为在无服务器应用程序中使用提供了健壮的功能集合。无论是使用Spring数据访问数据,使用Spring integration的企业集成模式,还是使用Spring Framework和Project Reactor的最新响应式编程,Spring都让开发人员从一开始就能在无服务器环境中高效工作

Spring还可以帮助您的函数避免供应商锁定。当在供应商的平台上运行代码时,Spring Cloud函数提供的适配器允许您与特定于供应商的api解耦。

In detail: Spring Cloud Function

Spring Cloud功能提供的功能可以让Spring开发人员利用无服务器或FaaS平台。

来自核心Java的java.util.function包作为Spring Cloud函数所使用的编程模型的基础。简而言之,Spring Cloud函数提供:

  • 编程风格的选择:反应式、命令式或混合式。
  • 函数组合和调整(比如用反应函数组合命令式函数)。
  • 支持具有多个输入和输出的反应性函数,以让函数处理合并、连接和其他复杂的流操作。
  • 输入和输出的透明类型转换
  • 针对特定于目标平台(如Project Riff、AWS Lambda等)的部署打包函数;见下文)。
  • 具有灵活签名的函数(POJO函数)——“如果它看起来像一个函数,它就是一个函数”
  • Spring的习惯用法和编程模型的所有其他好处。

Spring Cloud函数提供适配器,这样您就可以在最常见的FaaS服务上运行您的函数,这些服务包括Amazon Lambda、Apache OpenWhisk、Microsoft Azure和Project Riff。

Batch

批处理高效处理大量数据的能力使其成为许多用例的理想选择。Spring Batch的行业标准处理模式实现允许您在JVM上构建健壮的批处理作业。从Spring组合中添加Spring引导和其他组件可以构建任务关键批处理应用程序。

What is batch processing?

批处理是以不需要外部交互或中断的方式处理有限数量的数据。

Why build batch processes?

批处理是处理大量数据的一种极其有效的方式。基于sla对工作进行计划和划分优先级的能力使您能够分配资源以获得最佳利用。

Batch processing with Spring

Spring Batch是JVM上批处理的事实标准。它对常见批处理模式(例如基于块的处理和分区)的实现使您能够创建高性能、可伸缩的批处理应用程序,这些应用程序具有足够的弹性,能够处理大多数关键任务流程。Spring Boot提供了一个额外的生产级特性,使您可以加速批处理流程的开发。

Batch processing in the cloud

批处理非常适合云计算,特别是基础设施即服务(IaaS)。以随需应变、弹性伸缩和容错的方式运行应用程序的能力是Spring Batch可以使用的所有云特性。

Integration with common technologies

Spring Batch与其他Spring api的集成让您从第一天起就变得高效。通过ItemReader和ItemWriter对文件的支持,关系数据库和NoSQL存储的支持,以及通过Apache Kafka和RabbitMQ对消息传递的支持,Spring Batch能够处理大多数开箱即用的用例。

配置服务器 按需配置分布式应用程序。

批处理作业 为任务关键型应用程序高效地批量处理数据。

度量存储 监视所选平台上的应用程序度量。

服务发现 支持客户端负载平衡和智能路由的动态目录。

批处理作业工人 将批处理作业扩展到多个节点以获得更高的性能。

动态监测指示板 使用Grafana等工具创建动态仪表板来监控生产应用程序。

SPRING CLOUD DATA FLOW 编排或安排云中的临时微服务。