微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如Dubbo和Spring Cloud。各大互联网公司也有自研的微服务框架,但其模式都于这二者相差不大。
微服务主要的优势如下:
1、降低复杂度
将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。每个服务开发者只专注服务本身,通过使用缓存、DAL等各种技术手段来提升系统的性能,而对于消费方来说完全透明。
2、可独立部署
由于微服务具备独立的运行进程,所以每个微服务可以独立部署。当业务迭代时只需要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险。
3、容错
在微服务架构下,当某一组件发生故障时,故障会被隔离在单个服务中。 通过限流、熔断等方式降低错误导致的危害,保障核心业务正常运行。
4、扩展
单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
本文主要围绕微服务的技术选型、通讯协议、服务依赖模式、开始模式、运行模式等几方面来综合比较Dubbo和Spring Cloud 这2种开发框架。架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程。
一、核心部件
微服务的核心要素在于服务的发现、注册、路由、熔断、降级、分布式配置,基于上述几种必要条件对Dubbo和Spring Cloud做出对比。
1、总体架构
-
Dubbo 核心部件(如下图):
-
Provider: 暴露服务的提供方,可以通过jar或者容器的方式启动服务
-
Consumer:调用远程服务的服务消费方。
-
Registry: 服务注册中心和发现中心。
-
Monitor: 统计服务和调用次数,调用时间监控中心。(dubbo的控制台页面中可以显示,目前只有一个简单版本)
-
Container:服务运行的容器。
▲Dubbo 总体架构
Spring Cloud总体架构如下图
-
Service Provider: 暴露服务的提供方。
-
Service Consumer:调用远程服务的服务消费方。
-
EureKa Server: 服务注册中心和服务发现中心。
▲Spring Cloud总体架构
点评:从整体架构上来看,二者模式接近,都需要需要服务提供方,注册中心,服务消费方。
2、微服务架构核心要素
Dubbo只是实现了服务治理,而Spring Cloud子项目分别覆盖了微服务架构下的众多部件,而服务治理只是其中的一个方面。Dubbo提供了各种Filter,对于上述中“无”的要素,可以通过扩展Filter来完善。
例如
1.分布式配置:可以使用淘宝的diamond、百度的disconf来实现分布式配置管理
2.服务跟踪:可以使用京东开源的Hydra,或者扩展Filter用Zippin来做服务跟踪
3.批量任务:可以使用当当开源的Elastic-Job、tbschedule
点评:从核心要素来看,Spring Cloud 更胜一筹,在开发过程中只要整合Spring Cloud的子项目就可以顺利的完成各种组件的融合,而Dubbo缺需要通过实现各种Filter来做定制,开发成本以及技术难度略高。
二、通讯协议
基于通讯协议层面对2种框架支持的协议类型以及运行效率方面进行比较;
(一)、支持协议
1、Dubbo:dubbo使用RPC通讯协议,提供序列化方式如下:
dubbo:Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
rmi:RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式
Hessian:Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现
http:采用Spring的HttpInvoker实现
Webservice:基于CXF的frontend-simple和transports-http实现
2、Spring Cloud:Spring Cloud 使用HTTP协议的REST API
(二)、性能比较
使用一个Pojo对象包含10个属性,请求10万次,Dubbo和Spring Cloud在不同的线程数量下,每次请求耗时(ms)如下:
说明:客户端和服务端配置均采用阿里云的ECS服务器,4核8G配置,dubbo采用默认的dubbo协议
点评:dubbo支持各种通信协议,而且消费方和服务方使用长链接方式交互,通信速度上略胜Spring Cloud,如果对于系统的响应时间有严格要求,长链接更合适。
三、服务依赖方式
Dubbo:服务提供方与消费方通过接口的方式依赖,服务调用设计如下:
-
interface层:服务接口层,定义了服务对外提供的所有接口
-
Molel层:服务的DTO对象层,
-
business层:业务实现层,实现interface接口并且和DB交互
因此需要为每个微服务定义了各自的interface接口,并通过持续集成发布到私有仓库中,调用方应用对微服务提供的抽象接口存在强依赖关系,开发、测试、集成环境都需要严格的管理版本依赖。如果想免费学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java进阶群694549689,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
通过maven的install & deploy命令把interface和Model层发布到仓库中,服务调用方只需要依赖interface和model层即可。在开发调试阶段只发布Snapshot版本。等到服务调试完成再发布Release版本,通过版本号来区分每次迭代的版本。通过xml配置方式即可方面接入dubbo,对程序无入侵。
▲Dubbo接口依赖方式
Spring Cloud:服务提供方和服务消费方通过json方式交互,因此只需要定义好相关json字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵。
点评:Dubbo服务依赖略重,需要有完善的版本管理机制,但是程序入侵少。而Spring Cloud通过Json交互,省略了版本管理的问题,但是具体字段含义需要统一管理,自身Rest API方式交互,为跨平台调用奠定了基础。
四、组件运行流程
下图中的每个组件都是需要部署在单独的服务器上,gateway用来接受前端请求、聚合服务,并批量调用后台原子服务。每个service层和单独的DB交互。
▲Dubbo组件运行流程
-
gateWay:前置网关,具体业务操作,gateWay通过dubbo提供的负载均衡机制自动完成
-
Service:原子服务,只提供该业务相关的原子服务
-
Zookeeper:原子服务注册到zk上
▲Spring Cloud 组件运行
Spring Cloud
-
所有请求都统一通过 API 网关(Zuul)来访问内部服务。
-
网关接收到请求后,从注册中心(Eureka)获取可用服务。
-
由 Ribbon 进行均衡负载后,分发到后端的具体实例。
-
微服务之间通过 Feign 进行通信处理业务。
点评:业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险。Dubbo需要自己开发一套API 网关,而Spring Cloud则可以通过Zuul配置即可完成网关定制。使用方式上Spring Cloud略胜一筹。
五、微服务架构组成以及注意事项
到底使用是dubbo还是Spring Cloud其实并不重要,重点在于如何合理的利用微服务。下面是一张互联网通用的架构图,其中每个环节都是微服务的核心部分。
(一)、架构分解
-
网关集群:数据的聚合、实现对接入客户端的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制等
-
业务集群:一般情况下移动端访问和浏览器访问的网关需要隔离,防止业务耦合
-
Local Cache:由于客户端访问业务可能需要调用多个服务聚合,所以本地缓存有效的降低了服务调用的频次,同时也提示了访问速度。本地缓存一般使用自动过期方式,业务场景中允许有一定的数据延时。
-
服务层:原子服务层,实现基础的增删改查功能,如果需要依赖其他服务需要在Service层主动调用
-
Remote Cache:访问DB前置一层分布式缓存,减少DB交互次数,提升系统的TPS
-
DAL:数据访问层,如果单表数据量过大则需要通过DAL层做数据的分库分表处理。
-
MQ:消息队列用来解耦服务之间的依赖,异步调用可以通过MQ的方式来执行
-
数据库主从:服务化过程中毕竟的阶段,用来提升系统的TPS
(二)注意事项
-
服务启动方式建议使用jar方式启动,启动速度快,更容易监控
-
缓存、缓存、缓存,系统中能使用缓存的地方尽量使用缓存,通过合理的使用缓存可以有效的提高系统的TPS
-
服务拆分要合理,尽量避免因服务拆分而导致的服务循环依赖
-
合理的设置线程池,避免设置过大或者过小导致系统异常
六、总结
Dubbo出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;只需要通过spring配置的方式即可完成服务化,对于应用无入侵。设计的目的还是服务于自身的业务为主。虽然阿里内部原因dubbo曾经一度暂停维护版本,但是框架本身的成熟度以及文档的完善程度,完全能满足各大互联网公司的业务需求。如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中增加了使用 Dubbo 的难度。
Spring Cloud 是大名鼎鼎的 Spring 家族的产品, 专注于企业级开源框架的研发。 Spring Cloud 自从发展到现在,仍然在不断的高速发展,几乎考虑了服务治理的方方面面,开发起来非常的便利和简单。
Dubbo于2017年开始又重启维护,发布了更新后的2.5.6版本,而Spring Cloud更新的非常快,目前已经更新到Finchley.M2。因此,企业需要根据自身的研发水平和所处阶段选择合适的架构来解决业务问题,不管是Dubbo还是Spring Cloud都是实现微服务有效的工具。
相关推荐
虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如Dubbo和SpringCloud。各大互联网公司也有自研的微服务框架,但其模式都于这二者相差...
本压缩包文件"微服务架构面试题系列:Dubbo+Spring Boot+Spring Cloud.zip"包含了关于微服务领域的一系列面试题目,主要涉及了Dubbo、Spring Boot、Spring Cloud等关键技术和工具。接下来,我们将深入探讨这些技术...
本课程总计13大章节,115课时,是一门全面的SpringCloud微服务体系化课程。课程共包括十三个大章节,涵盖注册中心、网关、熔断、降级、监控、安全、限流等全部体系。包含阿里巴巴Nacos,Consul,Spring Cloud ...
Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、 高并发等架构技术(nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战)点击链接加入...
用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时。随即,我上一套spring cloud,与公司大环境框架...
另还有企培专家课程:设计理念和开发,面向企业架构师和中层管理人员,详细描述了IT技术管理、敏捷开发流程、DDD实践、部门管理等内容。 更多,深度学习、大数据等全套课件,详细私信留言(非免费)
学习微服务架构,你需要掌握Spring Cloud或Dubbo等主流微服务框架,了解服务发现、熔断、负载均衡等概念。 其次,“中间件”是构建分布式系统的关键组件。如消息队列(RabbitMQ、Kafka)、缓存(Redis)、任务调度...
Java架构师在实现微服务时,可能会使用Spring Boot和Spring Cloud等框架,它们提供了创建和管理微服务的强大支持。 高并发是指系统能同时处理大量用户请求的能力。Java架构师需要了解如何设计和优化并发程序,利用...
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud, Redis,ActiveMQ,Nginx,Mycat,Netty,...
《架构解密:从分布式到微服务》是一本面向Java开发者,旨在提升技术能力并深入理解分布式和微服务架构的专业书籍。这本书对于那些在技术道路上遇到瓶颈,渴望突破自我,向架构师角色迈进的程序员来说,是极具价值的...
微服务架构是一种将大型复杂应用程序分解为一组小型、独立的服务的软件开发方法。这些服务各自运行在自己的进程中,可以独立部署,并通过轻量级通信机制(如HTTP RESTful API)进行交互。微服务架构的核心思想是单一...
微服务架构的实践,如Spring Cloud、Dubbo等,可以提高系统的可扩展性和敏捷性。 6. **安全与容灾**:网络安全、数据保护、灾备策略等是架构设计中不可或缺的部分,确保系统的安全性与稳定性。 7. **项目管理与...
《Java架构师指南》配套代码提供了丰富的实例和实践素材,帮助读者深入理解并掌握Java架构设计的核心技术。作为一本专为Java架构师打造的指导书籍,它涵盖了从基础到高级的多个方面,包括但不限于设计模式、并发编程...
【架构师方向出题老师.pdf】的文件内容涵盖了IT领域中架构师的多个知识点,主要涉及业务架构师和基础架构师的区别、UML在系统架构中的重要性、微服务框架的选择(Springcloud与Dubbo)、分布式定时任务与普通任务的...
【互联网Java架构师面试题】涉及的范围广泛,主要涵盖了Java基础、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL数据库、Spring框架全家桶(包括Spring、Spring Boot和Spring Cloud)、消息...
小马哥,Java 劝退师,Apache Dubbo PPMC、Spring Cloud Alibaba 项目架构师。目前主要负责集团中间件开源项目、微服务技术实施、架构衍进、基础设施构建等。通过 SUN Java(SCJP、SCWCD、SCBCD)以及 Oracle OCA 等...