SpringCloud概述
一,Spring Cloud 是什么
【百度百科】Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发遍历性巧妙地简化了分布式系统基础设施的开发,如服务注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复造轮子,它只是将目前各家公司开发的比较成熟、经得起考验的服务框架组合起来,通过Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud 是一系列框架的有序集合(Spring Cloud 是一个规范)
开发服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。
利用Spring Boot的开发便利性简化了微服务架构的开发(自动装配)
这里,我们需要注意,Spring Cloud其实是一套规范,是一套用于构建微服务架构的规范,而不是一个可以拿来即用的框架(所谓规范就是应该有那些功能组件,然后组件之间怎么配合,共同完成什么事情)。在这个规范下第三方的Netflix公司开发了一些组件、Spring官方开发了一些框架/组件,包括阿里巴巴开发了一套框架/组件集合Spring Cloud Alibaba,这些才是Spring Cloud规范的实现。
二,Spring Cloud 解决什么问题
Spring Cloud 规范及实现意图要解决的问题其实就是微服务架构实施过程中存在的一些问题,比如微服务架构中的服务注册发现问题、网络问题(比如熔断场景)、统一认证安全授权问题、负载均衡问题、链路追踪等问题。
三,Spring Cloud 架构
如前所述,Spring Cloud 是一个微服务相关规范,这个规范意图为搭建微服务架构提供一站式服务,采用组件(框架)化机制定义一系列组件,各类组件针对性的处理微服务中的特定问题,这些组件共同来构成Spring Cloud 微服务技术栈。
1,Spring Cloud 核心组件
Spring Cloud 生态圈中的组件,按照发展可以分为第一代 Spring Cloud 组件和第二代 Spring Cloud 组件。
第一代 Spring Cloud (Netflix、SCN) | 第二代 Spring Cloud (主要就是 Spring Cloud Alibaba, SCA) | |
---|---|---|
注册中心 | Netflix Eureka | 阿里巴巴 Nacos |
客户端负载均衡 | Netflix Ribbon | 阿里巴巴 DubboLB、Spring Cloud Loadbalancer |
熔断器 | Netflix Hystirx | 阿里巴巴 Sentinel |
网关 | Netflix Zuul:性能一般,未来将退出Spring Cloud 生态圈 | 官方Spring Cloud Gateway |
配置中心 | 官方 Spring Cloud Config | 阿里巴巴 Nacos、携程Apollo |
服务调用 | Netflix Feign | 阿里巴巴 Dubbo RPC |
消息驱动 | 官方 Spring Cloud Stream | |
链路追踪 | 官方 Spring Cloud Sleuth/Zipkin | |
阿里巴巴seata分布式事务方案 |
2,Spring Cloud 体系结构 (组件协同工作机制)
Spring Cloud中的各组件协同工作,才能够支持一个完整的微服务架构。
比如:
- 注册中心负责服务的注册与发现,很好将各服务连接起来
- API网关负责转发所有外来的请求
- 断路器负责监控服务之间的调用情况,连续多次失败进行熔断保护
- 配置中心提供了统一的配置信息管理服务,可以实时的通知各个服务获取最新的配置信息
四,Spring Cloud 与 Dubbo 对比
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,基于RPC调用,对于目前使用率较高的Spring Cloud Netflix 来说,它是基于HTTP的,所以效率上没有Dubbo高,但问题在于Dubbo体系的组件不全,不能够提供一站式解决方案,比如服务注册与发现需要借助于Zookeeper等实现,而Spring Cloud Netflix 则是真正的提供了一站式服务化解决方案,且有Spring大家族背景。
前些年,Dubbo使用率高于Spring Cloud,但目前Spring Cloud在服务化/微服务解决方案中已经有了非常好的发展趋势。
五,Spring Cloud 与 Spring Boot 的关系
Spring Cloud 只是利用了Spring Boot 的特点,让我们能够快速的实现微服务组件开发,否则不使用Spring Boot的话,我们在使用Spring Cloud时,每一个组件的相关jar包都需要我们自己导入配置以及需要开发人员考虑兼容性等各种情况。所以Spring Boot是我们快速把Spring Cloud 微服务技术应用起来的一种方式。