我们先从 Nginx 说起,了解为什么需要微服务。最初的服务化解决方案是给相同服务提供一个统一的域名,然后服务调用者向这个域发送 HTTP 请求,由 Nginx 负责请求的分发和跳转。
这种架构存在很多问题:Nginx 作为中间层,在配置文件中耦合了服务调用的逻辑,这削弱了微服务的完整性,也使得 Nginx 在一定程度上变成了一个重量级的 ESB。图中标识出了 Nginx 的转发信息流走向。
服务的信息分散在各个系统,无法统一管理和维护。每一次的服务调用都是一次尝试,服务消费方并不知道有哪些实例在给他们提供服务。这带来了一些问题:
- 无法直观地看到服务提供方和服务消费方当前的运行状况与通信频率;
- 消费方的失败重发、负载均衡等都没有统一策略,这加大了开发每个服务的难度,不利于快速演化。
为了解决上面的问题,我们需要一个现成的中心组件对服务进行整合,将每个服务的信息汇总,包括服务的组件名称、地址、数量等。
服务的调用方在请求某项服务时首先通过中心组件获取提供服务的实例信息(IP、端口等),再通过默认或自定义的策略选择该服务的某一提供方直接进行访问,所以考虑引入 Dubbo。
Dubbo 是阿里开源的一个 SOA 服务治理解决方案,文档丰富,在国内的使用度非常高。图 2 为 Dubbo 的基本架构图,使用 Dubbo 构建的微服务已经可以较好地解决上面提到的问题。
从图 2 中,可以看出以下几点:
- 调用中间层变成了可选组件,消费方可以直接访问服务提供方;
- 服务信息被集中到 Registry 中,形成了服务治理的中心组件;
- 通过 Monitor 监控系统,可以直观地展示服务调用的统计信息;
- 服务消费者可以进行负载均衡、服务降级的选择。
但是对于微服务架构而言,Dubbo 并不是十全十美的,也有一些缺陷,比如:
- Registry 严重依赖第三方组件(ZooKeeper 或者 Redis),当这些组件出现问题时,服务调用很快就会中断。
- Dubbo 只支持 RPC 调用。这使得服务提供方与调用方在代码上产生了强依赖,服务提供方需要不断将包含公共代码的 Jar 包打包出来供消费方使用。一旦打包出现问题,就会导致服务调用出错。
笔者认为,Dubbo 和 Spring Cloud 并不是完全的竞争关系,两者所解决的问题域并不一样。
Dubbo 的定位始终是一款 RPC 框架,而 Spring Cloud 的目标是微服务架构下的一站式解决方案。如果非要比较的话,Dubbo 可以类比到 Netflix OSS 技术栈,而 Spring Cloud 集成了 Netflix OSS 作为分布式服务治理解决方案,但除此之外 Spring Cloud 还提供了配置、消息、安全、调用链跟踪等分布式问题解决方案。
当前由于 RPC 协议、注册中心元数据不匹配等问题,在面临微服务基础框架选型时 Dubbo 与 Spring Cloud 只能二选一,这也是大家总是拿 Dubbo 和 Spring Cloud 做对比的原因之一。
Dubbo 已经适配到 Spring Cloud 生态,比如作为 Spring Cloud 的二进制通信方案来发挥 Dubbo 的性能优势,Dubbo 通过模块化以及对 HTTP 的支持适配到 Spring Cloud。
Spring Cloud 好在哪里
作为新一代的服务框架,Spring Cloud 提出的口号是开发“面向云的应用程序”,它为微服务架构提供了更加全面的技术支持。结合我们一开始提到的微服务的诉求,参见表 1,把Spring Cloud 与 Dubbo 进行一番对比。
表 1 Spring Cloud与Dubbo功能对比
服务注册中心 | ZooKeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
Spring Cloud 抛弃了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生 RPC 带来的问题。而且 REST 相比 RPC 更为灵活,服务提供方和调用方,不存在代码级别的强依赖,这在强调快速演化的微服务环境下显得更加合适。
很明显,Spring Cloud 的功能比 Dubbo 更加强大,涵盖面更广,而且作为 Spring 的拳头项目,它也能够与 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 项目完美融合,这些对于微服务而言是至关重要的。
前面提到,微服务背后一个重要的理念就是持续集成、快速交付,而在服务内部使用一个统一的技术框架,显然比将分散的技术组合到一起更有效率。
更重要的是,相比于 Dubbo,它是一个正在持续维护的、社区更加火热的开源项目,这就可以保证使用它构建的系统持续地得到开源力量的支持。
下面列举 Spring Cloud 的几个优势。
- Spring Cloud 来源于 Spring,质量、稳定性、持续性都可以得到保证。
- Spirng Cloud 天然支持 Spring Boot,更加便于业务落地。
- Spring Cloud 发展得非常快,从开始接触时的相关组件版本为 1.x,到现在将要发布 2.x 系列。
- Spring Cloud 是 Java 领域最适合做微服务的框架。
相比于其他框架,Spring Cloud 对微服务周边环境的支持力度最大。对于中小企业来讲,使用门槛较低。
相关推荐
SpringCloud和Dubbo都是在Java社区中广泛使用的技术栈,它们被设计用来解决微服务架构中的一些核心问题,如服务发现、配置管理、负载均衡、容错机制等。它们之间的选择依赖于特定的业务需求、技术栈、团队经验等因素...
### SpringCloud-微服务课程笔记知识点总结 #### 一、Spring Cloud 概述 - **定义**:Spring Cloud 是一个基于 Spring Boot 的开发工具包,主要用于构建分布式系统和微服务架构。 - **特点**: - **服务注册与发现...
尚硅谷_SpringCloud_SpringCloud_VS_Dubbo区别对比.avi" 这个视频可能探讨了SpringCloud与Dubbo之间的区别。Dubbo是阿里巴巴开源的Java分布式服务框架,早于SpringCloud出现,主要侧重于RPC服务治理。而SpringCloud...
07.硅谷学习_SpringCloud_微服务优缺点 08.硅谷学习_SpringCloud_微服务技术栈有哪些 09.硅谷学习_SpringCloud_为什么选择SpringCloud作为微服务架构 10.硅谷学习_SpringCloud_SpringCloud是什么 11.硅谷学习_...
在这个"SpringCloud入门案例 nacos dubbo"中,我们可能要学习以下内容: 1. **Spring Cloud Nacos的安装与配置**:首先,你需要了解如何下载并部署Nacos服务器,配置服务器的基本参数,如端口号、数据存储路径等。 ...
SpringCloud与Dubbo有哪些区别? Dubbo具有调度、发现、监控、治理等功能,支持相当丰富的服务治理能力。Dubbo架构下,注册中心对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有...
【SpringCloud微服务架构视频】是一系列视频教程,总计五十一课,专注于讲解SpringCloud的原理及实践操作,尤其适合初学者和希望深入理解微服务架构的开发者。本教程的前十二节已提供,后续内容可通过作者的博客获取...
Spring Cloud和Dubbo在服务治理上有显著区别。Dubbo提供了包括调度、发现、监控和治理在内的功能,支持丰富的服务治理能力。它的服务发现机制具有高可用性和健壮性,适合处理高访问量的场景。然而,Dubbo通常更适合...
07.尚硅谷_SpringCloud_微服务优缺点 08.尚硅谷_SpringCloud_微服务技术栈有哪些 09.尚硅谷_SpringCloud_为什么选择SpringCloud作为微服务架构 10.尚硅谷_SpringCloud_SpringCloud是什么 11.尚硅谷_SpringCloud_...
通过学习SpringCloud微服务基础教程,开发者能够深入了解如何构建高效、稳定的微服务架构,并能够利用SpringCloud提供的工具解决实际开发中的问题。随着云计算和微服务技术的发展,SpringCloud已经成为现代软件开发...
# SpringCloud课堂笔记知识点解析 ## 一、微服务概述 ...综上所述,SpringCloud因其全面的功能覆盖、良好的社区支持以及较低的学习门槛,在众多微服务框架中脱颖而出,成为许多企业和开发者首选的微服务框架。
Spring Cloud作为一款强大的微服务治理框架,提供了许多工具和组件来帮助开发者构建云原生应用。本文将深入探讨如何在Spring Cloud环境中整合分布式事务框架TX-LCN,以实现高效、一致的数据操作。 TX-LCN...
* Spring Cloud和dubbo区别? * 负载平衡的意义是什么? * 什么是Hystrix?它如何实现容错? * 什么是Hystrix断路器?我们需要它吗? * 什么是Netflix Feign?它的优点是什么? * 什么是Spring Cloud Bus?我们需要...
SpringCloud和Dubbo是两种不同的微服务解决方案。Dubbo具有服务治理能力,包括服务发现、监控和负载均衡等,它的设计更倾向于提供一种高性能、长连接的服务交互方式。而SpringCloud由众多子项目组成,提供了包括配置...
* 服务网关:dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发。 Eureka是什么? * Eureka是Spring Cloud的服务注册功能服务器,他是服务注册...
在IT行业中,Spring Cloud作为一款主流的微服务框架,受到了广大开发者和企业的广泛关注。随着微服务架构的广泛应用,掌握Spring Cloud成为了技术面试中不可或缺的一部分。本篇将详细解析Spring Cloud微服务面试的...
Spring Boot 和 Spring Cloud 的区别在于: - Spring Boot 专注于快速开发单个微服务,强调个体服务的简便性。 - Spring Cloud 是一个整体的微服务治理框架,负责整合和管理各个微服务,提供全面的服务治理功能。 ...
Spring Cloud 和 Dubbo 的区别: Dubbo 是阿里巴巴开源的分布式服务框架,侧重于 RPC 调用,而 Spring Cloud 更全面,不仅包含 RPC,还有服务发现、配置中心、熔断器、API 网关等功能,提供了一整套微服务解决方案。...