00 Spring Cloud简介

00 Spring Cloud简介


Spring Cloud是一系列框架的有序集合,它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud微服务工具包为开发者提供了分布式系统中的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。它的各个项目基于Spring Boot,将Netflix的多个框架进行封装,并且通过自动配置的方式将这些框架绑定到Spring的环境中,从而简化了这些框架的使用。由于Spring Boot的简便性,使得我们在使用Spring Cloud时,很容易将Netflix各个框架整合进我们的项目中。
Spring Cloud下的“Spring Cloud Netflix”模块主要封装了Netflix的以下项目。

  • Eureka:基于REST服务的分布式中间件,主要用于服务管理。
  • Hystrix:容错框架,通过添加延迟阈值及容错的逻辑来帮助我们控制分布式系统间组件的交互。
  • Feign:一个REST客户端,目的是简化Web Service客户端的开发。
  • Ribbon:负载均衡框架,在微服务集群中为各个客户端的通信提供支持,它主要实现中间层应用程序的负载均衡。
  • Zuul:为微服务集群提供代理、过滤、路由等功能。

除了Spring Cloud Netflix模块,Spring Cloud还包括以下几个重要的模块。

  • Spring Cloud Config:为分布式系统提供了配置服务器和配置客户端,通过对他们的配置,可以很好地管理集群中的配置文件。

  • Spring Cloud Sleuth:服务跟踪框架,可以与Zipkin、Apache HTrace和ELK等数据分析、服务跟踪系统进行整合,为服务跟踪、解决问题提供了便利。

  • Spring Cloud Stream:用于构建消息驱动微服务的框架,该框架在Spring Boot的基础上,整合了“Spring Integration”来连接消息代理中间件。

  • Spring Cloud Bus:连接RabbitMQ、Kafka等消息代理的集群消息总线。

    Spring Cloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式,这两种方式各有优劣。虽然牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下显得更加合适。

    Spring Cloud的组件架构如图:
    00 Spring Cloud简介
    各组件的运行流程如下:

  • 所有请求都统一通过API网关(Zuul)来访问内部服务。

  • 网关接收到请求后,从注册中心(Eureka)获取可用服务。

  • 由Ribbon进行均衡负载后,分发到后端的具体实例。 微服务之间通过Feign进行通信处理业务。

  • Hystrix负责处理服务超时熔断。

  • Turbine监控服务间的调用和熔断相关指标。

上面只是Spring Cloud体系的一部分,Spring Cloud共集成了19个子项目,里面都包含一个或者多个第三方的组件或框架。

Spring Cloud工具框架如下:

工具框架 说明
Spring Cloud Config 配置中心,利用Git/SVN集中管理程序的配置。
Spring Cloud Netflix 集成众多Netflix的开源软件。
Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化。
Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成应用程序。
Spring Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。
Spring Cloud Cluster 基于ZooKeeper、Redis、Hazelcast、Consul实现的领导选举和平民状态模式的抽象和实现。
Spring Cloud Consul 基于Hashicorp Consul实现服务发现和配置管理。
Spring Cloud Security 在Zuul代理中为OAuth 2 REST客户端和认证头转发提供负载均衡。
Spring Cloud Sleuth 应用的分布式追踪系统和Zipkin、HTrace、ELK兼容。
Spring Cloud Data Flow 一个云本地程序和操作模型,在一个结构化的平台上组成数据微服务。
Spring Cloud Stream 基于Redis、RabbitMQ、Kafka实现的消息服务,简单声明模型用于在Spring Cloud应用中收发消息。
Spring Cloud Stream App Starters 基于Spring Boot为外部系统提供Spring的集成。
Spring Cloud Task 任务调度框架、短生命周期的微服务,为Spring Boot应用简单声明添加功能和非功能特性。
Spring Cloud ZooKeeper 服务发现和配置管理基于Apache ZooKeeper。
Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。
Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端数据库和消息服务。
Spring Cloud Starters 项目已经终止并且在Angel.SR2后的版本和其他项目合并。
Spring Cloud CLI 基于Spring Cloud CLI,可以以命令行方式快速建立云组件。

这些工具集还在不断的增加。