zoukankan      html  css  js  c++  java
  • 040 Http与RPC

      一直在说,但是没有系统的文档理解过。

    1.本质

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

      他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。

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

    2.使用场景对比

      http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。

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

    3.RPC原理目的核心

      RPC:远程过程调用。

      RPC的核心并不在于使用什么协议。

      RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。

      通过RPC能解耦服务,这才是使用RPC的真正目的。

      RPC的原理主要用到了动态代理模式,至于http协议,只是传输协议而已。简单的实现可以参考spring remoting,复杂的实现可以参考dubbo。

    4.区别

      RPC 是 远程过程调用,RPC 包含传输协议和编码协议。

      http是超文本传输协议,RPC 也可以用http作为传输协议,但一般是用 tcp作为传输协议。用json作为编码协议。RPC的主要用在内部服务间的通信。

    5.联系

      看完RPC的基本概念,那么它与HTTP有何种联系,HTTP与RPC有什么关联吗?

      其实,HTTP协议也可以用来实现RPC框架,但是HTTP1.1协议的TCP报文包含太多没用的信息,如果使用HTTP1.1协议来实现RPC框架,显然效率太低了。这也是为什么那么多的RPC框架都使用自有的协议进行封装,以提高性能。

      但是如今的HTTP2.0的编码效率已大大优化,Google的grpc框架便是基于HTTP2.0协议实现。

      所以,我们可以这么理解,所谓RPC调用实际上与平常的HTTP调用过程相似,不同的是它更多的是封装了“服务发现”,“异常监控”,"重试机制"等面向服务的高级特性。

    6.常见的RPC

      常见的RPC框架有Google的grpc、阿里的dubbo、Facebook的thrift以及Twitter的finagle等,它们不仅仅将复杂的调用过程的细节封装屏蔽,更重要的提供了一整套大型分布式系统必备的高级服务特性。

    7.什么使用用Http

      RPC服务主要是针对大型企业的,而HTTP服务主要是针对小企业的,因为RPC效率更高,而HTTP服务开发迭代会更快。

      

      

  • 相关阅读:
    Vue Scroller:Vue 下拉刷新及无限加载组件
    vue引用公用的头部和尾部文件。
    Java后期拓展(三)Nginx ——高性能的HTTP和反向代理服务器
    JAVA后期拓展(二)ZooKeeper——分布式应用程序协调服务系统
    Java高级部分
    Java后期拓展(一)非关系型数据库Redis
    LoadRunner(四)——深度了解LR相关功能
    LoadRunner(三)——LR相关概念&组成部分
    LoadRunner(二)——性能测试过程概述
    LoadRunner(一)——性能测试基础及性能指标概述
  • 原文地址:https://www.cnblogs.com/juncaoit/p/9813816.html
Copyright © 2011-2022 走看看