远程过程调用协议

服务之间的调用为啥不直接用 HTTP 而用 RPC?

寵の児 提交于 2020-01-03 22:41:58
什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。 RPC原理是什么? 服务消费方(client)调用以本地调用方式调用服务; client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体; client stub找到服务地址,并将消息发送到服务端; server stub收到消息后进行解码; server stub根据解码结果调用本地的服务; 本地服务执行并将结果返回给server stub; server stub将返回结果打包成消息并发送至消费方; client stub接收到消息,并进行解码; 服务消费方得到最终结果。 下面再贴一个网上的时序图: RPC 解决了什么问题? 从上面对 RPC 介绍的内容中,概括来讲RPC 主要解决了: 让分布式或者微服务系统中不同服务之间的调用像本地调用一样简单。 常见的 RPC 框架总结? RMI(JDK自带): JDK自带的RPC,有很多局限性,不推荐使用

RPC和HTTP的理解以及不同之处

人走茶凉 提交于 2020-01-02 19:40:52
RPC协议:远程过程调用协议(Remote Procedure Call Protocol),是一种计算机通讯协议。 如何理解远程过程调用? 假设有两台服务器A和B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或者方法,由于不在一个内存空间,所以不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 简要的步骤 解决通讯问题。主要是客户端和服务器建立TCP连接,远程调用所有交换的数据都在这个连接里面进行交换,连接可以是按需连接,数据交换完毕之后就关闭连接;也可以是长连接,多个远程调用都共享同一个连接。 解决寻址问题。服务器A想要调用服务器B的应用,那么A应该告知RPC框架B服务器(主机名或IP地址)以及特定的端口,然后指定调用的方法或者函数的名称以及入参出参等信息,这样才能完成服务的一个调用。比如基于Web服务协议栈的RPC,就需要提供一个endpoint URI,或者是从UDDI服务上进行查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。 当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。 B服务器收到请求后

Java RMI与RPC的区别

安稳与你 提交于 2020-01-01 09:03:21
文章转自http://www.cnblogs.com/ygj0930/p/6542811.html 一:RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。 一次RPC调用的过程大概有10步:   1.执行客户端调用语句,传送参数   2.调用本地系统发送网络消息   3.消息传送到远程主机   4.服务器得到消息并取得参数   5. 根据调用请求以及参数执行远程过程(服务)   6.执行过程完毕,将结果返回服务器句柄   7.服务器句柄返回结果,调用远程主机的系统网络服务发送结果   8.消息传回本地主机   9.客户端句柄由本地主机的网络服务接收消息   10.客户端接收到调用语句返回的结果数据 二:RMI 远程方法调用 RMI:远程方法调用(Remote Method Invocation)。能够让在客户端 Java 虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。 RMI远程调用步骤: 1,客户调用客户端辅助对象stub上的方法 2,客户端辅助对象stub打包调用信息(变量,方法名),通过网络发送给服务端辅助对象skeleton 3,服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象 4

RPC框架实现细节-阿里产出

心不动则不痛 提交于 2019-12-27 07:14:36
   在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。   而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用我们的新服务,我们的服务该怎么发布以便他人调用?下文将对这两个问题展开探讨。 1 public interface HelloWorldService { 2 String sayHello(String msg); 3 } 1 public class HelloWorldServiceImpl implements HelloWorldService { 2 @Override 3 public String sayHello(String msg) { 4 String result = "hello world " + msg; 5 System.out.println(result); 6 return result; 7 } 8 } 1 public class Test { 2 public static void main(String[] args) { 3

php中流行的rpc框架详解

白昼怎懂夜的黑 提交于 2019-12-26 21:46:00
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群 点击此处 。 通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。 远程调用原理 比如 A (client) 调用 B (server) 提供的remoteAdd方法: 首先A与B之间建立一个TCP连接; 然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去; B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回; A接受远程调用结果,输出30。 RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。 远程调用的好处 解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露。 RPC与Socket有什么区别?

<微服务架构>—RPC入门篇

杀马特。学长 韩版系。学妹 提交于 2019-12-26 16:32:45
概念 RPC(Remote Procedure Call):远程过程调用 ,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想.RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON) 通信框架:MINA 和 Netty 目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。 gRPC:是 Google 公布的开源软件,基于HTTP 2.0的协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。 Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。 用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说需要学习特定领域语言这个特性,还是有一定成本的。 Dubbo:是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用

REST与RPC区别

隐身守侯 提交于 2019-12-23 06:52:02
OSI网络七层模型 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等; 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断; 第四层:传输层。管理着网络中的端到端的数据传输; 第五层:网络层。定义网络设备间如何传输数据; 第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输; 第七层:物理层。这一层主要就是传输这些二进制数据 实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面,因为RPC主要是基于TCP/IP协议(传输层协议),HTTP主要是基于HTTP协议(应用层协议)。 1、什么是REST? REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。 HTTP动词与REST风格CRUD对应关系: 2、什么是RPC Remote

RPC框架的理解-------转载

℡╲_俬逩灬. 提交于 2019-12-21 04:34:56
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。 RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。 目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。 下面重点介绍三种: gRPC:是 Google 公布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。 Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。 用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说需要学习特定领域语言这个特性,还是有一定成本的。 Dubbo:是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用

C#开发和调用Web Service

不想你离开。 提交于 2019-12-19 23:54:41
原文: http://blog.csdn.net/h0322/article/details/4776819 1.1、Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。 XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。 Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。 WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。 UDDI (Universal Description, Discovery, and

Web Service学习

╄→гoц情女王★ 提交于 2019-12-19 04:07:27
/*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */                    一、 Web Service 简介 1.1 、 Web Service 基本概念   Web Service也叫XML Web Service。Web Service 是一种可以接收从Internet或Intranet上的其它系统传递过来的请求,轻量级的独立通讯技术。是:通过SOAP在Web上提供软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。   XML:(Extenstible Markup Language)扩展性可标记语言。面向短期的数据处理,面向万维网,是SOAP的基础。   SOAP:(Simple Object Accesss Protlcol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL文档以后,他可以通过SOAP调用你Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或STMP。   WSDL:(Web Service Description Language),WSDL文件是一个XML文档