1. 什么是SpringCloud
1. 前言
1.1 什么是SpringCloud
SpringCloud=分布式微服务架构的一站式解决方案
,是多种微服务架构微服务架构&spm=1001.2101.3001.7020)落地技术的集合体(微服务全家桶)。
查看官网:https://spring.io/
Spring Cloud本身不是新的框架,是一个全家桶式的技术栈,包含了很多组件,它是一系列框架的有机组合,利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。
1.2 SpringCloud与SpringBoot
想要使用一个技术,我们必须了解对应的版本环境,使用和学习时尽量不要用过时的。
1.2.1 查看SpringCloud版本(2021.0.3)
了解SpringCloud版本https://spring.io/projects/spring-cloud :
spring cloud 版本名: 之前的spring cloud 版本名是根据英国伦敦地铁站名称的英文名称并按照字母a-z进行排序: Angel(天使)、Brixton(布里斯顿)、Camden(卡姆登)、Dalston、Edgware、Finchley、Greenwich、Hoxton
当SpringClould发布的内容积累到临近点或者一个重大bug被解决后,会发布一个“services release”版本,简称SRX版本,比如:Greenwich.SR2就是发布Greenwich版本的第二个SRX版本。
但是在2020年改变了命名规则,使用了全新的 “日历化” 版本命名方式。
日历式命名: Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名规则 YYYY:表示 4 位年份 MINOR:代表一个递增的数字,每年以 0 开始递增 MICRO:代表版本号后缀,就和之前使用的 .0 类似于 .RELEASE 一样,.2 类似于 .SR2。 预发布版本的后缀分隔符也从 . 变更为 -,如:2020.0.0-M1 和 2020.0.0-RC2 命名所示。 同时,Spring Cloud 将停止给快照版本添加 BUILD- 前缀,如:2020.0.0-SNAPSHOT 命名所示。
1.2.2 查看SpringBoot版本
git源码地址:https://github.com/spring-projects/spring-boot/releases可查看当前最新版本新特性,修复了哪些问题等:
也可官网查看版本:
1.2.3 技术版本选型
SpringCloud与springBoot有严格的版本依赖,查看相应的对照关系:
https://spring.io/projects/spring-cloud
更详细的版本信息可访问:https://start.spring.io/actuator/info将得到的json格式化,可清楚看到各版本更详细对照关系:
2. 系统架构演变
2.1 单体架构
后端服务的所有的功能集中在一个项目中。
应用服务和数据服务分离
缓存使用
集群处理
数据库的读写分离
反向代理和CDN加速
分布式文件系统和分布式数据库
还可以通过NoSQL数据和搜索引擎等来提供系统的处理能力
2.2 分布式架构
在上面所介绍的单体架构的基础上演变出来的。也就是将单体架构中相对独立的模块抽取出来建立成独立的系统,降低了各个模块之间的耦合性,提高了整体系统的性能和稳定性。
相比较在单体架构下的场景,在分布式环境下又会多出很多要处理的问题,比如服务的发现,服务的治理,服务调用,配置中心等等问题
微服务其实也就是分布式!微服务是在分布式的基础上抽取了公共模块,增加的复用性。让整个系统架构更加的合理科学。而我们要学习的SpringCloud是分布式微服务系统的一套很好的解决方案,在SpringCloud中提供了我们在微服务中会遇到的各种问题的解决方案。
3. Spring Cloud组件
SpringCloud是一系列框架的有序集合,微服务架构的集大成者,将一系列优秀的组件进行了整合。基于SpringBoot来构建。
3.1 Spring Cloud Netflix 组件
Spring Cloud Netflix框架刚好就满足了上面所有的需求,Spring Cloud Netflix包含的组件及其主要功能大致如下:
Eureka,服务注册和发现
,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。Zuul,网关
,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。Ribbon,即负载均衡
,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。Feign,服务客户端
,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。Hystrix,监控和断路器
。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。 Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。- Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。
3.2 Spring Cloud Alibaba 组件
由于SpringCloud Netflix版一些重要组件如注册中心Euraka、Ribbon已经不再迭代更新了,Spring Cloud Alibaba慢慢孵化出Spring Cloud Alibaba一套。
Spring Cloud Alibaba功能组件:
Nacos
:Spring Cloud Alibaba 对服务注册、配置中心与负载均衡功能都整合进 Nacos,有图形化界面,简化了微服务架构的复杂度。Sentinel
:服务保护组件也调整为 Sentinel,相较Hystrix功能更强大,使用也更加友好。把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。RocketMQ
:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。Dubbo
:高性能 Java RPC 框架。Seata
:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。Alibaba Cloud OSS
: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。Alibaba Cloud SchedulerX
: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。Alibaba Cloud SMS
: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
schedulerX、SMS、OSS等主要是阿里云的商业化产品就不再过多的进行介绍
3.3 SpringCloud其他相关组件
整个SpringCloud生态,不仅Netflix和Alibaba贡献了相关组件,还有Spring本身贡献了许多组件:
Spring Cloud Netflix | Spring Cloud 官方 | Spring Cloud Zookeeper | Spring Cloud Consul | Spring Cloud Kubernetes | Spring Cloud Alibaba | |
---|---|---|---|---|---|---|
分布式配置 | Archaius | Spring Cloud Config | Zookeeper | Consul | ConfigMap | Nacos |
服务注册/发现 | Eureka | - | Zookeeper | Consul | Api Server | Nacos |
服务熔断 | Hystrix | - | - | - | - | Sentinel |
服务调用 | Feign | OpenFeign RestTemplate | - | - | - | Dubbo RPC |
服务路由 | Zuul | Spring Cloud Gateway | - | - | - | Nacos |
分布式消息 | - | SCS RabbitMQ | - | - | - | SCS RocketMQ |
负载均衡 | Ribbon | - | - | - | - | Dubbo LB |
分布式事物 | - | - | - | - | - | Seata |