SpringCloud是什么?

SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,它们都可以用SpringBoot的开发风格做到一键启动和部署。
SpringBoot并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

简单理解
SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,微服务全家桶。

SpringCloud和SpringBoot的关系

SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。

简单理解
SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。

SpringCloud和Dubbo的比较

SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。严格来说,这两种方式各有优劣。虽然从一定程度上来说,SpringCloud牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。最为重要的是,DUBBO停止了5年左右的更新,虽然2017.7重启了,对于技术发展的新需求,需要由开发者自行拓展升级(比如当当网弄出了DubboX),这对于很多想要采用微服务架构的中小软件组织,显然是不太合适的,中小公司没有这么强大的技术能力去修改Dubbo源码和周边的一整套解决方案,并不是每一个公司都有阿里的大牛和真实的线上生产环境测试过。

简单理解
如果你去买电脑,SpringCloud就好比品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性。而Dubbo就好比组装机,各个组件的选择度很高,而且依赖于第三方的组件,好像总让人不太放心。

SpringCloud能做什么?

  • 服务注册与发现:Eureka
  • 负载均衡:Ribbon、Feign
  • 断路器:Hystrix
  • 监控:Hystrix Dashboard
  • 路由网关:Zuul
  • 分布式配置中心:SpringCloud Config
  • 消息总线:SpringCloud Bus
  • 服务链路追踪:SpringCloud Sleuth
  • ......

springcloud开发RPC_springcloud开发RPC

Spring Cloud版本

大版本

版本号规则

Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号。

Cloud代号

Boot版本(train)

Boot版本(tested)

lifecycle

Angle

1.2.x

incompatible with 1.3

EOL in July 2017

Brixton

1.3.x

1.4.x

2017-07卒

Camden

1.4.x

1.5.x

-

Dalston

1.5.x

not expected 2.x

-

Edgware

1.5.x

not expected 2.x

-

Finchley

2.x

not expected 1.5.x

-

开发代号看似没有什么规律,但实际上首字母是有顺序的,比如:Dalston版本,我们可以简称 D 版本,对应的 Edgware 版本我们可以简称 E 版本。

D版本和E版本的区别

二者均基于SpringBoot的1.5.x版本。但支持其他组件的版本不同,如以 Dalston.SR4 和 Edgware.RELEASE 来对比:

spring-cloud-config 分别对应 1.3.3和 1.4.0; 
spring-cloud-netflix 分别对应 1.3.5和 1.4.0; 
spring-cloud-consul 分别对应 1.2.1和 1.3.0; 
spring-cloud-gateway 前者不支持,后者 1.0.0。

每个小版本的不同,会有细微差别。

F版本

F版本是个绝对的大版本,几乎所有组件,全部同步变更版本号为2.x。

小版本

Spring Cloud 小版本分为:

SNAPSHOT: 快照版本,随时可能修改

M: MileStone,M1表示第1个里程碑版本,一般同时标注PRE,表示预览版版。

SR: Service Release,SR1表示第1个正式版本,一般同时标注GA:(GenerallyAvailable),表示稳定版本。

选择版本

大版本

  • 首先说明,各个版本之间组件变化不大,但细节略有不同,比如配置项名称、或者新版本增加新的配置方式。

从这一点来看,选择哪个版本都不是大问题,但提醒一下,遇到坑时,最好根据版本进行查询,否则你会发现你找到的办法不行。实际上是版本不匹配。

  • 如果你项目需要和其他老项目交叉,以兼容为第一要务。
  • 如果全新项目,可以考虑较新版本,如E版。如果你爱好踩坑,F拿去。

小版本

小版本没啥可说的,尝鲜:SNAPSHOT,生产:GA。

Spring Cloud与Spring Boot版本匹配关系

在这篇文章中:

  • Spring Cloud版本
  • Spring Cloud与Spring Boot版本匹配关系

Spring Cloud版本

在写本篇文章时,Spring Cloud版本演进情况如下:

版本名称

版本

Finchley

snapshot版

Edgware

snapshot版

Dalston SR1

当前最新稳定版本

Camden SR7

稳定版本

Brixton SR7

稳定版本

Angel SR6

稳定版本

从下Angel到上Finchley可以看出,版本的第一个字母是按照A-Z顺序编排的。这些单词是什么含义呢,大概的搜一下可以得出基本都是地名,官方说明是这些版本号的单词来自于英国伦敦的地铁站站名。

那么为什么要用单词而不是数字类型的版本号呢?  因为Spring Cloud包含了一系列的子系统,Spring Cloud Config,Spring Cloud Netflix,Spring Cloud Bus等,为了防止与这些子系统的版本号混淆,Spring Cloud的版本号全部使用英文单词。

版本号后面的SRX,X代表一个数字,这个是小版本号,就是在特定的版本中,修复一些致命问题,做的升级版本号。

Spring Cloud与Spring Boot版本匹配关系

Spring Cloud

Spring Boot

Finchley

兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x

Dalston和Edgware

兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x

Camden

兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x

Brixton

兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x

Angel

兼容Spring Boot 1.2.x