一、概览

  根据百度百科的描述,微服务架构是一项在云中部署应用和服务的新技术。而SpringCloud是微服务架构思想的一个具体实现,它为开发人员提供了构建分布式系统中一些常见模式的工具(服务注册与发现、熔断器、分布式配置、网关、控制总线等),SpringCloud是基于SpringBoot框架,它不是重复造轮子,而是将第三方实现的微服务应用的一些模块集成,准确来说,SpringCloud是一个容器。

二、SpringCloud与Dubbo对比

  目前在工作中一直用的是Dubbo2.7,趁着空闲时间,学习一下SpringCloud,看了网上很多关于二者对比。

以下图片及内容部分转自(https://www.cnblogs.com/xishuai/archive/2018/04/13/dubbo-and-spring-cloud.htmlhttps://blog.csdn.net/zhangweiwei2020/article/details/78646252),如有侵权,请联系删除。

  打个比方:SpringCloud相当于整机,组件都相当完整;而Dubbo相当于组装机,组件可以按自己需求自由选择;整体来说,整机的性能有保证,组装的机子更自由。

  

  Dubbo专注于RPC和服务治理,Spring Cloud则是一个微服务架构生态。

三、两者运行流程对比

(1)Dubbo

  每个组件都是需要部署在单独的服务器上,GateWay用来接收前端请求、聚合服务,并批量调用后台原子服务、每个Service单独与DB交互。

  

  ①GateWay:前置网关,具体业务操作,GateWay通过Dubbo提供的负载均衡机制自动完成(Dubbo本身并没有提供网关)

   ②Service:原子服务,只提供该业务相关的原子服务

  ③Zookeeper:原子服务注册到ZK上。

(2)SpringCloud

  

  ①所有请求都统一通过网关(Zuul)来访问内部服务

  ②网关接收到请求后,从注册中心(Eureka)获取可用服务

  ③由Ribbon进行负载均衡后,分发到后端的具体实例

  ④微服务之间通过Feign进行通信业务处理

(3)总结

  ①业务部署方式相同,都需要一个前置网关来隔绝外部直接调用原子服务的风险。

  ②Dubbo需要自己开发一套API网关(目前我所在公司是公司开发网关API+分布式配置Disconf,disconf---分布式配置管理平台的搭建(linux版本)),而SpringCloud则可以通过Zuul配置即可完成网关定制。

(4)优缺点

Dubbo优点:

       ①支持RPC调用,性能较好

       ②支持多种序列化协议,如Hessian、Http、WebService

       ③Dubbo Admin后台管理功能强大,提供了权重调节、负载均衡等

       ④中文文档比较全面

Dubbo不足:

       ①Registry严重依赖第三方组件(Zookeeper、Redis等),当这些组件出现问题时,服务调用很快就会中断。

       ②Dubbo只是实现了服务治理,其他微服务框架并未包含,如果需要使用则需要结合第三方框架实现(百度分布式配置Disconf、京东服务跟踪Hydra)、开发成本较大

Spring Cloud优点:

       ①有强大的Spring社区、NetFlix等公司支持,且开源社区贡献非常活跃

       ②分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体

       ③基于SpringBoot,具有简单配置、快速开发、轻松部署、方便测试的优点

       ④支持REST服务调用,相对于RPC,更加轻量化和灵活,有利于跨语言服务的实现以及服务的发布部署,结合Swagger实现服务的文档一体化

       ⑤提供了Docker及Kubernetes微服务编排支持

Spring Cloud不足:

       ①REST服务调用性能会比RPC性能较低

       ②Spring Cloud整合了大量的组件,相关文档比较复杂,需要针对性的阅读

       ③支持REST服务调用,可能因为接口定义过轻,导致定义文档与实际实现不一致导致服务集成时的问题(可以使用统一文档和版本管理解决,比如Swagger)

四、SpringCloud学习

  目前Spring Cloud也是非常火热的,社区更新也比较快,所以什么都学一点,生活更多彩一些。下面正式开始demo学习Spring Cloud,并附上结构图。

五、Spring Cloud学习总结

  理无专在、学无止境。

SpringCloud全家桶学习之概览(一)的更多相关文章

  1. SpringCloud全家桶学习之Feign负载均衡----Feign(四)

    一.Feign概述 (1)Feign是什么? 官网地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-f ...

  2. SpringCloud全家桶学习之一阶段总结(一)

    一.概述 前几篇小博客记录了我学习SpringCloud组件的过程,并与工作中所用的Dubbo框架做了一点比较,基本组件:Eureka.Ribbon.Hystrix.Feign.Zuul.Config ...

  3. SpringCloud全家桶学习之分布式配置中心----Config(七)

    一.概述 (1)背景 微服务意味着将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中出现大量的服务.由于每个服务都需要配置必要的配置信息才能运行,所以一套集中式的.动态的配置管理 ...

  4. SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)

    一.Eureka服务注册与发现 (1)Eureka是什么? Eureka是NetFlix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故 ...

  5. SpringCloud全家桶学习之消息总线---SpringCloud Bus

    一.概述 ConfigClient(微服务)从ConfigServer端获取自己对应的配置文件,但是目前的问题是:当远程git仓库配置文件发生改变时,每次都是需要重启ConfigCient(微服务), ...

  6. SpringCloud全家桶学习之断路器---Hystrix(五)

    目前我也在摸索着学习Spring Cloud,本节主要摸索的是服务熔断.服务降级.Hystrix服务监控. 一.Hystrix概述 (1)服务雪崩 服务雪崩:多个微服务之间调用的时候,假设微服务A调用 ...

  7. SpringCloud全家桶学习之路由网关----Zuul(六)

    一.Zuul概述 (1)Zuul是什么? Zuul包含了对请求的路由和过滤的两个最主要的功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础:而过滤功能则负责对请求的 ...

  8. SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)

    一.Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端  负载均衡的工具(这里区别于nginx的负载均衡).简单来说,Ribbon是Netf ...

  9. 框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)

    ​ 题外话: 看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boo ...

随机推荐

  1. Linux 配置mysql 远程连接

    1.首先用root用户登录mysql mysql -u root -p 2.新建用户 use mysql; select host,user from user;(查看现有用户) CREATE USE ...

  2. flask入门(一)

    flask是一个轻量级的框架,据说跟django跟比是真的轻. 首先要先配置一个虚拟环境,flask项目需要在那个虚拟环境里运行,这里需要用的venv库实在python3里的标准库,不过有的linux ...

  3. 如何在Word中批量选中特定文本

    如何在Word中批量选中特定文本 举个例子,我们对如下文本进行操作,将文本中所有的“1111111”标红,所有的“2222222”标绿,所有的“3333333”标蓝 在Word中找到“查找”下的“高级 ...

  4. java基础之 开发环境配置

    一.Window 第一步:下载JDK 首先,我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/download ...

  5. 两个map合并

    两个map合并所用函数为:putAll package myProject; import java.util.HashMap; import java.util.Map; public class ...

  6. HTML5-语义化

    什么是语义化?就是用合理.正确的标签来展示内容,比如h1~h6定义标题. 语义化优点: 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权 ...

  7. MySQL学习(九)小结

    redo-log 和 bin-log 是如何联系起来的? update 语句在更新的时候先更新内存后,写 redo-log 然后 bin-log ,其中后面一步是使用了两阶段提交, 也就是每一个更新都 ...

  8. powerdesigner16.5改变数据模型字体大小

    1. 点击 2. 选择 3. 选择完点击确定后: 4. 点击设为默认:再点ok

  9. CentOS 7 使用笔记

    一.下载.解压或安装等命令: 目前自己用过的三个下载及安装命令:curl.wget.yum. yum用法: $ sudo yum install libpng16-1.6.29-alt1.i586.r ...

  10. webpack 打包增加版本信息

    What do we need? 笔者目的是在vue项目打包后的 dist/index.html 文件中写入本次打包git用户.最后一次git提交信息,这样做的目的是便于线上项目的管理和防止同事之间的 ...