博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo系列(2)_RPC介绍
阅读量:6993 次
发布时间:2019-06-27

本文共 1344 字,大约阅读时间需要 4 分钟。

一、本文目的
        主要介绍RPC的一些概念和应用。
二、为什么要介绍RPC
   DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
   上文黑色部分为官方对Dubbo的介绍,其中关键提到了Dubbo是RPC远程服务调用方案,那么先弄清楚RPC的概念和应用就非常重要了。
三、什么是RPC
       1、百度百科:远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC采用客户机/服务器模式。
       2、维基百科:
In 
 a 
remote procedure call
 (
RPC
) is when a 
 causes a procedure (
) to execute in another 
 (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction.
        3、个人理解
              a)  一般应用于分布式环境
              b)采用客户机/服务器模式,客户端/服务器一般不在同一台机器或同一个网络中
              c)  
通过网络调用远程进程,但是给调用方的感觉就是调用本地程序一样
四、RPC的基本通讯过程
  • 首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
  • 第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
  • 第三,当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
  • 第四,B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值
  • 第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用
35158-20161029202113546-398049395.png
五、RPC的协议
  1. CORBA
  2. Java RMI
  3. Hessian
  4. Thrift
  5. Web Service XML
  6. Web Service Restful
六、参考资料

转载地址:http://wwsvl.baihongyu.com/

你可能感兴趣的文章
省赛模拟一 阶乘除法
查看>>
两对象值合并
查看>>
C# 固定窗体大小且不能鼠标调整大小完美实现
查看>>
hdu 1856 More is better (并查集)
查看>>
javascript数据结构与算法--二叉树遍历(后序)
查看>>
Android Studio启动模拟器
查看>>
ORM 快速开发平台 -- WebAPI 配置实现
查看>>
PowerDesigner连接MySQL,建立逆向工程图解
查看>>
[Android] AndroidStudio + JNI(NDK)开发相关总结
查看>>
深圳短信猫厂家自带短信猫开发包支持多种开发语言
查看>>
基于python的WGS84转百度坐标
查看>>
生成器
查看>>
Hbase篇--HBase中一对多和多对多的表设计
查看>>
【java】构建工具,maven,ant,gradlew
查看>>
LintCode_14 二分查找
查看>>
04-python3.5-模拟三级菜单-省-县-区域--01
查看>>
算法竞赛入门经典chapter4:本章小结
查看>>
asp.net中的<%%>形式的详细用法实例讲解
查看>>
【LeetCode】3. Longest Substring Without Repeating Characters
查看>>
dao层结构的设计方案
查看>>