首先讲一下我为什么要写这一系列的文章,现在网上大量的springcloud相关的文章,使用的springboot和springcloud的版本都相对比较老,很多还是在使用springboot1.x的版本,如果尝鲜想使用springboot2.x的版本,很多配置都和之前的不一样,有了大量的修改,很多刚开始学习的朋友可能试一试搭不起来就放弃了,本系列教程就是帮助刚接触springcloud的朋友简单上手,快速起步。
springboot进入2.x以后,历经一年多的修修改改,终于到了2.1.x的版本,相对较为稳定,本系列教程将使用目前最新的springboot(2.1.6.RELEASE)和springcloud(Greenwich.SR1)版本(如无特殊说明)。
- 什么是springcloud?
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
— 以上内容摘自百度百科
百度百科的解释看起来文绉绉的,可能刚接触的朋友很多新名词都看不大懂。我的理解就是springcloud为项目微服务化提供了一系列的工具,常用的包括注册中心,断路器,配置中心,消息总线等等,简单理解就是springcloud提供了一系列的工具或者框架,当然,还包含很多设计思想。
- 微服务架构选型为什么选择springcloud而不会dubbo?
这里仅代表我的个人观点,欢迎交流:)
说到这个,就要先聊一下什么是微服务了。
微服务(Microservices): 是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
Dubbo: Dubbo是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。简单的说,Dubbo 就是个服务框架,说白了就是个远程服务调用的分布式框架。
springcloud: springcloud是一整套的微服务解决方案,有一张很有名的对比图可以清晰看到dubbo和springcloud功能对比,如下:
如果微服务架构选型选择了dubbo,那么后续一些其他的组件,还需要我们自己去评估目前市面上一些开源的组件是否符合我们的需要,而如果架构选型选择了springcloud,那么就能省心很多,springcloud本身就提供了一整套的微服务的解决方案,虽然有很多组件目前看起来依然不是很成熟,不过这依然大大降低了我们在架构选型上的工作量。
- springcloud一些常用组件
以下排序不分先后
Spring Cloud Config 配置中心: 利用 Git 集中管理程序的配置。
Spring Cloud Netflix Eureka: 服务中心(类似于管家的概念,需要什么直接从这里取,就可以了),一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Spring Cloud Netflix Hystrix 熔断器: 容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Spring Cloud Netflix Zuul 网关: 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Web 网站后端所有请求的前门。
Spring Cloud Netflix Archaius: 配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
Spring Cloud Netflix Ribbon: 负载均衡。
Spring Cloud Netflix Fegin: REST客户端。
Spring Cloud Bus: 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化。
Spring Cloud Security: 安全控制。
Spring Cloud Sleuth: 分布式链路监控,SpringCloud 应用的分布式追踪系统,和 Zipkin,HTrace,ELK 兼容。
Spring Cloud Stream: 消息组件,基于 Redis,Rabbit,Kafka 实现的消息微服务,简单声明模型用以在 Spring Cloud 应用中收发消息。