微服务选择Spring Cloud还是Dubbo?

点击关注 异步图书,置顶公众号

每天与你分享 IT好书 技术干货 职场知识

参与文末话题讨论,每日赠送异步图书。

——异步小编

在阿里巴巴的生态中,微服务逐渐成为主要的服务形态,伴随着容器化的日臻成熟,大量的分布式、领域驱动设计的微服务被快速开发和部署,服务间呈现出搭积木的能力,使不同的业务通过重新组合数个微服务,就能实现新的业务场景。借助成熟的底层集团中间件,天然地支持微服务所需的动态扩缩、服务发现、全链路日志分析等能力。以阿里巴巴达摩院语音对话平台为例,对话服务、理解服务、问答服务,以及对话管理平台都是基于SpringBoot和Docker技术栈的。

微服务应该具备的功能

微服务,可以拆分为“微”和“服务”二字。“微”即小的意思,那到底多小才算“微”呢?可能不同的团队有不同的答案。从参与微服务的人数来讲,单个微服务从架构设计、代码开发、测试、运维的人数加起来是8~10人才算“微”。那么何为“服务”呢?按照“微服务”概念提出者Martin Fowler给出的定义:“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP这种轻量级的通信机制进行通信。

微服务具有以下的特点。

  • 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
  • 每个微服务都有自己独立的基础组件,例如数据库、缓存等,且运行在独立的进程中。
  • 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
  • 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。单个微服务能够集群化部署,并且有负载均衡的能力。
  • 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
  • 整个微服务系统有链路追踪的能力。
  • 有一套完整的实时日志系统。

微服务具有以上这些特点,那么微服务需要具备一些什么样的功能呢?微服务的功能主要体现在以下几个方面。

  • 服务的注册和发现。
  • 服务的负载均衡。
  • 服务的容错。
  • 服务网关。
  • 服务配置的统一管理。
  • 链路追踪。
  • 实时日志。

Dubbo

阿里巴巴在2011年开源了Dubbo框架,虽然在2013年停止更新,但在2017年9月又重启维护并发布了新版本。目前已有很多的公司将自己的业务建立在Dubbo之上,同时阿里云也推出了企业级分布式应用服务EDAS,为Dubbo提供应用托管。

Dubbo采用Zookeeper作为注册中心,RPC作为服务调用方式,致力于提供高性能和透明化的RPC远程服务调用方案。它与Spring无缝集成,基于服务提供方(服务端)与服务调用方(客户端)角色构建简单模型,其优点是使用方便、学习成本低。

① 服务提供方发布服务到服务注册中心。

② 服务消费方从服务注册中心订阅服务。

③ 注册中心通知消息调用方服务已注册。

④ 服务消费方调用已经注册的可用服务。

⑤ 监控计数。

Spring Cloud

Spring Cloud基于Spring Boot实现,使用HTTP的RESTful风格API作为调用方式。它所包含的多个子项目共同构建了微服务架构体系。

Netflix Eureka

Spring Cloud 的服务注册中心提供服务注册、服务发现、负载均衡等功能。

Netflix Hystrix

当某个服务发生故障之后,则触发熔断机制(Hystrix)向服务调用方返回结果标识错误,而不是一直等待服务提供方返回结果,这样就不会使得线程因调用故障服务而被长时间占用不释放,避免了故障在分布式系统中的蔓延。

Netflix Zuul

代理各模块提供的服务,统一暴露给第三方应用。提供动态路由、监控、弹性、全等的边缘服务。

Config Server

分布式架构下多微服务会产生非常多的配置文件,分布式配置中心(Config Server)将所有配置文件交由GIT或SVN进行统一管理,避免出错。

Spring Boot

在使用Spring开发时,通常需要完成Spring框架及其他第三方工具配置文件的编写,非常麻烦。Spring Boot通过牺牲项目的自由度来减少配置的复杂度,约定一套规则,把这些框架都自动配置集成好,从而达到“开箱即用”。

Spring Clould与Dubbo比较

首先从微服务关注点来比较Spring Cloud和Dubbo两大服务框架,如表1所示。

表1 从微服务关注点比较Spring Cloud和Dubbo

Spring Cloud拥有很多的项目模块,包含了微服务系统的方方面面。Dubbo是一个非常优秀的服务治理和服务调用框架,但缺少很多功能模块,例如网关、链路追踪等。在项目模块上,Spring Cloud占据着更大的优势。

Spring Cloud的更新速度非常块,Camden.SR5版本发布于2017年2月6日,Camden.SR6版本发布于2017年3月10日,Dalston版本发布于2017年4月12日,基本每个月会发一次版本的迭代。从GitHub的代码仓库来看,Spring Cloud几乎每天都有更新。阿里巴巴于2011年10月开源了Dubbo,开源后的Dubbo发展迅速,大概每2~3个月有一次版本更新。然而,从在2013年3月开始,Dubbo暂停了版本更新,并只在2014年10月发布了一个小版本,修复了一个bug,之后长期处于版本停止更新的状态。直到2017年9月,阿里巴巴中间件部门重新组建了Dubbo团队,把Dubbo列为重点开源项目,并在2017年9~11月期间,一直保持每月一次版本更新的频率。

从学习成本上考虑,Dubbo的版本趋于稳定,文档完善,可以即学即用,没有太大难度。Spring Cloud 基于Spring Boot开发,需要开发者先学会Spring Boot。另外,Spring Cloud版本迭代快,需要快速跟进学习。Spring Cloud文档大多是英文的,要求学习者有一定的英文阅读能力。此外,Spring Cloud文档很多,不容易快速找到相应的文档。

从开发风格上来讲,Dubbo 更倾向于Spring Xml的配置方式,Dubbo官方也推荐这种方式。Spring Cloud基于Spring Boot,Spring Boot采用的是基于注解和JavaBean配置方式的敏捷开发。从开发速度上讲,Spring Cloud具有更高的开发和部署速度。

最后,Spring Cloud 的通信方式大多数是基于HTTP Restful风格的,服务与服务之间完全无关、无耦合。由于采用的是HTTP Rest,因此服务无关乎语言和平台,只需要提供相应API接口,就可以相互调用。Dubbo 的通信方式基于远程调用,对接口、平台和语言有强依赖性。如果需要实现跨平台调用服务,需要写额外的中间件,这也是Dubbo存在的原因。

Dubbo和Spring Cloud拥有各自的优缺点。Dubbo更易上手,并且广泛使用于阿里巴巴的各大站点,经历了“双11”期间高并发、大流量的检验,Dubbo框架非常成熟和稳定。Spring Cloud服务框架严格遵守Martin Fowler 提出的微服务规范,社区异常活跃,它很可能成为微服务架构的标准。

微服务必读书

《深入理解Spring Cloud与微服务构建》

方志朋 著

点击封面购买纸书

CSDN博客专家、Spring Cloud中国社区联合创始人全新作品。

本书共分16章,全面涵盖了Spring Cloud构建微服务相关的知识点。第1、2章详细介绍了微服务架构和Spring Cloud。第3、4章讲解了用Spring Cloud构建微服务的准备工作。第5~12章以案例为切入点,讲解了Spring Cloud构建微服务的基础组件,包括Eureka、Ribbon、Feign、Hystrix、Zuul、Config、Sleuth、Admint等组件。第13~15章讲述了使用Spring Cloud OAuth2来保护微服务系统的相关知识。第16章用一个综合案例,全面讲解了如何使用Spring Cloud构建微服务,可以作为实际开发的样例工程。

《微服务分布式构架开发实战》

龚鹏 著

点击封面购买纸书

为了更快地实施微服务,本书基于开源且稳定的第三方工具,介绍如何构建一个庞大且复杂的分布式系统,用于满足项目中的实际需求。每一个工具库为了适应更丰富的使用场景,通常都会把部分参数以配置文件的方式暴露出来,同时提供用于开发环境的默认配置。本书基于快速使用为主线路,尽可能多地讲解配置参数的意义及之间的关系。在掌握足够多的知识点后建立起对微服务分布式架构的认知,以便为探求更深层次的知识点做好铺垫。

本书适合Java工程师、初级架构师、大中专院校相关专业师生、Java培训班学员及独立开发者与自学读者使用。

今日互动

针对微服务你有哪方面的问题急需解决?或者试读图书说说你的感受?截止时间5月3日17时,留言+转发本活动到朋友圈,小编将抽奖选出5名读者赠送e读版100元异步社区代金券一张,(留言点赞最多的自动获得一张)。

推荐阅读

2018年4月新书书单

异步图书最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程图书

长按二维码,可以关注我们哟

每天与你分享IT好文。

在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步e读版图书一本。赶紧来参加哦!

点击阅读原文,查看更多

阅读原文

原文地址:http://blog.51cto.com/13127751/2108480

时间: 2024-10-09 21:19:46

微服务选择Spring Cloud还是Dubbo?的相关文章

详解微服务:Spring Cloud原理及核心

研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套高效.分布式.容错的平台,但Spring Cloud也不是没有缺点,小型独立的项目不适合使用. Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基

[转帖]微服务框架Spring Cloud介绍 Part2: Spring Cloud与微服务

微服务框架Spring Cloud介绍 Part2: Spring Cloud与微服务 http://skaka.me/blog/2016/08/03/springcloud2/ AUG 3RD, 2016 10:09 PM | COMMENTS 之前介绍过微服务的概念与Finagle框架, 这个系列介绍Spring Cloud. Spring Cloud还是一个相对较新的框架, 今年(2016)才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比我之前用过的Du

2.微服务开发框架——Spring Cloud

                 微服务开发框架-Spring Cloud 2.1. Spring Cloud简介及其特点 简介: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具 (例如配置管理,服务发现,断路器,智能路由,微代理,控制总线).分布式系统 的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服 务和应用程序.他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电 脑,裸机数据中心,以及Cloud Found

微服务与Spring Cloud基本概念、Spring Cloud版本命名方式与版本选择

微服务是什么?Spring Cloud是什么?Spring Cloud版本命名方式?Spring Cloud版本选择? 一.微服务是什么 微服务是一种架构风格,是一种将单体应用开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API).这些服务围绕业务能力构建并且可通过全自动部署机制独立部署.这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术. 二.Spring Cloud是什么 Spring Cloud并不是

微服务框架-Spring Cloud简介(一)

Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案. Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及和Spring Boot开发框架的集成. Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全居琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Clo

构建微服务架构Spring Cloud:服务注册与发现(Eureka、Consul)

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config.Spring Cloud Netflix.Spring Cloud0 CloudFoundry.

构建微服务架构Spring Cloud:分布式配置中心

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息.加密/解密信息等访问接口:而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息.Spring Cloud Conf

构建微服务架构Spring Cloud:服务消费(Feign)

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定.它具备可插拔的注解支持,包括Feign注解.JAX-RS注解.它也支持可插拔的编码器和解码器.Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现. 下面

spring boot 2.0.3+spring cloud (Finchley)7、微服务监控Spring Cloud Admin

参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging 日志级别管理 JMX beans 管理 Threads 会话和线程管理 Trace 应用请求跟踪 应用运行参数信息,如: Java 系统属性 Java 环境变量属性 内存信息 Spring 环