为了账号安全,请及时绑定邮箱和手机立即绑定

李狗蛋和二狗子因为HTTP or RPC打起来了No.135

标签:
Spring Cloud

[╮(╯_╰)╭一个小故事]

从前有两个程序员,一个叫李狗蛋一个叫二狗子,正在启动一个 web 项目。李狗蛋说我们系统交互就用HTTP听我的准没错。二狗子说,为什么我们不用RPC呢听我的准没错?李狗蛋说凭什么要听你?二狗子说那凭什么要听你的?李狗蛋说老子说用HTTP就用HTTP老子天下第一。二狗子脸无表情说了一声,滚。

风。

风吹。

空调风吹。

冷冽的空调风挡不住他们之间对于技术的热情,他们。。。打起来了。

看他们打架其实我挺....挺饱的,毕竟搬了板凳吃了很多西瓜,有点撑。但他们好像吵架的前提都没整明白,HTTP跟RPC的区别都没整清楚。希望你们不要因为这玩意吵架了,阿弥陀佛,毕竟太多人肚子撑不好。


[╮(╯_╰)╭HTTP和RPC的区别]

HTTP,Hypertext Transfer Protocol,超文本传输协议,是一款网络传输协议。

RPC,Remote Procedure Call,远程方法调用,是一款服务调用方案。

一个是协议一个是方案,这两者没什么必然的关系,所以也没什么可以比较的。

为什么会有人拿他们来比较呢?

是因为,现在有着 SpringCloud为首的HTTP restful 风格的调用模式,也有着grpc等这类私有协议的调用方式。所以自然而然,会有很多人从这个层次上认为,他们是同一类东西,其实并非如此。

二者本质都是希望得到服务,而被创造出来的技术。


[╮(╯_╰)╭HTTP究竟是什么]

HTTP 全名叫超文本传输协议,是在互联网中用来传输大量信息(比如文本、声音、视频等)的一个协议,这个模式是C/S 模式,也就是客户端(一般是浏览器)用HTTP发起请求,服务端接收到请求后同样用HTTP响应请求。HTTP是不是互联网本身呢?明显不是。互联网始于1969年美国的阿帕网,而HTTP1.0在1996年才开始使用,也是在这一年,以浏览器技术为基础的我们认知的互联网,开始蓬勃发展。一图胜百言,我就不多介绍了。

HTTP请求交互:

https://img1.sycdn.imooc.com//5d176d8f000152b305640507.jpg

一次 HTTP 请求

客户端:你准备好我要发送了啊。

服务端:好吧你发送吧。

客户端:你真的准备好我真的要发送了啊。

客户端:发送请求。

服务端:响应请求。

客户端:你准备好我要关闭了啊。

服务端:好吧你关闭吧。

服务端:我关闭连接了。

客户端:好的我知道你关闭了。


[╮(╯_╰)╭RPC究竟是什么]

RPC 全名叫 远程过程调用,是指在调用远程服务的时候,用本地调用的方式,本地的处理器屏蔽了所有的网络、异常、重试等细节,服务调用方只关注输入值和返回的服务,相当于一个代理。之前讲过一次了,不多说了。企业神奇中间件-RPC(总览) No.97

https://img1.sycdn.imooc.com//5d176db90001d3fc05460538.jpg


[╮(╯_╰)╭HTTP和RPC开始PK了]

Round1

用 HTTP 可以实现 RPC 吗? 能。不仅仅HTTP可以实现RPC,任何网络协议都可以用来实现RPC,只要两台机器之间网络是通的,用什么协议都无所谓。

用 RPC 可以实现 HTTP 吗? 不能。HTTP 是有国际标准滴。

Round2

HTTP可以抛弃 TCP/IP 吗?暂时不能。现在HTTP/1.1 甚至 HTTP/2.0 暂时都还是基于 TCP/IP 协议的,HTTP/3.0 有一点点可能可以解除TCP依赖。

RPC可以抛弃 TCP/IP 吗?能。还是之前的结论,只要网络是通的,什么TCP、UDP、甚至小众的网络协议都可以支持RPC的实现。

Round3

HTTP可以跨平台跨语言吗?天然支持。毕竟拿到就用嘛,都是文本。

RPC可以跨平台跨语言吗?需要一定的努力,一些私有协议会把自己的序列化和反序列化给定制化了,只能自己解析自己,比如Java 的RMI。

Round4

我能自己实现一个HTTP吗?想得有点多。国际标准来的。

我能自己实现一个 RPC 吗?小伙子有前途,可以的,写一个呗。

https://github.com/CallMeDJ/BigBanana-rpc.git

Round5

HTTP快吗?快,但是有一些头在企业应用没啥用。

RPC快吗?快,基于私有协议可以把网络传输冗余数据降到最低。

https://img1.sycdn.imooc.com//5d176de400018c7a07030213.jpg

看这个厚重的头..


[╮(╯_╰)╭小结]

如果你只能记住一句话,那就记住这句吧。

HTTP是网络协议,跨平台跨语言,结合restful开发应用协作,开发很高效,但是协议头很重。RPC是调用方案,一般都会有私有协议,没什么多余信息,运行很高效,但大多数rpc的迁移性并不是很好。

HTTP就是英语,能处理非常多非常广泛的场景。RPC 就是方言,效率可能比英语高多了,但是可能有人听不懂。


[╮(╯_╰)╭后话]

关于 HTTP 和 RPC 这个话题是在大蕉的朋友们这个群里抛出来的问题,我觉得很有价值也很好玩,因为很多人的认知里,RPC就是比HTTP快。说实话,现在 gRPC 确实比 HTTP/1.1 要更快更有效率,所以大家才会觉得 RPC 就是比HTTP 快。但其实一些实现很糟糕的RPC未必比HTTP快比如大蕉自己实现的RPC。反过来说,RPC也可以基于HTTP搭建,把 HTTP 作为基础网络层。所以这两个东西并不是非此即彼的敌对关系,而是分工合作甚至相互协作的关系。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消