精华内容
下载资源
问答
  • RPC HTTP

    2020-09-18 17:16:35
    RPC HTTP rpc 字面意思就是远程过程调用,只是对不同应用间相互调用的一种描述, 一种思想。具体怎么调用?实现方式可以是最直接的 tcp 通信,也可以是 http 方式,在很多的消息中间件的技术书籍里,甚至还有...
    RPC HTTP
     
    rpc 字面意思就是远程过程调用,只是对不同应用间相互调用的一种描述, 一种思想。具体怎么调用?实现方式可以是最直接的 tcp 通信,也可以是 http 方式,在很多的消息中间件的技术书籍里,甚至还有使用消息中间件来实现 RPC 调用的,我们知道的 dubbo 是基于 tcp 通信的,gRPC Google 公布的开源软件, 基于最新的 HTTP2.0 协议,底层使用到了 Netty 框架的支持。所以总结来说,rpc 和 http 是完全两个不同层级的东西,他们之间并没有什么可比性。
     
    实现 RPC 框架

     

    实现 RPC 框架需要解决的那些问题
     
    代理问题
    代理本质上是要解决什么问题?要解决的是被调用的服务本质上是远程的 服务,但是调用者不知道也不关心,调用者只要结果,具体的事情由代理的那个 对象来负责这件事。既然是远程代理,当然是要用代理模式了。 代理(Proxy)是一种设计模式,即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。那 我们这里额外的功能操作是干什么,通过网络访问远程服务。 jdk 的代理有两种实现方式:静态代理和动态代理。
     
    序列化问题
    序列化问题在计算机里具体是什么?我们的方法调用,有方法名,方法参数, 这些可能是字符串,可能是我们自己定义的 java 的类,但是在网络上传输或者 保存在硬盘的时候,网络或者硬盘并不认得什么字符串或者 javabean,它只认得 二进制的 01 串,怎么办?要进行序列化,网络传输后要进行实际调用,就要把 二进制的 01 串变回我们实际的 java 的类,这个叫反序列化。java 里已经为我们 提供了相关的机制 Serializable
    通信问题
    我们在用序列化把东西变成了可以在网络上传输的二进制的 01 串,但具体 如何通过网络传输?使用 JDK 为我们提供的 BIO
     
    登记的服务实例化
    登记的服务有可能在我们的系统中就是一个名字,怎么变成实际执行的对象 实例,当然是使用反射机制。
    反射机制是什么?
    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获 取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。
    反射机制能做什么
    反射机制主要提供了以下功能:
    •在运行时判断任意一个对象所属的类;
    •在运行时构造任意一个类的对象;
    •在运行时判断任意一个类所具有的成员变量和方法;
    •在运行时调用任意一个对象的方法;
    •生成动态代理
    展开全文
  • rpc和http

    2020-02-01 11:57:53
    RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于...

    RPC和HTTP

    无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

    常见的远程调用方式有以下2种:

    • RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

    • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。

      现在热门的Rest风格,就可以通过http协议来实现。

    如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。

    相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么SpringCloud搭建微服务是不二之选。在我们的项目中,我们会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用。

    展开全文
  • RPC和HTTP

    2020-02-11 09:50:13
    一、为什么需要RPC,而不是简单的HTTP接口?  RPC(即Remote Procedure Call,远程过程调用),主要是基于TCP/IP...下面来具体说一说RPC服务和HTTP服务。 二、RPC  从三个角度来介绍RPC服务:分别是RPC架构,同...

    一、为什么需要RPC,而不是简单的HTTP接口?

      RPC(即Remote Procedure Call,远程过程调用),主要是基于TCP/IP协议;而HTTP服务主要是基于HTTP协议的。我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹啦!下面来具体说一说RPC服务和HTTP服务。

    二、RPC

      从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架。

      1.RPC架构

      一个完整的RPC架构里面包含了四个核心的组件,分别是Client 、Server、Client Stub、Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件:

    • 客户端(Client),服务的调用方。
    • 服务端(Server),真正的服务提供者。
    • 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
    • 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法  

      

      RPC主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。实际的开发当中是这么做的,项目一般使用maven来管理。比如我们有一个处理订单的系统服务,先声明它的所有的接口(这里就是具体指Java中的interface),然后将整个项目打包为一个jar包,服务端这边引入这个二方库,然后实现相应的功能,客户端这边也只需要引入这个二方库即可调用了。为什么这么做?主要是为了减少客户端这边的jar包大小,因为每一次打包发布的时候,jar包太多总是会影响效率。另外也是将客户端和服务端解耦,提高代码的可移植性。

      2.同步调用与异步调用

      什么是同步调用?什么是异步调用?同步调用就是客户端等待调用执行完成并返回结果异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。这个过程有点类似于Java中的callablerunnable接口,我们进行异步执行的时候,如果需要知道执行的结果,就可以使用callable接口,并且可以通过Future类获取到异步执行的结果信息。如果不关心执行的结果,直接使用runnable接口就可以了,因为它不返回结果,当然啦,callable也是可以的,我们不去获取Future就可以了。

      3.流行的RPC框架

         目前流行的开源RPC框架还是比较多的。下面重点介绍三种:

      (1)gRPC是Google公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。 我们知道HTTP2.0是基于二进制的HTTP协议升级版本,目前各大浏览器都在快马加鞭的加以支持。 这个RPC框架是基于HTTP协议实现的,底层使用到了Netty框架的支持

      (2)Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

      (3)Dubbo是阿里集团开源的一个极为出名的RPC框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。同样的远程接口是基于Java Interface,并且依托于spring框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。

    三、HTTP

      其实在很久以前,我对于企业开发的模式一直定性为HTTP接口开发,也就是我们常说的restful风格的服务接口。的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议进行传输。我们记得之前本科实习在公司做后台开发的时候,主要就是进行接口的开发,还要写一大份接口文档,严格地标明输入输出是什么?说清楚每一个接口的请求方法,以及请求参数需要注意的事项等。比如下面这个例子:POST http://www.httpexample.com/restful/buyer/info/share
      接口可能返回一个JSON字符串或者是XML文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作

    四、总结

      目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的。

           论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP协议,需要带HTTP请求头, 导致传输起来效率或者说安全性不如RPC。(RPC 本身是一种框架,而http 是应用层的协议

           现在问题是,遇到怎样的瓶颈了才需要或者说更适合用RPC(比如像阿里这么大的请求并发量,简单的HTTP肯定达不到预期),但问题是大家所在的公司,要有像阿里这么大的量是比较少的,甚至说1/1000的量可能都没有,那我们还需要使用RPC吗?

           技术应该不是为了使用新技术而去使用,而应该是旧技术存在某些瓶颈,存在难以支撑或者扩展性越老越差等问题暴露出来之后,用新技术来进行解决。

           那RPC最大的优点,或者说它相比简单的HTTP接口,它的优势、更适合它的业务场景是怎样呢?简单的HTTP又哪里不足,哪些场景明显不太适合呢?

           RPC是一种技术的概念名词。 HTTP是一种协议,RPC可以通过HTTP来实现,也可以通过Socket自己实现一套协议来实现。所以楼主可以换一个问法,为何RPC还有除HTTP 之外的实现法,有何必要。毕竟除了HTTP实现外,私有协议不具备通用性。那么我想唯一的答案就在于HTTP不能满足其业务场景的地方,所以这个就要具体案例具体分析了。

           http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。

      rpc是一种概念,http也是rpc实现的一种方式。论复杂度,dubbo/hessian用起来是超级简单的。最近用dubbo和hessian比较多,http的几乎都被废弃了。

           至于为什么用,其实很简单,业务场景不一样。我最早的单位所有的代码都在一个工程里,一次要发布几百m的代码。这种架构是非常有利于小程序的。但是我们为什么要应用rpc层呢,一个功能,一套代码下来不就解决了么?我觉得有几个好处:1 灵活部署 2 解耦 至于为什么,当你用到的时候,你就会体会。

      RPC的核心并不在于使用什么协议。RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的。RPC的原理主要用到了动态代理模式,至于http协议,只是传输协议而已。简单的实现可以参考spring remoting,复杂的实现可以参考dubbo。

           RPC是一个软件结构概念,是构建分布式应用的理论基础。就好比为啥你家可以用到发电厂发出来的电?是因为电是可以传输的。至于用铜线还是用铁丝还是其他 种类的导线,也就是用http还是用其他协议的问题了。这个要看什么场景,对性能要求怎么样。比如在java中的最基本的就是RMI技术,它是java原 生的应用层分布式技术。我们可以肯定的是在传输性能方面,RMI的性能是优于HTTP的。那为啥很少用到这个技术?那是因为用这个有很多局限性,首先它要保证传输的两端都要要用java实现,且两边需要有相同的对象类型和代理接口,不需要容器,但是加大了编程的难度,在应用内部的各个子系统之间还是会看到他的身影,比如EJB就是基于rmi技术的。这就与目前的bs架构的软件大相径庭。用http必须要服务端位于http容器里面,这样减少了网络传输方面的开发,只需要关注业务开发即可。所以在架构一个软件的时候,不能一定根据需求选定技术。

    展开全文
  • RPC和http

    2019-01-06 00:00:00
    在多个服务之间要描述接口状态确实我之前想的太简单了,例如,http协议在性能上确实有点问题,而且最重要的是协议,RPC协议更多的是自定义协议,对于协议可以定义更多的协议头,而http协议不行,并且在性能上也逊色...

    在学习微服务的过程中遇到这两个概念,趁现在弄懂了记录一下:

    在多个服务之间要描述接口状态确实我之前想的太简单了,例如,http协议在性能上确实有点问题,而且最重要的是协议,RPC协议更多的是自定义协议,对于协议可以定义更多的协议头,而http协议不行,并且在性能上也逊色的多,但http学习成本低,方便,只能说各有各的有点吧。

    转载于:https://www.cnblogs.com/qunincey/p/10226846.html

    展开全文
  • RPC和HTTP对比

    2020-03-23 11:10:17
    常见的远程调用方式有以下2种:RPC和Http。其中Http大家很熟悉不多说,RPC是什么呢? RPC基础概念 RPC就是远程过程调用协议,其作用就是客户端与服务端之间的远程调用,就像本地自己调用一样,让服务端进行服务化 1...
  • RPC和HTTP的区别

    2020-03-20 22:36:37
    rpc和http的存在重大不同的是:http请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。结果是使得一个应用支持分层的转换(layers of transformation)和间...
  • RPC和HTTP的介绍

    2021-04-13 22:36:20
    下面一堆答案给题主科普各种RPC和HTTP的原理,什么RPC也可以包含HTTP协议,其实并没有解答题主的困惑。题主的问题准确来讲,是说:既然有HTTP请求可以解决系统间调用的问题了,为什么还会有人使用RPC调用?题主明显...
  • RPC和HTTP服务对比

    2018-03-26 09:57:00
    RPC和HTTP服务对比 RPC(即Remote Procedure Call,远程过程调用), RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要...
  • 用通俗的语言讲清楚RPC和HTTP https://network.51cto.com/art/201906/598181.htm
  • RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有RMI(remote method invoke)...
  • Spring的RestTemplate(RPC和HTTP)

    千次阅读 2019-07-16 11:23:41
    理解RPC和HTTP的区别 能使用RestTemplate发送请求 2. 讲解 1 . RPC和HTTP 常见远程调用方式: RPC:(Remote Produce Call)远程过程调用 1.基于Socket 2.自定义数据格式 3.速度快,效率高 4.典型应用代表:Dubbo...
  • RPC和HTTP接口

    2020-07-27 16:00:29
    rpc是远程过程调用,http超文本协议,rpc主要工作在http协议之上,效率要高于http协议 rpc架构包含四个核心组件:Client、Server、Client Stub、Server Stub 客户端:服务调用方 服务器:服务提供者 根客户端:存放...
  • RPC和HTTP区别

    2020-04-12 19:27:09
    什么是RPC呢?百度百科给出的解释是这样的:“RPC(Remote Procedure Call ...HTTP。其因为简单、扩展性强的特点而广受开发者的青睐。 而RPC 呢,是 Remote Procedure Call Protocol 的简写,中文描述是远程过...
  • Rpc和Http的区别

    2021-04-20 12:38:51
    速度来看,RPC要比http更快,虽然底层都是TCP,但是http协议的信息往往比较臃肿。 难度来看,RPC实现较为复杂,http相对比较简单。 灵活性来看,http更胜一筹,因为它不关心实现细节,跨平台、跨语言。 使用场景 ...
  • RPCRPC是什么RPC(Remote Procedure Call)指的是远程过程调用,简单的说,RPC就是从一台机器上通过参数传递的方式调用另一台机器上的一个函数或方法并得到响应结果。RPC会隐藏底层的通讯细节。RPC是一个请求响应模型...
  • 【给大家分享Java面试中经常会被提问的问题哦,每天晚上9点30准时分享】01请说一下rpc和http的区别? 一、区别: 1、传输协议RPC,可以基于...
  • 来源:程序员乔戈里01请说一下rpc和http的区别? 一、区别: 1、传输协议RPC,可以基于TCP协议,也可以基于HTTP协议HTTP,基于HTTP协议 2、传输效率RPC,使⽤用⾃自定义的TCP协议,可以让请求报⽂文体积更更⼩小,...
  • RPC和Http的区别

    千次阅读 2018-07-12 11:05:16
    RPC 是 远程过程调用,RPC 包含传输协议编码协议。http是超文本传输协议,RPC 也可以用http作为传输协议,但一般是用 tcp作为传输协议。用json作为编码协议。RPC的主要用在内部服务间的通信。我们常说的微服务架构...
  • TCP RPC和HTTP RPC

    2018-05-28 14:32:00
    TCP RPC和HTTP RPC相比, TCP RPC的优势在哪里呢?一般说是性能问题,很多人说到http的头多了一些数据占用带宽,还有长连接的问题。事实是SPDY,http2已经是长连接了,做设计RPC的时候,不妨考虑http吧,使用http ...
  • rpc和http的存在重大不同的是:http请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。结果是使得一个应用支持分层的转换(layers of transformation)和间接层...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,151
精华内容 2,060
关键字:

rpc和http