跟我学 Spring Cloud(Finchley 版)-01-开篇

前言·课程简介

最近挺多童鞋在公众号(itmuch_com)上催更Spring Cloud系列教程,故有此系列。以下是几点说明/规划/答疑:

问:为什么基于Finchley,而非Greenwich?

答:就目前而言,Finchley更贴近生产,而Greenwich尚未发布——虽然已经RC了,但有挺多不确定因素,例如:Resilience4j是否会在Greenwich版本中成功孵化(应该是不会)、spring-cloud-netflix-concurrency-limits 文档一行都没有等等(搞不好项目被直接干掉也不一定……)还有很多其它未确定的点,导致笔者最终选择使用Finchley作为博客基础版本。未来,在Greenwich正式发布后,考虑升级到Greenwich,或者以番外的形式补充。

问:系列课程怎么规划的?

答:分为主线故事和番外。主线故事讲Eureka、Ribbon、Feign、Hystrix、Zuul、Spring Cloud Config、Spring Cloud Gateway、Spring Cloud Sleuth、Spring Cloud Stream;番外讲Spring Cloud Consul、Spring Cloud R4j、Nacos、Sentinel;另外讲持续集成、持续发布、代码质量控制……暂时是这么规划的。

问:我能从这套课程获得什么?

答:学习完,能比较深入了解Spring Cloud各组件的使用套路、能避过N多常见的坑(诸如Feign配置坑啦、Ribbon配置坑啦、父子上下文坑啦、状态UNKONWN坑啦,你可能不知道我在说什么,没关系,以后遇到了再来查文档就行)、理解各组件的工作原理及组件之间的关系。

问:收费吗?

答:免费。极客时间曾两度找我约稿,我也确实考虑过收费。钱是好东西,我不是圣人,不过还是放弃了,赚钱的方式有很多,开源是我热爱的。我只要大家在提建议意见的时候别那么难听/难看就知足了。(为什么这么说,大家可以回溯一下我当初Spring Cloud开源视频下面的评论。太TM难看了)

问:我该怎么学习这套教程呢?

答:我会在你需要注意的文字上【加粗】,重要知识点标记【重要】,在能拓展你视野的地方标记【TIPS】,在坑或者需要重点关注的地方标记【WARNING】;另外绝对不要忘记【拓展阅读】——这将是是拓展你知识面、开拓技术视野的一个重要途径。记住,永远别只去学习知识,知识是无穷无尽的,对于软件,知识还可能会变……你应该提升的是学习能力,并开拓技术视野。随着微服务/Cloud Native的深入人心,未来必然是整合能力 > 单项技术能力。

问:更新频率?不会太监吧?

答:目前已经完稿21篇,每周规划3更,但不固定周几更新。至于是否太监,我只能尽量不,我不是专职写开源文档的……工作很忙,一般得十点才能到宿舍,开始自己的生活;不一般的时候,没有生活。总之呢,看的人越多,我也会越有激情啊!

问:你TM自问自答跟个精神病一样烦不烦?

答:我TM年纪大了,废话多点不可以吗……

最后说一下,原创不易!如果课程对您有帮助,不要吝啬,请点转发!请喝咖啡就算了,咖啡让我失眠^_^

让我把废话到此为止吧!Let’s roll!

Spring Cloud简介

尽管Spring Cloud带有“Cloud”的字样,但它并不是云计算解决方案,而是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式的工具集。

使用Spring Cloud开发的应用程序非常适合在Docker或者PaaS(例如Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。云原生(Cloud Native)可简单理解为面向云环境的软件架构。说到云原生,就不得不提一下《十二要素应用宣言(12-factor Apps)》,这是云原生架构的方法论与最佳实践。

拓展阅读

《Cloud Native Application》电子书:https://pivotal.io/platform-as-a-service/migrating-to-cloud-native-application-architectures-ebook
《十二要素应用宣言(12-factor Apps)》中文版:https://12factor.net/zh_cn/
核心功能

Distributed/versioned configuration 分布式/版本化的配置管理
Service registration and discovery 服务注册于服务发现
Routing 路由
Service-to-service calls 端到端的调用
Load balancing 负载均衡
Circuit Breakers 断路器
Global locks 全局锁
Leadership election and cluster state 选举与集群状态管理
Distributed messaging 分布式消息
版本简介

我们知道,大多数Spring项目都是以“主版本号.次版本号.增量版本号.里程碑版本号”的形式命名版本号的,例如Spring Framework稳定版本4.3.5.RELEASE、里程碑版本5.0.0.M4等。其中,主版本号表示项目的重大重构;次版本号表示新特性的添加和变化;增量版本号一般表示bug修复;里程碑版本号表示某版本号的里程碑。

然而,Spring Cloud并未使用这种方式管理版本。下面我们来详细探讨一下Spring Cloud的版本。

我们来看一下Spring Cloud的版本,如图所示。

Spring Cloud版本

由图可知,Spring Cloud是以英文单词 SRX 的形式命名版本号的。那么英文单词和SR分别表示什么呢?

Spring Cloud是一个综合项目,它包含很多的子项目。由于子项目也维护着自己的版本号,Spring Cloud采用了这种版本命名方式,从而避免与子项目的版本混淆。其中,英文单词叫做“release train”,Angel、Brixton、Camden等都是伦敦地铁站的名称,它们按照字母顺序发行,我们可将其理解为主版本的演进。SR表示“Service Release”,一般表示Bug修复;在SR版本发布之前,会先发布一个Release版本,例如Camden RELEASE。

经过以上讲解,相信大家就能很好地理解Spring Cloud的版本了。例如,Camden SR3表示Camden版本的第3次Bug修复版本。

TIPS

Spring Cloud版本发布记录可详见:https://github.com/spring-cloud/spring-cloud-release/releases ,从中我们可清晰看到Spring Cloud版本发布的时间及先后顺序。

Spring Cloud版本演进计划:https://github.com/spring-cloud/spring-cloud-release/milestones ,从中我们可了解Spring Cloud的版本演进计划,例如计划什么时间点发布什么版本等。

事实上,Spring有不少项目使用类似的命名方式。例如Spring Data、Spring Cloud Stream等。

子项目一览

理解Spring Cloud的版本后,我们来看一下各版本Spring Cloud包含的子项目及版本。不同的Spring Cloud版本有不同的子项目:

Component Edgware.SR5 Finchley.SR2 Finchley.BUILD-SNAPSHOT
spring-cloud-aws 1.2.3.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-bus 1.3.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cli 1.4.1.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-commons 1.3.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-contract 1.2.6.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-config 1.4.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-netflix 1.4.6.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-security 1.2.3.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cloudfoundry 1.1.2.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-consul 1.3.5.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-sleuth 1.3.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-stream Ditmars.SR4 Elmhurst.SR1 Elmhurst.BUILD-SNAPSHOT
spring-cloud-zookeeper 1.2.2.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-boot 1.5.16.RELEASE 2.0.6.RELEASE 2.0.7.BUILD-SNAPSHOT
spring-cloud-task 1.2.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-vault 1.1.2.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-gateway 1.0.2.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-openfeign 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-function 1.0.1.RELEASE 1.0.0.RELEASE 1.0.1.BUILD-SNAPSHOT
Spring Cloud/Spring Boot兼容性【重要】

Spring Cloud版本 Spring Boot版本
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
可前往https://spring.io/projects/spring-cloud#overview查看版本兼容性。

本文链接:跟我学Spring Cloud(Finchley版)-01-开篇
转载声明:本博客由周立创作,采用 CC BY 3.0 CN 许可协议。

gaodevops