SpringCloud(一)SpringCloud的简单概述以及与Dubbo对比
SpringCloud概述
一、回顾微服务
什么是微服务?微服务(Microservice Architecture)是近几年流行的一种架构思想,目前而言,对于微服务,业界没有一个统一的标准的定义。
通常而言,微服务架构是一种架构模式,或者说是一种架构风格,它提倡将单一的应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程内,服务之间相互协调相互配置,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中。
微服务架构的四个核心问题:
- 服务很多,客户端该如何访问? —— API 网关、zuul组件
- 这么多服务?服务之间如何通信? —— HTTP、RPC
- 这么多服务?如何治理? —— 注册和发现,zookeeper
- 服务挂了怎么办? —— 熔断机制
二、SpringCloud 入门概述
2.1 什么是SpringCloud
官网:https://spring.io/projects/spring-cloud#learn
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。
Spring Cloud 是一个由众多独立子项目组成的大型综合项目,每个子项目有不同的发行节奏,都维护着自己的发布版本号。Spring Cloud通过一个资源清单BOM(Bill of Materials)来管理每个版本的子项目清单。为避免与子项目的发布号混淆,所以没有采用版本号的方式,而是通过命名的方式。(命名方式采用伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序)
Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
2.2 Spring Cloud 优缺点
其主要优点有:
- 集大成者,Spring Cloud 包含了微服务架构的方方面面。
- 约定优于配置,基于注解,没有配置文件。
- 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。
- 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
- 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。
接下来,我们看下它的缺点:
- 项目结构复杂,每一个组件或者每一个服务都需要创建一个项目。
- 部署门槛高,项目部署需要配合 Docker 等容器技术进行集群部署,而要想深入了解 Docker,学习成本高。
Spring Cloud 的优势是显而易见的。因此对于想研究微服务架构的学者来说,学习 Spring Cloud 是一个不错的选择。
2.3 SpringCloud 和 SpringBoot
- SpringBoot 专注于快速方便的开发单个个体微服务
- SpringCloud 是关注全局的微服务协调调整治理框架,它将 SpringBoot 开发的一个个单体微服务整合并管理起来,并为各个微服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、决策精选、分布式会话等等集成服务。
- SpringBoot 可以离开 SpringCloud 独立使用开发项目,但是 SpringCloud 离不开 SpringBoot,属于依赖关系。
总结:SpringBoot 专注于快速、方便的开发单个个体微服务;SpringCloud 是关注全局的微服务协调调整治理框架
2.4 Dubbo和SpringCloud
Dubbo | Spring Cloud | |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | SpringBoot Admin |
断路器 | 不完善 | Spring Cloud Netfilx Hystrix |
服务网关 | 无 | Spring Cloud Netfilx Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
最大区别:SpringCloud 抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。
严格来讲,两种方式各有优劣。虽然一定程度上说,后者牺牲了服务调用的性能,但也避免了原生RPC带来的问题,而且REST比RPC更加灵活,服务提供方和调用方法的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下显得更加合适。
2.5 重要文档(中文)
-
Spring Cloud Netflix:https://www.springcloud.cc/spring-cloud-netflix.html
-
SpringCloud:https://www.springcloud.cc/spring-cloud-dalston.html