SpringCloud(一)SpringCloud的简单概述以及与Dubbo对比

SpringCloud概述


一、回顾微服务

什么是微服务?微服务(Microservice Architecture)是近几年流行的一种架构思想,目前而言,对于微服务,业界没有一个统一的标准的定义。

通常而言,微服务架构是一种架构模式,或者说是一种架构风格,它提倡将单一的应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程内,服务之间相互协调相互配置,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中。

微服务架构的四个核心问题:

  • 服务很多,客户端该如何访问? —— API 网关、zuul组件
  • 这么多服务?服务之间如何通信? —— HTTP、RPC
  • 这么多服务?如何治理? —— 注册和发现,zookeeper
  • 服务挂了怎么办? —— 熔断机制

二、SpringCloud 入门概述

2.1 什么是SpringCloud

官网:https://spring.io/projects/spring-cloud#learn

SpringCloud(一)SpringCloud的简单概述以及与Dubbo对比

Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。

Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。

Spring Cloud 是一个由众多独立子项目组成的大型综合项目,每个子项目有不同的发行节奏,都维护着自己的发布版本号。Spring Cloud通过一个资源清单BOM(Bill of Materials)来管理每个版本的子项目清单。为避免与子项目的发布号混淆,所以没有采用版本号的方式,而是通过命名的方式。(命名方式采用伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序)

Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。

2.2 Spring Cloud 优缺点

其主要优点有:

  1. 集大成者,Spring Cloud 包含了微服务架构的方方面面。
  2. 约定优于配置,基于注解,没有配置文件。
  3. 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。
  4. 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
  5. 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。

接下来,我们看下它的缺点:

  1. 项目结构复杂,每一个组件或者每一个服务都需要创建一个项目。
  2. 部署门槛高,项目部署需要配合 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