一句话概括

RPC代表:Feign、Dubbo

RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。

HTTP 代表:RestTemplate、HttpClient

HTTP 主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

有了HTTP调用之后,为什么还需要RPC

HTTP 调用使用起来非常的简洁、方便、优雅,但是有一点,在调用接口的时候,相比较 RPC 框架而言,性能堪忧。

虽说在微服务架构中,会讲按照业务划分的微服务独立部署,并且运行在各自的进程中。微服务之间的通信更加倾向于使用 HTTP 这种简答的通信机制,大多数情况都会使用 REST API。这种通信方式非常的简洁高效,并且和开发平台、语言无关,但是通常情况下,HTTP 并不会开启 KeepAlive 功能,即当前连接为短连接,短连接的缺点是每次请求都需要建立 TCP 连接,这使得其效率变的相当低下。

对外部提供 REST API 服务是一件非常好的事情,但是如果内部调用也是使用 HTTP 调用方式,就会显得显得性能低下,Spring Cloud 默认使用的 Feign 组件进行内部服务调用就是使用的 HTTP 协议进行调用,这时,我们如果内部服务使用RPC调用,对外使用 REST API,将会是一个非常不错的选择,恰巧,Dubbo Spring Cloud给了我们这种选择的实现方式。

HTTP和RPC的优缺点

传输协议

RPC: 可以基于TCP协议,也可以基于HTTP协议

HTTP: 基于HTTP协议

传输效率

RPC: 使用自定义的 TCP 协议,可以让请求报文体积更小,或者使用 HTTP2 协议,也可以很好的减少报文的体积,提高传输效率

HTTP: 如果是基于 HTTP1.1 的协议,请求中会包含很多无用的内容,如果是基于 HTTP2.0,那么简单的封装以下是可以作为一个 RPC 来使用的,这时标准 RPC 框架更多的是服务治理

性能消耗

RPC: 可以基于 thrift 实现高效的二进制传输

HTTP: 大部分是通过 json 来实现的,字节大小和序列化耗时都比thrift要更消耗性能

负载均衡

RPC:基本都自带了负载均衡策略

HTTP:需要配置 Nginx 来实现

服务治理

RPC:能做到自动通知,不影响上游

HTTP: 需要事先通知,修改 Nginx 配置

HTTP 和 RPC 的区别的更多相关文章

  1. MQ & RPC 消息队列与RPC的区别与使用场景

    MQ:  区别:面向数据.生产者与消费者.有缓冲节点.异步.系统级/模块级通信 选型:RabbitMQ.ActiveMQ/Apollo.ZeroMQ.memcacheQ.Redis.MSMQ.kafk ...

  2. rmi与rpc的区别

    这里简单说一下RMI和RPC的区别. 什么是RMI RMI(Remote Method Invocation,远程方法调用),能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端Java虚 ...

  3. Java RMI与RPC的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542811.html  一:RPC 远程过程调用 RPC(Remote Procedure Call Prot ...

  4. 关于http和rpc的区别(segmentfault上的回答)

    问题最近用了谷歌的grpc,所以对rpc和http有一点疑惑,感觉这两个东西功能上是一样的,rpc某个服务监听某一个方法,客户端调用这个方法,返回相应的数据,和http监听某个方法的路由 返回相应的数 ...

  5. 消息队列与RPC的区别

    一. 区别 1.消息队列能够积压消息,让消费者可以按照自己的节奏处理消息,但是RPC不能. 2.消息队列是一个异步的过程(生产者发送消息之后,不会等待消息的处理),RPC是一个同步的过程. 3.消息队 ...

  6. Dubbo与Hadoop RPC的区别

    本文来自网易云社区 RPC(Remote Procedure Call,远程过程调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...

  7. 消息中间件与RPC的区别

    消息中间件和消息通信与RPC各自具有怎样的优势,如何互补消息中间件主要实现的是异步.弹性消息以及队列,弹性消息有时可以借助于外存从而一定程度上可以实现峰值缓存,有效均衡服务器端压力,同时消息可以进行一 ...

  8. restful 和RPC 的区别

    https://www.cnblogs.com/Dong-Ge/articles/9577019.html

  9. RPC、RMI、SOAP、WSDL的区别详解

    RPC与RMI的区别============================================================================RPC:(Remote Pr ...

  10. RPC简介及原理

    简介 RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用). 越底层, ...

随机推荐

  1. Java扩展Nginx之七:共享内存

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 作为<Java扩展Nginx>系 ...

  2. 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架

    基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架 Avalonia简介: Avalonia是.NET的一个跨平台UI框架,提供了一个灵活的样式系统,支持广泛的操作 ...

  3. Word书签替换,加盖电子印章及转换PDF(Java实用版)

    一.前言 在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:https://ww ...

  4. Lora简介

    断断续续接触lora已经有几年时间了,一直用lora来做点对点的传输,近来有朋友想通过Lora来做广播群发和群收管理,想通过低成本方式实现,sx1302几百的银子,成本有点高,尝试通过sx1278/L ...

  5. 一文搞懂TCP的三次握手和四次挥手

    目录 1.三次握手 2.四次挥手 3.11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开. 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所 ...

  6. [nginx]编译安装openresty

    前言 OpenResty是一个基于Nginx和Lua的高性能Web平台,其内部集成了大量精良的Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 Web 应用.W ...

  7. phpexcel图片获取

    phpexcel图片获取常见的两种方式: require_once dirname(__FILE__) . '/../Jn/PHPExcel.php'; $filePath = "123.x ...

  8. spring-mvc 系列:注解开发(SpringMVCConfig、SpringConfig、AbstractAnnotationConfigDispatcherServletInitializer详细配置)

    目录 一.创建初始化类,代替web.xml 二.创建SpringConfig配置类,代替Spring的配置文件 三.创建SpringMVC配置类,代替SpringMVC的配置文件 四.测试功能 使用配 ...

  9. Docker容器怎么安装Vim编辑器

    ​ 在现代软件开发和系统管理中,Docker已经成为一个不可或缺的工具.它允许我们轻松地创建.部署和运行应用程序,以及构建可移植的容器化环境.然而,在Docker容器中安装特定的工具可能会有一些挑战, ...

  10. xv6 进程切换中的锁:MIT6.s081/6.828 lectrue12:Coordination 以及 Lab6 Thread 心得

    引言 这节课和上一节xv6进程切换是一个完整的的进程切换专题,上一节主要讨论进程切换过程中的细节,而这一节主要讨论进程切换过程中锁的使用,所以本节的两大关键词就是"Coordination& ...