Spring Cloud简单介绍

摘要

本文主要从是什么?为何?怎么作?三个方面来来介绍SpringCloud,部分参考官方文档和技术博客,详细连接在文章最下方给出

是什么? SpringCloud是什么?用来干什么的?
为何?为何选用SpringCloud?他有哪些优点?
怎么作? 如何使用SpringCloud?以及SpringCloud的各个组件的做用?复制代码

是什么?

1. Spring Cloud简单介绍

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用Spring Boot的开发风格作到一键启动和部署。Spring并无重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
微服务是能够独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud就是这些微服务的大管家,采用了微服务这种架构以后,项目的数量会很是多,springcloud须要管理好这些微服务。

2. 官方介绍

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态)。分布式系统的协调致使锅炉板模式,使用Spring Cloud开发人员能够快速站起来实现这些模式的服务和应用程序。它们适用于任何分布式环境,包括开发人员本身的笔记本电脑,裸机数据中心和Cloud Foundry等托管平台。

3. 核心成员概览

服务注册中心
Spring Cloud Netflix Eureka
服务调用方式
REST API
服务监控
Spring Boot Admin
断路器
Spring Cloud Netflix Hystrix
服务网关
Spring Cloud Netflix Zuul
分布式配置
Spring Cloud Config
服务跟踪
Spring Cloud Sleuth
消息总线
Spring Cloud Bus
数据流
Spring Cloud Stream
批量任务
Spring Cloud Task

4. 和Spring Boot 是什么关系

Spring Boot 是 Spring 的一套快速配置脚手架,能够基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专一于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,不少集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,能够不基于Spring Boot吗?不能够。
Spring Boot能够离开Spring Cloud独立使用开发项目,可是Spring Cloud离不开Spring Boot,属于依赖的关系。

spring -> spring boot > Spring Cloud 这样的关系。复制代码

为何?

1. Spring Cloud的优点?

Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others.
Spring Cloud专一于为典型用例提供良好的开箱即用体验,并为其余用户提供可扩展性机制。

另外,Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外因为依托了 Spring、Spring Boot 的优点之上,Spring Cloud 是一个生态。

2. 为何选用SpringCloud?

微服务的框架那么多好比:dubbo、Kubernetes,为何就要使用Spring Cloud的呢?
  • 产出于spring你们族,spring在企业级开发框架中无人能敌,来头很大,能够保证后续的更新、完善。好比dubbo如今就差很少死了
  • 有Spring Boot 这个独立干将能够省不少事,大大小小的活Spring Boot都搞的挺不错。
  • 做为一个微服务治理的你们伙,考虑的很全面,几乎服务治理的方方面面都考虑到了,方便开发开箱即用。
  • Spring Cloud 活跃度很高,教程很丰富,遇到问题很容易找到解决方案
  • 轻轻松松几行代码就完成了熔断、均衡负载、服务中心的各类平台功能
Spring Cloud对于中小型互联网公司来讲是一种福音,由于这类公司每每没有实力或者没有足够的资金投入去开发本身的分布式系统基础设施,使用Spring Cloud一站式解决方案能在从容应对业务发展的同时大大减小开发成本。同时,随着近几年微服务架构和Docker容器概念的火爆,也会让Spring Cloud在将来愈来愈“云”化的软件开发风格中立有一席之地,尤为是在目前五花八门的分布式解决方案中提供了标准化的、全站式的技术方案,意义可能会堪比当前Servlet规范的诞生,有效推动服务端软件系统技术水平的进步。

Spring Cloud 架构体系有有趣很酷的技术。若是公司选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它能够说是目前最好的微服务框架没有之一。


怎么用?

1. 核心模块介绍

为了轻松实现微服务架构,业界已经肯定了一些常见的模式来帮助实现这一点。一些众所周知的模式是集中配置管理,服务发现,异步消息驱动和分布式跟踪。Spring Cloud将这些模式做为可用的模块提供,并帮助咱们遵循云原生最佳实践。除此以外,Spring Cloud的独特价值能够体如今如下几个方面:
  1. 为经常使用模块定义通用抽象。这是Spring的解耦理念的完美应用。每种模式都没有与具体实施紧密结合。以配置服务器为例; 您能够自由地更改后端存储而不会影响其余服务。
  2. 模块化组件。Spring Cloud不是一个全有或全无的解决方案,全部的模块都是可选的。
a. 经过Spring Cloud Config进行集中配置管理
为了知足Store config in environment 微服务架构的要求 ,咱们须要将全部服务的配置放在一个集中的位置。为此,须要如下功能:
  1. 支持多种环境,如dev,test和prod。而后咱们能够为全部环境构建一个包。
  2. 透明配置提取。 应该自动获取这些集中式配置,无需任何用户编码。
  3. 属性更改时自动刷新属性。应经过此类更改通知服务并从新加载新属性。
  4. 保持更改历史记录并轻松恢复到旧版本。 这是一个很是有用的功能,能够恢复生产环境中的错误更改。
Spring Cloud Config经过在配置服务中使用一个简单的注释@EnableConfigServer来支持全部这些功能,并在其余服务中包含启动器以启用客户端。有关更多详细信息,请参阅 Spring Cloud Config文档

b. 经过Spring Cloud Discovery发现服务
服务发如今大多数分布式系统和面向服务的体系结构中起着重要做用。这个问题起初看起来很简单:客户如何知道多个主机上可能存在的服务的IP和端口?当您开始在多功能云环境中部署更多服务时,事情变得更加复杂。
实际上,这一般分两步完成:
  • 服务注册 - 服务在中央注册表中注册其位置的过程。它一般注册其主机和端口,有时还会注册身份验证凭据,协议,版本和环境详细信息。
  • 服务发现 - 客户端应用程序查询中央注册表以了解服务位置的过程。
在选择服务发现解决方案时,应考虑如下几个方面:
  • 容错 - 注册服务失败后会发生什么?有时它会在正常关闭时当即取消注册,但大多数状况下咱们须要一个超时机制。服务不断发送心跳以确保活力。除此以外,客户还须要可以经过自动重试另外一个服务来处理失败的服务。
  • 负载均衡 - 若是在服务下注册了多个主机,咱们如何平衡主机之间的负载?是否会在注册表端或客户端进行负载均衡?咱们能够提供自定义负载均衡策略吗?
  • 整合工做 - 整合过程有多复杂?它是否只涉及一些新的依赖和/或配置更改?仍是侵入式发现代码?当您的语言不受支持时,有时候单独的sidekick过程是一个不错的选择。
  • 可用性问题 - 注册表自己是否具备高可用性?能够在没有停机的状况下升级吗?注册表不该该是单点故障。
Spring Cloud为注册和发现提供了一个通用的抽象,这意味着您只须要使用@EnableDiscoveryClient来使其工做。发现实现的示例包括 Spring Cloud Discovery EurekaSpring Cloud Discovery Zookeeper。您应该根据您的用户案例选择具体的实现。有关更多详细信息,请参阅 Spring Cloud Discovery文档

c. 经过Spring Cloud Stream实现消息驱动的架构
假设咱们有一些微服务,而后必须相互通讯。显然,传统的同步方式是阻塞且难以扩展,这在复杂的分布式环境中没法生存,所以异步消息驱动是正确的方法。在现代世界中,每一个请求云都被视为一条消息。所以,各类消息传递中间件均可以使用本身的消息格式和API。让全部这些中间件相互通讯是一场灾难。实际上,解决这个问题很容易; 只需定义一个统一的消息接口,而后每一个中间件提供一个适配器,它知道如何在它们的消息格式和标准格式之间进行转换。如今您已经掌握了Spring Integration的核心设计原则。Spring Integration受如下目标的驱动:
  1. 提供实现复杂企业集成解决方案的简单模型。
  2. 促进基于Spring的应用程序中的异步,消息驱动行为。
  3. 促进现有Spring用户的直观,渐进式采用。
并遵循如下原则:
  1. 组件应松散耦合,以实现模块化和可测试性。
  2. 该框架应该强制分离业务逻辑和集成逻辑之间的关注点。
  3. 扩展点本质上应该是抽象的,可是在明肯定义的边界内,以促进重用和可移植性。
有关更多详细信息,请参阅 Spring Integration文档
可是,Spring Integration仍然处于较低级别,而且包含非直观的混淆术语。编程模型不像其余Spring技术那样易于使用。所以发明了Spring Cloud Stream。它基于Spring集成提供的标准消息格式和各类适配器,在高级绑定器抽象中工做,以更容易的方式生成,处理和使用消息。它看起来像一个unix管道; 你只须要担忧如何处理消息。消息将按预期进出。Spring Cloud Stream提供以下高级功能:
  1. 消费者集团。这是由Apache Kafka首先介绍和推广的。它能够在一个编程模型中支持发布 - 订阅和竞争队列。
  2. 分区。基于用户提供的分区密钥,在一个物理段中保证生成的具备相同分区密钥的消息。这在有状态处理中相当重要,由于出于性能或一致性的缘由,须要一块儿处理相关数据。
  3. 自动内容协商。根据用户接受的消息类型自动进行消息类型转换。
有关更多详细信息,请参阅 Spring Cloud Stream文档

d. 经过Spring Cloud Sleuth和Zipkin进行分布式跟踪
在微服务架构下,一个外部请求可能涉及多个内部服务调用,而且这些服务可能分布在许多机器上。尽管大多数解决方案都实现了集中式日志记录存储和搜索,但仍然难以跟踪跨多个服务的端到端事务。弄清楚请求如何经过应用程序也意味着屡次手动搜索日志关键字以找到线索。这很是耗时且容易出错,尤为是当您对微服务拓扑结构不够了解时。实际上,咱们须要的是在一个地方关联和聚合这些日志。
Spring Cloud Sleuth经过引入Span和Trace的概念来实现这种相关性。Span表示一个基本工做单元,例如调用服务,由span ID标识。一组跨度造成一个名为Trace的树状结构。跟踪ID将保持与一个微服务调用下一个的相同。二者都将包含在每一个日志条目中。此外,它自动设置常见的通讯渠道:
  • 咱们以前讨论过对Spring Cloud Stream Binder的请求
  • Spring MVC控制器收到的HTTP头
  • 请求 RestTemplate
  • ......以及Spring-ecology中的大多数其余类型的请求和回复
有了这些原始数据,仍然很难理解诸如微服务调用消耗最多时间之类的事情。Zipkin提供了一个漂亮的UI,以帮助咱们可视化和理解。您可使用简单的注释准备好Zipkin服务器 @EnableZipkinServer。有关更多详细信息,请参阅 Spring Cloud Sleuth文档

2. Netflix介绍

Netflix(/nɛtflɪks/,官方中文名:网飞,民间翻译:奈飞)是一间在世界多国提供网络视频点播的OTT服务公司[7],并同时在美国经营单一费率邮寄DVD出租服务。该服务是使用回邮信封寄送DVD和Blu-ray出租光盘至消费者指定的收件地址。公司由里德·哈斯廷斯和马尔克·兰多夫在1997年8月29日成立,总部位于加利福尼亚州洛斯盖图,1999年开始推出订阅制的服务。到了2009年,Netflix已可提供超过10万部电影DVD,订阅者数超过1000万人[8]。2007年2月25日,Netflix宣布已寄出第10亿份DVD。[9]2011年4月,Netflix在美国有超过2300万名订阅者,在世界其余国家共有超过2600万名订阅者。[10]在2011年,Netflix的数字总营收超过了150亿美圆。[11]然而在2012年10月23日,Netflix宣布当年度第三季的营收下滑了88%[12]。2013年1月,Netflix宣布在2012年第四季期间在美国增长了200万名订阅者,美国的流服务总订阅者数达到2710万,世界其余国家则共有2940万名流服务订阅者。此外,在同一期间,Netflix的营收提高了8%,达到9.45亿美圆。[13]2013年3月中旬,Netflix共有3300万名订阅者[14]。订阅者数在2013年4月达到3630万人(其中美国订阅者数为2920万人)[15]。其后Netflix的订户数与营收持续增加。截至2015年10月,Netflix在全世界共有6917万名订阅者,其中美国的订阅者超过4300万人。[16]html

Netflix公司提供光盘出租和视频订阅服务,13年视频订阅者为六千万名,如此大的体量造就了Netflix在分布式应用方面的成就。spring

Spring Cloud Netflix与各类Netflix OSS组件集成,组成微服务的核心,它组件主要有Eureka, Hystrix, Zuul, Archaius…

3. 核心组件介绍

  • Spring Cloud Netflix Eureka
服务中心(相似于管家的概念,须要什么直接从这里取,就能够了),一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
服务中心,云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。这个但是springcloud最牛鼻的小弟,服务中心,任何小弟须要其它小弟支持什么都须要从这里来拿,一样的你有什么独门武功的都赶忙过报道,方便之后其它小弟来调用;它的好处是你不须要直接找各类什么小弟支持,只须要到服务中心来领取,也不须要知道提供支持的其它小弟在哪里,仍是几个小弟来支持的,反正拿来用就行,服务中心来保证稳定性和质量。
  • Spring Cloud Netflix Hystrix
熔断器,容错管理工具,旨在经过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
熔断器,容错管理工具,旨在经过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。好比忽然某个小弟生病了,可是你还须要它的支持,而后调用以后它半天没有响应,你殊不知道,一直在等等这个响应;有可能别的小弟也正在调用你的武功绝技,那么当请求多以后,就会发生严重的阻塞影响老大的总体计划。这个时候Hystrix就派上用场了,当Hystrix发现某个小弟不在状态不稳定立马立刻让它下线,让其它小弟来顶上来,或者给你说不用等了这个小弟今天确定不行,该干吗赶忙干吗去别在这排队了。
  • Spring Cloud Netflix Zuul
网关,是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Web 网站后端全部请求的前门。
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 至关因而设备和 Netflix 流应用的 Web 网站后端全部请求的前门。当其它门派来找大哥办事的时候必定要先通过zuul,看下有没有带刀子什么的给拦截回去,或者是须要找那个小弟的直接给带过去。
  • Spring Cloud Netflix Archaius 

配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操做、轮询框架、回调机制等功能。数据库

配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操做、轮询框架、回调机制等功能。能够实现动态获取配置, 原理是每隔60s(默认,可配置)从配置源读取一次内容,这样修改了配置文件后不须要重启服务就可使修改后的内容生效,前提使用archaius的API来读取。
  • Spring Cloud Netflix Ribbon 负载均衡。
  • Spring Cloud Netflix Fegin REST客户端。
  • Spring Cloud Bus

 消息总线,利用分布式消息将服务和服务实例链接在一块儿,用于在一个集群中传播状态的变化。编程

事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。至关于水浒传中日行八百里的神行太保戴宗,确保各个小弟之间消息保持畅通。
  • Spring Cloud Cluster 

集群工具,基于 Zookeeper, Redis, Hazelcast, Consul 实现的领导选举和平民状态模式的抽象和实现。后端

  • Spring Cloud Consul 

基于 Hashicorp Consul 实现的服务发现和配置管理。安全

  • Spring Cloud Cluster

将取代Spring Integration。提供在分布式系统中的集群所须要的基础功能支持,如:选举、集群的状态一致性、全局锁、tokens等常见状态模式的抽象和实现。bash

若是把不一样的帮派组织成统一的总体,Spring Cloud Cluster已经帮你提供了不少方便组织成统一的工具。
  • Spring Cloud Consul
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并容许 HTTP 和 DNS 协议调用 API 存储键值对.
Spring Cloud Consul 封装了Consul操做,consul是一个服务发现与配置工具,与Docker容器能够无缝集成。
  • Spring Cloud for Cloud Foundry
Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员可以在几秒钟内进行应用程序的部署和扩展,无需担忧任何基础架构的问题
其实就是与CloudFoundry进行集成的一套解决方案,抱了Cloud Foundry的大腿。
  • Spring Cloud Security 

安全控制,在 Zuul 代理中为 OAuth2 REST 客户端和认证头转发提供负载均衡。服务器

基于spring security的安全工具包,为你的应用程序添加安全控制。这个小弟很牛鼻专门负责整个帮派的安全问题,设置不一样的门派访问特定的资源,不能把秘籍葵花宝典泄漏了。
  • Spring Cloud Sleuth 

分布式链路监控,SpringCloud 应用的分布式追踪系统,和 Zipkin,HTrace,ELK 兼容。网络

日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操做,为SpringCloud应用实现了一种分布式追踪解决方案。
  • Spring Cloud Task

 短生命周期的微服务,为 Spring Booot 应用简单声明添加功能和非功能特性。session

主要解决短命微服务的任务管理,任务调度的工做,好比说某些定时任务晚上就跑一次,或者某项数据分析临时就跑几回。
  • Spring Cloud Zookeeper 

服务发现和配置管理基于 Apache Zookeeper。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
操做Zookeeper的工具包,用于使用zookeeper方式的服务发现和配置管理,抱了Zookeeper的大腿。
  • Spring Cloud for Amazon Web Services 

快速和亚马逊网络服务集成。

  • Spring Cloud Starters
Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。
  • Spring Cloud CLI 
基于 Spring Boot CLI,可让你以命令行方式快速创建云组件。
  • Spring Cloud Connectors 

简化了链接到服务的过程和从云平台获取操做的过程,有很强的扩展性,能够利用Spring Cloud Connectors来构建你本身的云平台。

便于云端应用程序在各类PaaS平台链接到后端,如:数据库和消息代理服务。

  • Spring Cloud Stream 

建立消息驱动微服务应用的框架, 基于Spring Boot建立,用来创建单独的/工业级spring应用,使用spring integration提供与消息代理之间的链接。数据流操做开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。

一个业务会牵扯到多个任务,任务之间是经过事件触发的,这就是Spring Cloud stream要干的事了

  • Spring Cloud Data Flow 

用于大数据处理

Data flow 是一个用于开发和执行大范围数据处理其模式包括ETL,批量运算和持续运算的统一编程模型和托管服务。

对于在现代运行环境中可组合的微服务程序来讲,Spring Cloud data flow是一个原生云可编配的服务。使用Spring Cloud data flow,开发者能够为像数据抽取,实时分析,和数据导入/导出这种常见用例建立和编配数据通道 (data pipelines)。

Spring Cloud data flow 是基于原生云对 spring XD的从新设计,该项目目标是简化大数据应用的开发。Spring XD 的流处理和批处理模块的重构分别是基于 Spring Boot的stream 和 task/batch 的微服务程序。这些程序如今都是自动部署单元并且他们原生的支持像 Cloud Foundry、Apache YARN、Apache Mesos和Kubernetes 等现代运行环境。

Spring Cloud data flow 为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践。

总结

本文主要从三个问题认识了SpringCloud:

1.SpringCloud是什么?

Spring Cloud是一系列框架的有序集合,为开发人员提供了快速构建分布式系统中一些常见模式的工具,解决分布式应用中的服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等问题。

2.为何选用SpringCloud?

  • 基于http协议,使用RESTful风格,接口简洁方便,高效透明(Dubbo使用RPC协议,性能稍优于Http协议,但强耦合度较高)
  • 依托于spring平台、使用Spring Boot来构建服务,功能全面且开箱即用
  • 社区活跃度高文档丰富

3.如何使用SpringCloud?

a. SpringCloud的组件概览
b. 应用架构
流程
  • 请求统一经过 API 网关(Zuul)来访问内部服务。
  • 网关接收到请求后,从注册中心(Eureka)获取可用服务。
  • 由 Ribbon 进行均衡负载后,分发到后端具体实例。
  • 微服务之间经过 Feign 进行通讯处理业务。
  • Hystrix 负责处理服务超时熔断。
  • Turbine 监控服务间的调用和熔断相关指标。

本文仅用于学习交流,若有理解错误请指正

参考:
相关文章
相关标签/搜索