一、Spring Cloud是什么?
spring cloud是微服务架构的一整套微服务解决方案的技术栈,是这些技术栈的框架集合,包含了服务治理、注册中心、配置中心、客户端负载均衡、网关、限流熔断、分布式链路追踪、分布式事务等技术栈,这些技术栈提供了微服务架构存在的各种问题的解决方案。
二、为什么用Spring Cloud?
-
单体架构的开发流程
回想我们以前单体架构的项目,所有功能都在一个项目里面,包括前端页面和后端的各个管理模块。部署的时候直接打成一个war包,然后重启tomcat服务器。这样的单体架构优点对小项目来说,开发维护简单。但是对大型项目来说,每个模块紧密耦合,每修改一个小点的功能后重新部署导致整个系统不可用,水平扩展的时候不能针对某一个模块,要整个项目(包含各个模块)一起水平扩展,导致资源浪费。 -
微服务架构,以及微服务架构后出现的问题
针对单体架构的问题,我们微服务架构针对每个模块进行了原子划分,每个模块划分为一个微服务,整个系统可以划分为很多个微服务。使用了微服务架构后系统更容易拓展,但是也增加了开发和维护的难度,出现了很多新的问题。
1)首先,微服务多了之后,我们如何知道这些微服务的健康状态,管理这些微服务
2)每个微服务之前如何进行远程调用其他微服务,微服务成百上千,IP地址和端口号不能单体架构一样写死调用了
3)众多微服务,如果进行参数配置,如何快速修改配置文件?逐个配置是很麻烦的
4)客户端如何访问我们这些众多的微服务,如果写死访问的每个微服务的IP在客户端,那么当微服务的IP和端口变化的时候也要修改客户端,而且微服务众多
5)微服务之间相互调用,如果有一些微服务出错了或宕机了,可能导致出现雪崩,从而影响整个微服务系统,如何解决
6)多个微服务之间的服务调用,如何保证分布式事物的数据一致性
注:我下面描述的是SpringCloud、SpringCloud Alibaba针对这些问题的解决方案
- 针对这些问题,Spring Cloud的解决方案
1). 在SpringCloud里面,通过注册中心来管理微服务,每个微服务提供自己的IP和端口向注册中心注册,如果微服务关掉了,会剔除出注册中心,SpringCloud提供了Eureka、Nacos的注册中心来解决微服务治理的问题方案
2)在微服务中实现远程服务调用,SpringCloud提供了Ribbon、Feign组件来处理的解决方案。这些远程调用向注册中心发现服务,获取相关服务的IP地址、端口的列表,然后客户端负载均衡进行调用其他服务。
3)针对分布式配置,SpringCloud提供了Spring Cloud Config的解决方案以及使用Nacos配置中心的方案,管理每个微服务的配置
4)外网客户端访问,都经过网关,然后网关也会从注册中心发现要访问的服务的IP列表,通过网关转发这些请求到相关内部的服务,SpringCloud提供的解决方案是Spring Cloud Gateway
5)SpringCloud提供的Hystrix进行熔断保护以及SpringCloudAlibaba提供了Sentinel的微服务容错的解决方案
6)SpringCloudAlibaba提供了Seata组件来保证分布式事务一致性
三、Spring Cloud技术架构图(分布式系统架构)
springcloud针对上面的问题,提供了一站式的解决方案,集成了这些方案后的系统架构是怎么样的,根据我目前遇到过的分布式系统架构,画一张大概的架构图,如下:
四、Spring Cloud的入门学习
根据自己的学习,记录了一些入门的笔记、学习文章
项目架构:springboot(2.1.7)+springcloud(Greenwich.SR2)+spring-cloud-alibaba(2.1.1)
springboot与springcloud、spring cloud alibaba对应的兼容版本如下:
Spring Boot | Spring Cloud | Spring Cloud Alibaba (孵化前) | Spring Cloud Alibaba(孵化后) |
---|---|---|---|
2.1.x | Greenwich | 0.9.x | 2.1x |
2.0.x | Finchley | 0.2.x | 2.0x |
1.5.x | Edgware | 0.1.x | 1.5x |
1.5.x | Dalston | 0.1.x | 1.5x |
spring cloud使用nacos作为注册中心
spring cloud基于Ribbon和Feign组件实现服务调用
spring cloud使用dubbo实现服务调用
spring cloud gateway网关的简单使用
spring cloud nacos作为配置中心的使用
spring cloud alibab sentinel的概念和简单使用
微服务架构的分布式事务的解决方案总结
spring cloud alibaba seata的使用,解决分布式事务问题
spring boot使用kafka消息队列
kafka如何保障消息可靠性