转载比较spring cloud和dubbo,各自的优缺点是什么

dubbo由于是二进制的传输,占用带宽会更少
springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大

dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决

springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级

dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研

但如果我选,我会用springcloud。

从公司整体规划:我不会选择很久没人维护的dubbo,重启之后也未必是原班人马

从程序员招聘难度:招springcloud的程序员会更好招,因为更新更炫

从系统结构简易程序:springcloud的系统结构更简单、“注册+springmvc=springcloud”,而dubbo各种复杂的Url,protocol,register,invocation,dubbofilter,dubboSPI,dubbo序列化..........炫技的成分更多一些

从性能:dubbo的网络消耗小于springcloud,但是在国内95%的公司内,网络消耗不是什么太大问题,如果真的成了问题,通过压缩、二进制、高速缓存、分段降级等方法,很容易解

从开发难易度:dubbo的神坑是jar包依赖,开发阶段难度极大,我曾经带一个三十人的团队,因为jar包升级问题,把每个人的电脑都操作过,尤其每个人电脑的库路径、命令、快捷键、键盘,鼠标快慢都不一样,那会儿我默默的在心中艹了dubbo发明者全家老小一百二十遍。springcloud比较自由,但带来的问题是无法“强力约束接口规范”,建议用行政方式解决,且我们团队的强力行政约束做的还是比较好的,在接口管控层面比较强效,一个没有行政组织能力的IT团队真的是个废渣,用什么框架都不好使。

从后续改进:dubbo的改进是通过dubbofilter,很多东西没有,需要自己继承,如监控,如日志,如限流,如追踪。springcloud自己带了很多监控、限流措施,但是功能可能和欧美习惯相同,国内需要进行适当改造,但更简单,就是ServletFilter而已,但是总归比dubbo多一些东西是好的

从配套措施:springcloud一直宣称自己是“一套全方面的解决方案”。。。。。。我起初信了,后来发现上当了,实话说:有,但是不是很健全,100分打50的样子,很多你还需要改造。而DUBBO相反,一直宣称自己是“一套全方面的服务化方案”。。。。。。纯服务化顶个鸟用,任何系统都是相辅相成配套的,一个完整的系统,要有前台、中台、后台、前台包括前端和交互,中台包括交易、任务、数据,后台包括财务、账户、管理...........单纯的服务化解决不了“任何问题”,唯有体系才能解决。在这个层面,springcloud是个往“体系”方向发展的方案,而dubbo仅是个工具而已,两者相比,就好比始祖鸟与草履虫的区别。

从技术实力层面:对比双方的源码,不得不说dubbo作者的技术能力要高于springCloud,而springBoot的作者技术能力要高于dubbo。即:springboot>dubbo>springcloud。我喜欢springboot这种大道至简的风格,keep it simple and stupid。而dubbo好嘛......你先看看dubboSPI,再看看Protocol$Adpative里面那一群绕来绕去的瞎几把绕的玩意儿,你会迅速判断出:这群屌丝在炫技。尽管dubbo从上之下分为十层四五十个组件,第一感官上是哇塞好全面好伟大的样子,但深入之后你会觉得,这技术是很炫,设计的确实很全面,但是用不到,例如:请各位大神给我解释一下,在zookeeper地址中,使用逗号分隔和分号分隔地址的区别。。。。。用途不大,但是代码里为了这个就走向了“完全不同”的一条分支。用俗语评价,就是“臃肿且无用代码过多,在文档里还非得为了这个说出123456来”。说完dubbo再说springCloud........它没有技术含量,完全没有,就是一堆简单组件拼装在一起,如configserver、eurekaserver、robin、feignClient、htstrix等,每个都特别简单,没什么技术含量,但我喜欢这种的,就喜欢这种大道至简的简单。

最后说springBoot,我要用“纯粹”两个字来评价这个框架,真的很纯粹,并且从其代码架构的总体思路一致性,目标的纯粹性,具体模块的干净利落,确实是个好框架,值得大家一读。

从系统应用层面:在技术实力满分一百能打85分的鄙人的眼中,dubbo和springcloud,不就是两个框架么?我们是要拯救世界的人,这俩块鹅卵石一块圆的一块方的,能垫脚就行,没有区别。


简而言之,Dubbo确实类似于Spring Cloud的一个子集,Dubbo功能和文档完善,在国内有很多的成熟用户,然而鉴于Dubbo的社区现状(曾经长期停止维护,2017年7月31日团队又宣布重点维护),使用起来还是有一定的门槛。

Dubbo具有调度、发现、监控、治理等功能,支持相当丰富的服务治理能力。Dubbo架构下,注册中心对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有很强的可用性与健壮性,足够支持高访问量的网站。


虽然Dubbo 支持短连接大数据量的服务提供模式,但绝大多数情况下都是使用长连接小数据量的模式提供服务使用的。所以,对于类似于电商等同步调用场景多并且能支撑搭建Dubbo 这套比较复杂环境的成本的产品而言,Dubbo 确实是一个可以考虑的选择。但如果产品业务中由于后台业务逻辑复杂、时间长而导致异步逻辑比较多的话,可能Dubbo 并不合适。同时,对于人手不足的初创产品而言,这么重的架构维护起来也不是很方便。

Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。比如使用Spring Cloud Config 可以实现统一配置中心,对配置进行统一管理;使用Spring Cloud Netflix 可以实现Netflix 组件的功能 - 服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)。

但它并没有重复造轮子,而是选用目前各家公司开发的比较成熟的、经得住实践考验的服务框架(我们需要特别感谢Netflix ,这家很早就成功实践微服务的公司,几年前把自家几乎整个微服务框架栈贡献给了社区,Spring Cloud主要是对Netflix开源组件的进一步封装),通过Spring Boot 进行封装集成并简化其使用方式。基于Spring Boot,意味着其使用方式如Spring Boot 简单易用;能够与Spring Framework、Spring Boot、Spring Data 等其他Spring 项目完美融合,意味着能从Spring获得巨大的便利,意味着能减少已有项目的迁移成本。

其实,从社区活跃度和功能完整度,再对照业务需求和团队状况,基本可以确定如何选型。这里分享网易考拉海购实践以及团队选型的心声:

当前开源上可选用的微服务框架主要有Dubbo、Spring Cloud等,鉴于Dubbo完备的功能和文档且在国内被众多大型互联网公司选用,考拉自然也选择了Dubbo作为服务化的基础框架。其实相比于Dubbo,Spring Cloud可以说是一个更完备的微服务解决方案,它从功能性上是Dubbo的一个超集,个人认为从选型上对于一些中小型企业Spring Cloud可能是一个更好的选择。提起Spring Cloud,一些开发的第一印象是http+JSON的rest通信,性能上难堪重用,其实这也是一种误读。
微服务选型要评估以下几点:内部是否存在异构系统集成的问题;备选框架功能特性是否满足需求;http协议的通信对于应用的负载量会否真正成为瓶颈点(Spring Cloud也并不是和http+JSON强制绑定的,如有必要Thrift、protobuf等高效的RPC、序列化协议同样可以作为替代方案);社区活跃度、团队技术储备等。作为已经没有团队持续维护的开源项目,选择Dubbo框架内部就必须要组建一个维护团队,先不论你要准备要集成多少功能做多少改造,作为一个支撑所有工程正常运转的基础组件,问题的及时响应与解答、重大缺陷的及时修复能力就已足够重要。
详见网易考拉海购Dubbok框架优化详解


鉴于服务发现对服务化架构的重要性,再补充一点:Dubbo 实践通常以ZooKeeper 为注册中心(Dubbo 原生支持的Redis 方案需要服务器时间同步,且性能消耗过大)。针对分布式领域著名的CAP理论(C——数据一致性,A——服务可用性,P——服务对网络分区故障的容错性),Zookeeper 保证的是CP ,但对于服务发现而言,可用性比数据一致性更加重要 ,而 Eureka 设计则遵循AP原则 。

原文:https://blog.csdn.net/u010664947/article/details/80007767 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Springcloud和dubbo都是常用的微服务框架,它们各有优缺点。Springcloud具有更完整的生态系统,提供了更多的组件和工具,支持更多的协议和编程语言,适用于大型分布式系统的构建。而dubbo则更加轻量级,性能更好,适用于中小型分布式系统的构建。此外,Springcloud更加注重开发者的体验和易用性,而dubbo则更加注重性能和稳定性。因此,选择哪个框架应该根据具体的需求和场景来决定。 ### 回答2: Spring CloudDubbo是当前比较流行的微服务框架,它们在很多方面有着相似之处,但也存在一些差异。 首先,就优点而言,Spring Cloud提供了众多的组件和库,可以轻松地构建和管理微服务架构。它基于Spring框架,具有较高的灵活性和开发效率,同时还支持各种服务注册和发现机制,如Eureka、Consul等。另外,Spring Cloud还提供了多种负载均衡、断路器、配置管理及分布式追踪等功能,方便开发人员进行服务治理和监控。此外,Spring Cloud与Spring Boot紧密集成,简化了配置和部署操作。 相比之下,Dubbo是一款由阿里巴巴开源的Java RPC框架,具有较高的性能和可靠性。Dubbo支持多种传输和协议,可根据需求选择最佳的通信方式,同时还提供了诸如负载均衡、集群容错、路由等高级特性,能够保证服务的高可用性和可扩展性。此外,Dubbo还支持服务治理和监控,可通过管理控制台进行服务的动态注册和查看。另外,Dubbo支持多种开发语言,适用于跨语言的分布式应用开发。 然而,Spring Cloud在某些方面也有优势。首先,Spring Cloud具有更广泛的社区支持,相关文档和教程较多,开发者可以更容易地找到解决方案。其次,Spring Cloud对于Spring系列已有的成熟技术栈有很好的整合,开发者可以无缝地切换模块。最后,Spring Cloud可以更好地与其他云原生技术结合使用,例如Kubernetes、Docker等。 综上所述,Spring CloudDubbo都是优秀的微服务框架,各自在不同方面有所优势。选择合适的框架需要根据项目需求和团队技术栈来决定。 ### 回答3: Spring CloudDubbo都是目前非常流行的分布式微服务框架,但它们在设计思想、特点和使用方式上有一些区别。 首先,Spring Cloud是基于Spring框架的开源微服务框架,它提供了一整套开发分布式系统的解决方案,包括服务注册与发现、服务调用、负载均衡、断路器、配置管理等。它采用的是HTTP协议作为通信协议,REST风格的接口设计。Spring Cloud具有更加灵活的架构,可以与各种开发语言和技术栈集成,适用于大部分的企业应用场景。 而Dubbo是阿里巴巴开源的高性能微服务框架,它基于RPC(Remote Procedure Call)协议进行通信,适用于Java开发。Dubbo除了提供了服务注册与发现、负载均衡等基本的功能,还支持分布式事务、服务治理、限流、降级等高级特性。Dubbo的性能非常高,适用于大规模、高并发的分布式系统。 对比两者的优点,Spring Cloud具有更高的灵活性和通用性,可以与各种技术栈集成,适用于不同的企业应用场景。它基于Spring框架,具有广泛的社区支持,生态系统更加成熟。而Dubbo在性能方面更加出色,适用于大规模的高并发系统。 缺点方面,Spring Cloud的学习曲线相对较陡峭,因为它的架构相对复杂,需要掌握更多的组件和概念。而Dubbo对于非Java语言的支持较弱,限制了它的适用场景。 综上所述,选择使用哪个微服务框架需要根据实际情况来决定。如果项目需要高性能、大规模并发处理的能力,适合选择Dubbo;如果需要更高的灵活性和通用性,适合选择Spring Cloud。当然,根据实际情况也可以将两者结合使用,根据需求场景灵活选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值