springCloud简介
尽管springCloud带有“cloud”字样,但它并不是云计算解决方案,而是在SpringBoot基础上构建的,用于快速构建分布式系统的通用的工具集。从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套高效、分布式、容错的平台,但Spring Cloud也不是没有缺点,小型独立的项目不适合使用,另外对分布式事务的支持暂时也没有。
springcloud特点
上面我们说了,springCloud是基于springboot开发的,那么springboot拥有的特点,springcloud也都有:
- 约定优于配置。
- 适用于各种环境。开发,部署在PC server或各种云环境(例如阿里云,AWS等)均可。
- 隐藏了组件的复杂性,并提供声明式,无XML的配置方式。
- 开箱即用,快速启动。
- 轻量级的组件。springcloud整合的组件大多比较轻量,例如Eureka,zuul,等等。都是各自领域轻量级的实现。
- 组件丰富,功能齐全。spring cloud为微服务架构提供了非常完整的支持,例如配置管理,服务发现,断路器,微服务网关等。
- 选型中立,丰富。例如:spring cloud支持使用Eureka,Zookeeper或Consul实现服务发现。
- 灵活。spring cloud的组成部分是解耦的,开发人员可按需灵活挑选技术选型。
springcloud工具集
上面我们提到,springcloud是一个工具集,那么它下面肯定有若干个小弟。我们先打个照面。
主要成员
Spring Cloud Netflix
这可是个大boss,地位仅次于老大,老大各项服务依赖与它,与各种Netflix OSS组件集成,组成微服务的核心,它的小弟主要有Eureka, Hystrix, Zuul, Archaius... 太多了
Netflix Eureka
服务中心,云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。这个可是springcloud最牛鼻的小弟,服务中心,任何小弟需要其它小弟支持什么都需要从这里来拿,同样的你有什么独门武功的都赶紧过报道,方便以后其它小弟来调用;它的好处是你不需要直接找各种什么小弟支持,只需要到服务中心来领取,也不需要知道提供支持的其它小弟在哪里,还是几个小弟来支持的,反正拿来用就行,服务中心来保证稳定性和质量。
Netflix Hystrix
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。比如突然某个小弟生病了,但是你还需要它的支持,然后调用之后它半天没有响应,你却不知道,一直在等等这个响应;有可能别的小弟也正在调用你的武功绝技,那么当请求多之后,就会发生严重的阻塞影响老大的整体计划。这个时候Hystrix就派上用场了,当Hystrix发现某个小弟不在状态不稳定立马马上让它下线,让其它小弟来顶上来,或者给你说不用等了这个小弟今天肯定不行,该干嘛赶紧干嘛去别在这排队了。
Netflix Zuul
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。当其它门派来找大哥办事的时候一定要先经过zuul,看下有没有带刀子什么的给拦截回去,或者是需要找那个小弟的直接给带过去。
Netflix Archaius
配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。可以实现动态获取配置,
原理是每隔60s(默认,可配置)从配置源读取一次内容,这样修改了配置文件后不需要重启服务就可以使修改后的内容生效,前提使用archaius的API来读取。
Spring Cloud Config
俗称的配置中心,配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。就是以后大家武器、枪火什么的东西都集中放到一起,别随便自己带,方便以后统一管理、升级装备。
Spring Cloud Bus
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。相当于水浒传中日行八百里的神行太保戴宗,确保各个小弟之间消息保持畅通。
Spring Cloud for Cloud Foundry
Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题
其实就是与CloudFoundry进行集成的一套解决方案,抱了Cloud Foundry的大腿。
Spring Cloud Cluster
Spring Cloud Cluster将取代Spring Integration。提供在分布式系统中的集群所需要的基础功能支持,如:选举、集群的状态一致性、全局锁、tokens等常见状态模式的抽象和实现。
如果把不同的帮派组织成统一的整体,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 Security
基于spring security的安全工具包,为你的应用程序添加安全控制。这个小弟很牛鼻专门负责整个帮派的安全问题,设置不同的门派访问特定的资源,不能把秘籍葵花宝典泄漏了。
Spring Cloud Sleuth
日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。
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 为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践。
Spring Cloud Stream
Spring Cloud Stream是创建消息驱动微服务应用的框架。Spring Cloud Stream是基于spring boot创建,用来建立单独的/工业级spring应用,使用spring integration提供与消息代理之间的连接。数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
一个业务会牵扯到多个任务,任务之间是通过事件触发的,这就是Spring Cloud stream要干的事了
Spring Cloud Task
Spring Cloud Task 主要解决短命微服务的任务管理,任务调度的工作,比如说某些定时任务晚上就跑一次,或者某项数据分析临时就跑几次。
Spring Cloud Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
操作Zookeeper的工具包,用于使用zookeeper方式的服务发现和配置管理,抱了Zookeeper的大腿。
Spring Cloud Connectors
Spring Cloud Connectors 简化了连接到服务的过程和从云平台获取操作的过程,有很强的扩展性,可以利用Spring Cloud Connectors来构建你自己的云平台。
便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。
Spring Cloud Starters
Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。
Spring Cloud CLI
基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
springCloud版本
通常情况下,spring框架的版本号的命名形式是“主版本号.次版本号.增量版本号.里程碑版本号”,对不对。例如Spring Framework稳定版本4.3.5.RELEASE,里程碑版本5.0.0.M4等。其中,主版本号表示项目的重大重构;次版本号表示新特性的添加和变化;增量版本号一般表示BUG修复;里程碑版本号表示某版本号的里程碑。
然而,spring cloud并未使用这种方式管理版本。下面来详细探讨一下spring cloud的版本。
spring Cloud是一个综合项目,它包含很多子项目。就是上面列举出来的,这些子项目自己维护着自己的版本号,和其他规则一样。那么spring cloud为了区别于这些子项目,我就不能这样定义了,毕竟我是大哥呀!
通常主版本号都是 1,2,3,4...顺序下去。spring cloud的主版本号有Angel,Brixton,Camden,Dalston,Edgware,Finchley等。这些都是伦敦地铁站的名称,注意首字母你会发现,它们按照字母顺序发行。那么同一个版本需要做些小修小改呢?后面怎么表示?用SRX的形式命名。比如:
首先发行:Edgware RELEASE.
做了一次小修小改之后,再发行:Edgware SR1
再做一次修补,发行:Edgware SR2
就是这样。
spring cloud/spring boot版本兼容性
- Angel版本基于Spring boot 1.2.x构建,在一些场景下,与Spring Boot 1.3.x及以上版本不兼容。
- Brixton版本基于Spring boot1.3.x构建,也可使用1.4.x进行测试,与1.2.x不兼容。
- Camden版本基于Spring boot1.4.x构建,也可使用1.5.x进行测试。
- Dalston版本基于Spring boot1.5.x构建,不兼容Spring boot2.0.x。
- Edgware版本基于Spring boot1.5.x构建,不兼容Spring boot2.0.x。
- Finchley版本基于Spring boot2.0.x构建,不兼容Spring boot 1.x 。