SpringCloud- 基本概念
1.1 什么是SpringCloud?
Spring官网:https://spring.io/
【维基百科】Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud是一系列框架的有序集合(Spring Cloud是一个规范)开发服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。利用Spring Boot的开发便利性简化了微服务架构的开发(自动装配)。
需要注意的是,Spring Cloud是一套用于构建微服务架构的规范,而不是一个可以拿来即用的框架(所谓规范就是应该有哪些功能组件,然后组件之间怎么配合,共同完成什么事情)。在这个规范之下第三方的Netflix搞了一套 ,简称SCN。 Spring Cloud 吸收了Netflix公司的产品基础之上自己也搞了几个组件,阿里巴巴在之前的基础上搞出了一堆微服务组件,Spring Cloud Alibaba(SCA),这些才是Spring Cloud规范的实现。
1.2 SpringCloud和SpringBoot关系
- SpringBoot: 专注于快速方便的开发单个个体微服务。
- SpringCloud: 是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等集成服务。
- SpringBoot可以离开SpringClooud独立使用,开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架。
1.3 Spring Cloud 架构
Spring Cloud是一个微服务相关规范,这个规范意图为搭建微服务架构提供一站式服务,采用组件(框架)化机制定义一系列组件,各类组件针对性的处理微服务中的特定问题,这些组件共同来构成Spring Cloud微服务技术栈。
1.3.1 Spring Cloud 核心组件
Spring Cloud 生态圈中的组件,按照发展可以分为第一代 Spring Cloud组件和第二代 SpringCloud组件。
组件 | 第一代 Spring Cloud(Netflix,SCN) | 第二代 Spring Cloud(主要就是SpringCloud Alibaba,SCA) |
---|---|---|
注册中心 | Netflix Eureka | 阿里巴巴 Nacos |
客户端负载均衡 | Netflix Ribbon | 阿里巴巴 Dubbo LB、Spring Cloud Loadbalancer |
熔断器 | Netflix Hystrix | 阿里巴巴 Sentinel |
网关 | Netflix Zuul:性能一般,未来将退出 Spring Cloud 生态圈 |
官方 Spring Cloud Gateway |
配置中心 | 官方 Spring Cloud Config | 阿里巴巴 Nacos |
服务调用 | Netflix Feign | |
消息驱动 | 官方 Spring Cloud Stream | |
链路追踪 | 官方 Spring Cloud Sleuth/Zipkin |
1.3.2 Spring Cloud 体系结构
Spring Cloud中的各组件协同工作,才能够支持一个完整的微服务架构。比如
1.4 Dubbo和SpringCloud对比
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,基于RPC调用,对于目前使用率较高的Spring Cloud Netflix来说,它是基于HTTP的,所以效率上没有Dubbo高,但问题在于Dubbo体系的组件不全,不能够提供一站式解决方案,比如服务注册与发现需要借助于Zookeeper等实现,而SpringCloud Netflix则是真正的提供了一站式服务化解决方案,且有Spring大家族背景。
组件 | Dubbo | Spring Cloud |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | / | Spring Cloud Netflix Zuul |
分布式配置 | / | Spring Cloud Config |
服务跟踪 | / | Spring Cloud Sleuth |
消息总线 | / | Spring Cloud Bus |
数据流 | / | Spring Cloud Stream |
批量任务 | / | Spring Cloud Task |
最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。
严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。
解决的问题域不一样:Dubbo的定位是一款RPC框架,Spring Cloud的目标是微服务架构下的一站式解决方案。