前言·课程简介
最近挺多童鞋在公众号上催更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查看版本兼容性。