Dubbo与Spring Cloud优缺点分析(文档学习个人理解)
创始人
2024-05-26 00:54:37
0

文章目录

  • 核心部件
  • 1、总体框架
    • 1.1 Dubbo 核心部件如下
    • 1.2 Spring Cloud 总体架构
  • 2、微服务架构核心要素
  • 3、通讯协议
    • 3.1 Dubbo
    • 3.2 Spring Cloud
    • 3.3 性能比较
  • 4、服务依赖方式
    • 4.1 Dubbo
    • 4.2 Spring Cloud
  • 5、组件运行流程
    • 5.1 Dubbo
    • 5.2 Dubbo 运行组件
    • 5.3 Spring Cloud
    • 5.4 Spring Cloud 运行组件
  • 6、微服务架构组成以及注意事项
    • 6.1 架构分解
    • 6.2 注意事项
  • 7、总结

核心部件

微服务的核心要素在于服务的服务的发现、注册、路由、熔断、降级、分布式配置,基于上诉几种必要条件对 Dubbo 和Spring Cloud 做出对比

1、总体框架

1.1 Dubbo 核心部件如下

  • Provider:暴露服务的提供方,可以通过jar或者容器的方式启动服务。
  • Consumer:调用远程服务的服务消费方
  • Registry:服务注册中和发现中心
  • Monitor:统计服务和调用次数,调用时间监控中心。(Dubbo 的控制台页面中可以显示,目前只有一个简单版本)
  • Container:服务运行的容器
    在这里插入图片描述

1.2 Spring Cloud 总体架构

  • Service Provider:暴露服务的提供方
  • Service Consumer:调用远程服务的服务消费方
  • Eureka Server:服务注册中心和服务发现中心
    在这里插入图片描述

总结:从整体架构上来看,二者模式接近,都需要服务提供方,注册中心,服务消费方

2、微服务架构核心要素

核心要素DubboSpring Cloud
服务注册中心Zookeeper、RedisSpring Cloud Netflix Eureka
服务调用方式RPCREST API
服务网关Spring Cloud Netflix Zuul
断路器不完善Spring Cloud Netflix Hystrix
分布式配置Spring Cloud Config
分布式追踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream 基于Redis,Rabbit,Kafka 实现的消息微服务
批量任务Spring Cloud Task

Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件,服务治理只是其中的一个方面。

Dubbo 提供了各种 Filter,对于上述中“无”的要素,可以通过扩展 Filter 来完善。例如:

  • 分布式配置:可以使用淘宝的 diamond、百度的 disconf 来实现分布式配置管理。
  • 服务跟踪:可以使用京东开源的 Hydra,或者扩展 Filter 用 Zippin 来做服务跟踪。
  • 批量任务:可以使用当当开源的 Elastic-Job、tbschedule。

总结 : 从核心要素来看,Spring Cloud 更胜一筹,在开发过程中只要整合 Spring Cloud 的子项目就可以顺利的完成各种组件的融合,而 Dubbo 却需要通过实现各种 Filter 来做定制,开发成本以及技术难度略高。

3、通讯协议

基于通讯协议层面对2种框架支持的协议类型以及运行效率方面进行比较

3.1 Dubbo

Dubbo 使用RPC通讯协议,提供序列化方式如下:

  • Dubbo:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
  • RMI:RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。
  • Hessian:Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 HTTP 通讯,采用 - Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。
  • HTTP:采用 Spring 的 Http Invoker 实现。
  • Webservice:基于 CXF 的 frontend-simple 和 transports-http 实现。

3.2 Spring Cloud

  • Spring Cloud 使用HTTP协议的REST API

3.3 性能比较

使用一个 Pojo 对象包含 10 个属性,请求 10 万次,Dubbo 和 Spring Cloud 在不同的线程数量下,每次请求耗时(ms)如下:

线程数DubboSpring Cloud
10线程2.756.52
20线程4.1810.03
50线程10.328.14
100线程20.1355.23
200线程42110.21

说明:客户端和服务端配置均采用阿里云的 ECS 服务器,4 核 8G 配置,Dubbo 采用默认的 Dubbo 协议。

总结 : Dubbo 支持各种通信协议,而且消费方和服务方使用长链接方式交互,通信速度上略胜 Spring Cloud,如果对于系统的响应时间有严格要求,长链接更合适。

4、服务依赖方式

4.1 Dubbo

服务提供方与消费方通过接口的方式依赖,服务调用设计如下:

  • Interface 层:服务接口层,定义了服务对外提供的所有接口。
  • Molel 层:服务的 DTO 对象层。
  • Business层:业务实现层,实现 Interface 接口并且和 DB 交互。

因此需要为每个微服务定义各自的 Interface 接口,并通过持续集成发布到私有仓库中。调用方应用对微服务提供的抽象接口存在强依赖关系,开发、测试、集成环境都需要严格的管理版本依赖。

通过 maven 的 install & deploy 命令把 Interface 和 Model 层发布到仓库中,服务调用方只需要依赖 Interface 和 Model 层即可。

在开发调试阶段只发布 Snapshot 版本,等到服务调试完成再发布 Release 版本,通过版本号来区分每次迭代的版本。通过 xml 配置方式即可接入 Dubbo,对程序无入侵。

在这里插入图片描述

4.2 Spring Cloud

服务提供方和服务消费方通过 Json 方式交互,因此只需要定义好相关 Json 字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵。
在这里插入图片描述

总结 : Dubbo 服务依赖略重,需要有完善的版本管理机制,但是程序入侵少。

而 Spring Cloud 通过 Json 交互,省略了版本管理的问题,但是具体字段含义需要统一管理,自身 Rest API 方式交互,为跨平台调用奠定了基础。

5、组件运行流程

5.1 Dubbo

下图中的每个组件都是需要部署在单独的服务器上,Gateway 用来接受前端请求、聚合服务,并批量调用后台原子服务。每个 Service 层和单独的 DB 交互。
在这里插入图片描述

5.2 Dubbo 运行组件

  • Gateway:前置网关,具体业务操作,Gateway 通过 Dubbo 提供的负载均衡机制自动完成。
  • Service:原子服务,只提供该业务相关的原子服务。
  • Zookeeper:原子服务注册到 ZK 上。

5.3 Spring Cloud

在这里插入图片描述

5.4 Spring Cloud 运行组件

  • 所有请求都统一通过 API 网关(Zuul)来访问内部服务。
  • 网关接收到请求后,从注册中心(Eureka)获取可用服务。
  • 由 Ribbon 进行均衡负载后,分发到后端的具体实例。
  • 微服务之间通过 Feign 进行通信处理业务。

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

Dubbo 需要自己开发一套 API 网关,而 Spring Cloud 则可以通过 Zuul 配置即可完成网关定制。使用方式上 Spring Cloud 略胜一筹。

6、微服务架构组成以及注意事项

到底使用是 Dubbo 还是 Spring Cloud 并不重要,重点在于如何合理的利用微服务。

下面是一张互联网通用的架构图,其中每个环节都是微服务的核心部分。
在这里插入图片描述

6.1 架构分解

  • 网关集群:数据的聚合、实现对接入客户端的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制等。
  • 业务集群:一般情况下移动端访问和浏览器访问的网关需要隔离,防止业务耦合。
  • Local
    Cache:由于客户端访问业务可能需要调用多个服务聚合,所以本地缓存有效的降低了服务调用的频次,同时也提示了访问速度。本地缓存一般使用自动过期方式,业务场景中允许有一定的数据延时。
  • 服务层:原子服务层,实现基础的增删改查功能,如果需要依赖其他服务需要在 Service 层主动调用。
  • Remote Cache:访问 DB 前置一层分布式缓存,减少 DB 交互次数,提升系统的TPS。
  • DAL:数据访问层,如果单表数据量过大则需要通过 DAL 层做数据的分库分表处理。
  • MQ:消息队列用来解耦服务之间的依赖,异步调用可以通过 MQ 的方式来执行。
  • 数据库主从:服务化过程中必经的阶段,用来提升系统的 TPS。

6.2 注意事项

  • 服务启动方式建议使用jar方式启动,启动速度快,更容易监控。
  • 缓存、缓存、缓存,系统中能使用缓存的地方尽量使用缓存,通过合理的使用缓存可以有效的提高系统的TPS。
  • 服务拆分要合理,尽量避免因服务拆分而导致的服务循环依赖。
  • 合理的设置线程池,避免设置过大或者过小导致系统异常。

7、总结

Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主。

虽然阿里内部原因 Dubbo 曾经一度暂停维护版本,但是框架本身的成熟度以及文档的完善程度,完全能满足各大互联网公司的业务需求。

如果我们使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中增加了使用 Dubbo 的难度。

Spring Cloud 是大名鼎鼎的 Spring 家族的产品, 专注于企业级开源框架的研发。

Spring Cloud 自从发布到现在,仍然在不断的高速发展,几乎考虑了服务治理的方方面面,开发起来非常的便利和简单。

Dubbo 于 2017 年开始又重启维护,发布了更新后的 2.5.7 版本,而 Spring Cloud 更新的非常快。

因此,企业需要根据自身的研发水平和所处阶段选择合适的架构来解决业务问题,不管是 Dubbo 还是 Spring Cloud 都是实现微服务有效的工具。

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

相关内容

热门资讯

美参议院通过法案 拟终止特朗普... 格隆汇4月3日|美国参议院以51票对48票通过了一项法案,该法案将终止美国总统特朗普对加拿大进口商品...
日股日经指数跌破35000点 ... 日经225指数跌破35000点,为2024年8月9日以来首次,日内跌3.43%。日本东证指数下跌3%...
中国金融发展与银柘科技签订战略... .ct_hqimg {margin: 10px 0;} .hqimg_wrapper {text-a...
外滩社区长者食堂春日焕新,菜品... 转自:上观新闻在这个生机勃勃的春日,外滩社区长者食堂迎来了令人欣喜的菜品升级,为社区居民们带来了全新...
新车密集上市,终端继续降价!3... 本报(chinatimes.net.cn)记者刘凯 北京报道4月初,国内新能源汽车品牌陆续公布了3月...
哈尔滨至新疆旅游专列 计划5月...   本报讯(记者 刘希阳)旅游专列又要出发了。继3月份哈尔滨至港澳旅游专列开通后,计划5月21日由哈...
中国将多措并举减轻企业负担 来源:人民日报海外版 新华社北京4月2日电(记者周圆、张辛欣)记者从2日召开的国务院减轻企业负担部际...
美财政部长称乌克兰代表团最早或... 据央视新闻消息,当地时间4月2日,美国财政部长贝森特在采访中表示,乌克兰团队可能最早在本周抵达美国。...
冰火淬炼30年 窗花“烧入”冰...     “以前是柴窑,就是通过柴火烧窑,燃料的成本特别高,而且温度不好把控,投入特别大。”王昌利说,...
像“搭积木”一样盖房子!河北省... 转自:河北新闻网像“搭积木”一样盖房子我省装配式农房建设试点基本实现县级全覆盖石家庄市藁城区南墩村的...
夯实基础 拓宽经营服务领域   村民在王家河供销社购买农资  无限春光里,王益大地上春耕春播火热进行,该区供销系统在农资供应、农...
100个AI岗位面试题目,分享... 去年开了一期 AI 产品经理课程,发现大家是为了找工作来“补课”的,所以增加了一些针对求职转岗的内容...
“清明”假期交通安全出行提示请... 转自:上观新闻市公安局交通管理总队介绍,结合近期道路交通事故情况,经研判分析,今年“清明”假期部分郊...
投资日历:周四资本市场大事提醒 转自:财联社【投资日历:周四资本市场大事提醒】 ①今日暂无新股申购。 ②商务部定于4月3日举行新闻发...
库克减持苹果套现1.75亿 据报道苹果公司首席执行官蒂姆・库克近日通过出售公司股票,获利超 2400 万美元(现汇率约合 1.7...
国际协同,驶向汽车安全创新未来 来源:人民日报海外版 本报重庆电(记者陈静文)近日,2025中国汽研汽车指数国际交流会暨Euro N...
AI复活逝者,风口上的情感牢笼 本文来自微信公众号:三联电子厂Pro,作者:哈尼,题图来自:AI生成在人工智能技术蓬勃发展的现在,清...
谷歌调整Gemini领导层:实... 据Semafor报道,负责谷歌 AI 聊天机器人发布的谷歌高管 Sissie Hsaio 将辞去 G...
发挥政协履职优势 助推哈市“冰...   本报讯(记者 李玥)4月2日,市政协党组理论学习中心组召开集体学习会议,进一步深入学习贯彻习近平...
给学生放春假,也要让家长休“陪... 转自:北京青年报汪昌莲连续三天的清明节假期即将开启,多地发文放春假,一些大中小学学生在清明假期或稍晚...