Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
github网址:https://github.com/spring-cloud
英文官网:https://spring.io/projects/spring-cloud
中文文档官网:https://www.springcloud.cc/
其中五大组件包括:Eureka、Zuul、Feign、Hystrix、Config。
Spring Cloud Alibaba:
具体内容请看我的另外一篇文章:SpringCloud之Eureka服务注册中心
这里对zookeeper不做介绍,感兴趣可以看看:介绍Spring Cloud Zookeeper
引用别人的文章:Consul详解
在看上面图的时候,如果对AP、CP这些定义不了解,请先看关于CAP的一些概念:CAP简介。
看完后我们可得知这三个注册中心的区别主要在于:
具体内容请看我的另外一篇文章:springcloud之Ribbon负载均衡简介
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。简单点说,其主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接,权重等)去连接这些机器。
具体内容请看我的另外一篇文章:Springcloud之OpenFeign服务调用
当今是微服务横行的时代,各个微服务之间相互调用是一件再平常不过的时候。在采用HTTP协议进行通信的微服务中,我们自己可能去封装一个HttpClient工具类去进行服务间的调用,封装一个HttpClient工具,我们就需要考虑一下这些事情:
为此,大名鼎鼎的Feign应时而生,我们在学习Feign的实现的时候,我们应该带着这些问题去学习Feign的实现原理。
具体内容请看我的另外一篇文章:SpringCloud之Hystrix断路器
Hystrix是一个应用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix 能够保证在一个依赖出问题的情况下,不会导致整个体系服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控 (类似熔断保险丝) ,向调用方返回一个服务预期的,可处理的备选响应 (FallBack) ,而不是长时间的等待或者抛出调用方无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
具体内容请看我的另外一篇文章:SpringCloud之Gateway服务网关
这里其实本应该介绍另外一种服务网关Zuul,毕竟这个才是Spring自己的技术,但是鉴于Zuul1.x与Gateway相比逊色不少,并且Spring自己推出的升级版Zuul2.x暂未整合,因此我们这里主要介绍Gateway。具体Zuul和gateway的区别上面文章里也有写到。
我们这里可以简单的理解服务网关 = 路由转发 + 过滤器:
具体内容请看我的另外一篇文章:SpringCloud之Config分布式配置中心
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config分为服务端和客户端两部分。 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口,客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
具体内容请看我的另外一篇文章:SpringCloud之bus消息总线
一句话总结就是屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。实现消息中间件之间的交互,目前只支持kafka与rabbitmq。
写的太累了,因为后续我们会继续整理Nacos,因此这个暂时不进行总结,这里提供资料:
官方文档:Spring Cloud Stream 官方文档
Spring Cloud Stream中文指导手册:Spring Cloud Stream中文指导手册
这里提供一个思维导图,大家可以根据这个思路进行学习:
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
SpringCloud Sleuth 给我们提供了解决方案,它集成了Zipkin、HTrace 链路追踪工具,用服务链路追踪来快速定位问题。Zipkin使用较多。Zipkin 主要由四部分构成:收集器、数据存储、查询以及 Web 界面。Zipkin 的收集器负责将各系统报告过来的追踪数据进行接收;而数据存储默认使用 Cassandra,也可以替换为 MySQL;查询服务用来向其他服务提供数据查询的能力,而 Web 服务是官方默认提供的一个图形用户界面。
官方文档:SpringCloud Sleuth官方文档
GitHub路径:spring-cloud/spring-cloud-sleuth