微服务(二)之有HTTP协议,为何还需要在RPC中使用自定义的协议?

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 微服务(二)之有HTTP协议,为何还需要在RPC中使用自定义的协议?

📢 导读:
本期是关于自定义通讯协议的讲解,和HTTP协议做对比,由浅入深,带读者遨游通讯协议的整个发展过程,以及帮助读者更深入的去了解RPC中的通讯协议。
如果期待更多干货和知识分享和后续与微服务相关的文章,那就动动小指头点波关注吧!
⛳️ 分布式微服务专栏:分布式和微服务理论+实战从入门到完全掌握

⛳️ 1.首先说一下HTTP和RPC的区别

  • HTTP只是一个通信协议,工作在OSI的第七层,不是一个完整的远程调用方案。
  • 其实rpc不是一种协议,rpc是一种调用过程的方案/范式/实现。RPC是一个完整的远程调用方案,它包括了:接口规范+序列化反序列化规范+通信协议等。

⛳️ 2.HTTP协议和RPC调用过程的发展史,这个很重要

  • RPC在1984年就被人用来做分布式系统的通信,Java在1.1版本提供了Java版本的RPC框架(RMI),而HTTP协议在1990年才开始作为主流协议出现,而且HTTP发明的场景是用于web架构,而不是分布式系统间通信,这导致了在很长一段时间内,HTTP都是浏览器程序和后端web系统通信用的东西,上面的文档格式都是HTML(非常啰嗦),没有人会把HTTP作为分布式系统通信的协议。在很长一段时间内,RPC才是正统。
  • 随着前端技术的发展,AJAX技术和JSON文档在前端界逐渐成为主流,HTTP调用才摆脱HTML,开始使用JSON这一相对简洁的文档格式,为后面用于系统间调用定下基础。最后随着RESTFUL思潮的兴起,越来越多系统考虑用HTTP来提供服务,但这时候,RPC已经是各种大型分布式调用的标配了。
  • 现在大部分的系统都是给浏览器使用的,因此HTTP协议必不可少,而这大部分系统中的绝大部分,对于后端系统间调用的性能都是要求不高的,毕竟走的都是内网,它们关心的是前端和后端的性能,因此后端系统间调用如果能够采用和前端一样的技术栈,那无疑是维护成本最低的,而这时HTTP的技术生态也刚好满足这个条件,所以就星星之火可以燎原了,当然也不可一概而论,具体用什么协议,我们具体情况还需要具体分析。

⛳️ 3.再说一下HTTP的REST风格调用

HTTP的REST风格的调用:
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
在微服务的设计中,一个服务A如果访问另一个服务B,可以采用HTTP REST传输数据,并在两个服务之间进行序列化和反序列化操作,服务B把执行结果返回过来。我们的前后端分离开发也是一种REST风格的调用,如下图:
在这里插入图片描述在这里插入图片描述


⛳️ 4.再说一下RPC

为什么有RPC呢?
方法的调用无法在同一个计算机的进程内,因为目前分布式微服务架构的流行,目前由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用,此时就需要不同的系统间的通讯,甚至不同的组织间的通讯,这个时候RPC就应运而生了。

RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,其调用协议通常包含传输协议序列化协议

  • 传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。
  • 序列化协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf hessian等

出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想,如下图:
在这里插入图片描述


⛳️ 5.有http,为何还需要使用RPC在应用层自己定义协议

5.1简化传输的字节

有http,为何还需要在应用层自己定义协议,因为通用定义的http1.1协议的tcp报文包含太多废信息,如是一个get的请求头和响应头信息:
在这里插入图片描述

可以看到请求头里面包含的信息实在是太多了,如果我们只需要传输Hello,Yushiwen 这么几个字符,那么可以看到http请求头里面携带的信息就占用了整个请求信息的百分之80以上,如果我们用PRC,就可以自定义传输协议,简化需要传输的字节。

最后说一下HTTP2也有了很大改进,具体是自定义协议还是用HTTP协议,我们需要在具体的场景下具体分析。

5.2封装了更多的服务特性

RPC框架封装了很多服务特性,比如封装了“服务发现”,“负载均衡”,“熔断降级”等面向服务的高级特性。


⛳️ 6.什么情况下自定义传输协议,什么情况下使用HTTP协议

具体得看业务场景,这里给出大致的思路:

  • Http协议适用于短连接、高延迟、大包通讯、通讯频率低,比如Web开发。
  • 自定义的协议可以使用于长连接、低延迟、小包通、讯频率高,比如我们玩的moba游戏王者荣耀。

微服务相关博文持续更新中......
2022.3.25
author:YuShiwen
于CSDN
目录
相关文章
|
14天前
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
1天前
|
存储 网络安全 对象存储
缺乏中间证书导致通过HTTPS协议访问OSS异常
缺乏中间证书导致通过HTTPS协议访问OSS异常
11 4
|
2天前
|
Docker 容器
docker nginx-proxy 添加自定义https网站
docker nginx-proxy 添加自定义https网站
11 4
|
3天前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
15 1
|
12天前
|
安全 网络协议 网络安全
在实现HTTPS时,有哪些常见的安全协议
在实现HTTPS时,有哪些常见的安全协议
|
12天前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
16 0
深入解析 http 协议
|
20天前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
73 3
|
21天前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
32 2
|
23天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
52 3
|
27天前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。