首页 > 编程语言 >Dubbo源码浅析(一)—RPC框架与Dubbo

Dubbo源码浅析(一)—RPC框架与Dubbo

时间:2024-08-16 15:51:40浏览次数:14  
标签:Dubbo 调用 服务 RPC 远程 Rpc 源码 浅析

一、什么是RPC

1.1 RPC概念

RPC,Remote Procedure Call 即远程过程调用,与之相对的是本地服务调用,即LPC(Local Procedure Call)。本地服务调用比较常用,像我们应用内部程序**(注意此处是程序而不是方法,程序包含方法)**互相调用即为本地过程调用,而远程过程调用是指在本地调取远程过程进行使用。

RPC框架就是为了帮助我们在本地调用远程过程时,就像调用本地过程一样方便。

1.2 RPC与Http的关系

用一句话来总结就是:

RPC是一种概念,http是一种协议,可以认为http是Rpc的一种实现,或者Rpc包含了http。为什么说包含而不是相等,是因为Rpc还有很多基于自定义的Tcp的协议,例如Dubbo等,而我们常说的rpc即指的除Http之外的基于tcp自定义的协议。

1.3 关于Rpc的思考

网上关于Rpc与Http的相关文章并不少,很多人在解释RPC概念时会提到其是执行远程的方法,然后直接得出rpc包含http的结论。其实如果按照此概念去思考的话,其实并不能得出Http是Rpc的一种实现。因为http调用的方式,从使用者的角度来说,并不是直接调用其方法,而是按照一定的方式,完善出了一条http请求,然后交由本地客户端进行数据传输。

而相对比的,如果用过相关Rpc框架,例如Dubbo,是可以像调用本地方法一样直接调用远程方法。而http的调用方式可以认为是一种服务调用,而不是一种方法。

感觉文章博主应该是有过rpc相关的使用经验,有点先入为主了。那么到底rpc与http的关系如何呢,我也思考了很久,后面发现应该从定义上入手,我们既然在讨论Rpc是什么,怎么能忽略最简单的定义呢。

Remote Procedure Call ,其中"Procedure"按照谷歌翻译有以下几种解释:程序、过程、步骤,并不是 方法(Method)。而程序是包含方法的,同时也包含服务。因此上文中才强调了是一种程序或过程,而不是方法。

1.4 Rpc框架

Rpc框架是为了帮助我们在本地服务调用远程服务时像调用本地服务一样简单,我们不需要关心其底层实现,只需要配置好相应的信息,rpc框架就会帮我们做这些事。例如在dubbo中,我们只需要配置好相应的注册中心与想要调用的方法,我们就可以按照本地调用的方式调用远程服务。

1.5 总结

按照我们上文的梳理过程,可以认为Rpc是一种概念,主要有两种实现,一种是以http方式的服务调用,另一种是以自定义Tcp协议实现的方法调用方式,例如dubbo协议,当然一般rpc框架也都支持http协议。当然,无论是那种方式,最终都是以Tcp/Udp的方式进行传输。

image-20221116163351469

二、Rpc框架

2.1 dubbo是什么

我们上文说到Rpc框架就是帮助我们在调用远程服务时像调用本地服务一样简单,dubbo就是由阿里巴巴开源的一块rpc框架。

例如,在我们想调用某个远程方法时,只需要配置好相关配置,然后直接调用即可,dubbo会帮助我们将处理中间的过程。

/*
省略相关配置
*/

//将配置注册到spring
@Resource
private QueryPinService queryPinService;

//直接使用远程方法,像调用本地服务一样简单
ueryPinService.getPinWithConfig(paramMap, null);

dubbo整体架构图如下:

图片

节点说明
Provider 提供远程服务的服务提供方
Registry 注册中心
Consumer 需要调用远程服务的服务消费方
Container 服务运行的容器
Monitor 监控中心

作用流程大致如下:

首先服务提供者 Provider 启动然后向注册中心注册自己所能提供的服务。

服务消费者 Consumer 启动向注册中心订阅自己所需的服务。然后注册中心将提供者元信息通知给 Consumer, 之后 Consumer 因为已经从注册中心获取提供者的地址,因此可以通过负载均衡选择一个 Provider 直接调用

之后服务提供方元数据变更的话注册中心会把变更推送给服务消费者

服务提供者和消费者都会在内存中记录着调用的次数和时间,然后定时的发送统计数据到监控中心

2.2 dubbo和spring cloud的区别

首先两者都是当前主流的微服务框架,不过两者也存在很多差异:

  1. 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案,主要有网关、注册中心、配置中心、监控中心等;Dubbo 是 它的关注点主要在于服务的调用和治理,其中服务调用更时其核心。

  2. 生态环境不同:SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。

  3. 调用方式:SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。

两者组件配置:

image-20221116173852813

很明显SpringCloud拥有比dubbo更完善的配置,支持的功能性也更强。

相比来说,SpringCloud像一台品牌机,内部所有配置都已经帮我们装配好了,我们只需要开箱即用即可。而dubbo则更像是组装机,需要我们自己选择配置,只提供了核心的计算能力,而显示器、电源等需要我们自己装配调试使用。

从使用者来说,新手小白更适合品牌机,傻瓜式一键操作,就能完成我们想要的效果。而dubbo更适合电脑高手,自己装配自己想要的组件,使用起来更顺手。

标签:Dubbo,调用,服务,RPC,远程,Rpc,源码,浅析
From: https://www.cnblogs.com/Jcloud/p/18362990

相关文章

  • JDK源码——String相关
    StringJDK源码中的String类是Java中最常用的类之一,它提供了许多用于处理字符串的方法。以下是一些常用的String类方法:构造方法:String():创建一个空字符串。String(char[]value):根据字符数组创建一个新的字符串。String(byte[]bytes,intoffset,intlength):根据字节数......
  • springboot个人健康管理-计算机毕业设计源码04385
    摘 要随着移动互联网的飞速发展,微信小程序因其便捷、高效、低成本的特点,成为了连接用户与服务之间的桥梁。特别是在健康管理领域,微信小程序为用户提供了一个随时随地进行健康数据记录、查询和管理的平台。而SpringBoot作为一种轻量级的Java开发框架,因其快速搭建、易于集成......
  • django空巢老人志愿服务系统-计算机毕业设计源码58726
    摘 要随着社会老龄化问题日益突出,空巢老人群体的关注和关怀日益重要。本研究设计并实现了基于Python的空巢老人志愿服务系统,旨在利用技术手段提供更多关爱和支持给空巢老人群体。该系统结合Python编程语言的灵活性和易用性,实现了慈善捐赠、医院信息查询、志愿活动发布、志......
  • 一个创新的国密前后分离快速开发平台,提供工作流、多租户、多数据源、Vue3表单设计器,高
    前言在当前的软件开发领域,尤其是企业级应用开发中,开发者面临着诸多挑战,如代码安-全、数据加密、国产化适配等。传统的开发平台往往难以满足这些日益增长的需求,特别是在国产化替代的大背景下,对于符合国家安-全标准的软件需求愈发迫切。这就需要一款能够解决上述痛点,同时提供高......
  • 一款开箱即用的整合第三方登录的开源组件,整合了国内外数十家知名平台的OAuth登录(附源
    前言在现代应用开发中,第三方登录认证是一个不可或缺的功能,它为用户带来了便捷的登录体验。然而,开发者在实现这一功能时往往会遇到一些痛点:需要对接多个第三方平台的SDK,每增加一个平台就要编写一套新的代码,导致代码维护变得复杂且困难。此外,从头开发一个完整的登录功能不仅需要......
  • SSM-国外鞋服代购平台-97782(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    SSM国外鞋服代购平台摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,鞋服代购平台当然也不例外。代购平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过......
  • springboot电竞专题网站的设计与实现-附源码641314
    摘 要近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现今,大量的计算机技术应用于商业领域,......
  • 基于springboot教学评价系统的设计与实现-附源码641310
    摘  要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对教学评价等问题,对如何通过计算机教学评价进行研究分析,然后开发设计出教学评价系统已解决问......
  • Springcloud大学生在线学习平台-计算机毕业设计源码43038
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3社会可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......
  • 基于Java中的SSM框架实现智慧医疗预约挂号管理系统项目【项目源码+论文说明】计算机毕
    基于Java中的SSM框架实现智慧医疗预约挂号管理系统演示摘要伴随着人们对医疗的关注度越来越高,对于信息化就医的发展也是当今社会发展的最为重要的问题之一。为了进一步的促进医疗事业的信息化发展工作,许多的大型的医院或者是医疗机构也在逐步的开展了信息化的就医和信息化......