TCP、RPC与HTTP到底是何方神圣?!
本文来源于:HTTP,TCP, socket,RPC 与gRPC都是啥? https://www.jianshu.com/p/959030de7f1c
TCP/HTTP与socket
首先回顾下计算机网络的五(七)层协议:物理层、数据链路层、网络层、传输层、(会话层、表示层)和应用层。那么从协议上来讲:
- TCP是传输层协议,主要解决数据如何在网络中传输
- HTTP 是应用层协议,主要解决如何包装数据(文本信息),是建立在tcp协议之上的应用。TCP协议是以二进制数据流的形式解决传输层的事儿,但对上层的应用开发极不友好,所以面向应用层的开发又产生了HTTP协议。
而socket 是针对TCP或UDP的具体接口实现,提供了在传输层进行网络编程的方法。
以上内容我们应该都听说的比较多了,下面主要来谈一谈RPC。
什么是RPC?
- RPC(Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达调用的数据。常存在于分布式系统中。
为何有http协议之后,还要RPC调用?
RPC跟HTTP不是对立面,RPC中可以使用HTTP作为通讯协议。RPC是一种设计、实现框架,通讯协议只是其中一部分。
RPC的本质是提供了一种轻量无感知的跨进程通信的方式,在分布式机器上调用其他方法与本地调用无异(远程调用的过程是透明的,你并不知道这个调用的方法是部署在哪里,通过PRC能够解耦服务)。RPC是根据语言的API来定义的,而不是基于网络的应用来定义的,调用更方便,协议私密更安全、内容更小效率更高。
http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先(基于TCP协议的情况下)就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
RPC 中要解决的问题:
- 建立通信:在客户端与服务端建立起数据传输通道,大都是TCP连接(gRPC使用了HTTP2)。
- 寻址:A服务器上的应用需要告诉RPC框架:B服务器地址、端口,调用函数名称。所以必须实现待调用方法到call ID的映射。
- 序列化与反序列化:由于网络协议都是二进制的,所以调用方法的参数在进行传递时首先要序列化成二进制,B服务器收到请求后要再对参数进行反序列化。恢复为内存中的表达方式,找到对应的方法进行本地调用,得到返回值。返回值从B到A的传输仍要经过序列化与反序列化的过程。
常见名词小结
名词 | 特点 |
---|---|
RPC | 远程过程调用(分布式、微服务间的方法调用) |
HTTP | 无状态,每次请求都要发送一个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp) |
TCP | 面向连接,三次握手保证通信可靠 |
UDP | 非面向连接,不可靠,速度快(可以手动对数据收发进行验证,IM系统多采用,QQ) |
socket | TCP协议的接口实现,面向传输层进行网络编程 |
单独来谈一谈gRPC
gRPC是谷歌开源的一个 RPC 框架,面向移动和 HTTP/2 设计。
- 内容交换格式采用ProtoBuf(Google Protocol Buffers),开源已久,提供了一种灵活、高效、自动序列化结构数据的机制,作用与XML,Json类似,但使用二进制,(反)序列化速度快,压缩效率高。
- 传输协议 采用http2,性能比http1.1好了很多
和很多RPC系统一样,服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。
ProtoBuf 具有强大的IDL(interface description language,接口描述语言)和相关工具集(主要是protoc)。用户写好.proto描述文件后,protoc可以将其编译成众多语言的接口代码。
补充:HTTP/2介绍
新特性:
新的二进制格式
HTTP1.X都是基于文本解析,而因为文本表现形式的多样性,基于文本协议的格式解析天然存在健壮性问题。而采用二进制格式后实现方便且健壮。
多路复用
多个request共享一个连接。
header压缩
在HTTP1.x中header信息很多,且每次都会重复发送,造成很大浪费。HTTP2.0使用encoder减少了传输的header大小,且通信双方都缓存一份包含了header信息的表,此后的请求可以只发送差异数据,避免信息的重复传输,进一步减少需要传输的内容大小。
服务端推送
主要的思想是:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。这个功能帮助客户端将Z放进缓存以备将来之需。也遵守同源策略,且客户端可以拒绝推送过来的资源。
介绍下短链接和长连接的区别:
短连接
连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。长连接
连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
推荐阅读:
- 既然有http 请求,为什么还要用rpc调用?
- HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
- HTTP/2协议–特性扫盲篇
- HTTP/2.0相比1.0有哪些重大改进
TCP、RPC与HTTP到底是何方神圣?!相关推荐
- 【一】数据挖掘(DM)到底是何方神圣?
[一]数据挖掘(DM)到底是何方神圣? 什么是数据挖掘? 数据挖掘有什么用处? 数据挖掘怎么做? 在此借助 5W1H 的思想,从整体上了解下数据挖掘,比如什么是数据挖掘.为什么要做数据挖掘.在哪些场景 ...
- 齐天大圣孙悟空的师傅到底是何方神圣?
下面是我引自百度的一段原文: 菩提即是佛教的醒悟真理.灵台方寸山即指人的思想和内心世界. 菩提祖师到底是谁?有三种猜测,其一,认为是如来本人:其二,认为是如来的师兄:其三,认是如来的十大弟子之一,即须 ...
- token 案例,只是测试,功能并不完善(只是看看token 到底是何方神圣)
token 简单理解就是 加密 解密的一个过程 JavaWebToken(加密解密工具) public class JavaWebToken { private static Logger log = ...
- 传说中的RNN到底是何方神圣?
假设你已经知道最基本的人工神经网络模型(也就是全连接的前馈神经网络),那么希望本文可以帮助你理解RNN,也就是传说中的循环神经网络.严格来说,本文是综合了(或翻译了)网上若干最容易理解.写得最棒的文章 ...
- 续写千倍币神话,PlusFo到底是何方神圣?
周星驰的<新喜剧之王>已经上映,但似乎反响平平.是他江郎才尽?黔驴技穷?答案是不!这部电影不仅仅是个喜剧,其中蕴含的道理值得你慢慢体会.影片中的小龙套获得影后的感言发人深省:也许我们会失败 ...
- 拿到华为200万年薪的8个人到底是何方神圣?为什么有人反而不屑?
点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:计算机视觉联盟 昨天,任正非签发的总裁办电子邮件刷 ...
- GraalVM到底是何方神圣?
JVM的弊端 JVM实现了跨平台,使得一次编译即可到处运行,但是詹姆斯·高斯林没有跟你说的是,应用运行之前要先启动JVM虚拟机,然后还要加载一大批的类.并做链接和初始化等步骤,而使得光启动一个JVM就 ...
- 好评率超94%,aigo智能播放器M2 Pro到底是何方神圣?
在手机.平板.电脑等设备的挤压之下,MP3 已经消失殆尽?其实不然,现在的MP3 之所以没有那么热门,最根本的原因是产品功能过于单一.在某些方面,MP3 要比手机更有优势,比如:音质.推力.续航这些都 ...
- 理一次发要4万的店,到底是何方神圣?
这两天被一则新闻刷屏, 杭州一小伙去一家店理发,理发期间服务员推荐其它附加服务项目免费体验, 小伙一听免费决定体验一番,完事结账一看账单,小伙惊呆了,账单上写着,所有项目加起来,总共消费4万块,不过店 ...
最新文章
- CVE-2017-11882 POC 全版本通杀
- linux密码修改实验
- 清华团队研发,首款国产电力电子仿真软件来啦~已捐赠哈工大、海工大、清华使用!...
- 将uglifyjs添加到鼠标右键菜单
- python怎么做数据分析_如何用python进行数据分析
- mysql数据库写分页函数_mysql数据库写分页函数
- 从哲学源头思考自动驾驶网络架构设计
- Hive 之 导入导出数据
- 滴滴新规则明日起试行:将影响一大波人
- Exalogic Elastic Cloud
- sql里的正则表达式
- c# 汉语拼音排序函数
- 【Linux】rpm包是什么
- jQuery获取浏览器语言
- 自定义view————涂鸦画板
- C++输出流cout的执行顺序问题
- 使用uvm_report_catcher屏蔽掉特定的uvm_error/uvm_warning
- CTF密码学之RSA攻击算法
- 机器学习之DBSCAN算法
- 28 Apr 10:25:21.537 # HandleServiceCommands: system error caught. error code=1072, message = Create
热门文章
- Docker容器学习梳理 - Volume数据卷使用
- 计算机开机主机没有电源指示,电脑无法开机,无显示画面怎么办?
- 计算机蓝屏的原因及解决方法,电脑启动就蓝屏怎么回事 电脑蓝屏的原因与解决办法...
- 硕士码农的offer档次排行(个人版)
- 【linux】函数grep正则表达式匹配邮箱地址
- 线程死锁的成因以及解决方案
- Android定时器死循环问题,Android定时器实现的几种方式整理及removeCallbacks失效问题解决...
- Linux常用命令(精简版)
- 【运维】服务器硬件基本知识
- 云开发在教育应用开发、运维全流程实践