微服务(二)之有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
目录
相关文章
|
4天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
5天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
29 3
|
4天前
|
消息中间件 测试技术
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
轻量消息队列(原MNS)以其简单队列模型、轻量化协议及按量后付费模式,成为阿里云产品间消息传输首选。本文通过创建主题、订阅、配置告警集成等步骤,展示了该产品在实际应用中的部分功能,确保消息的可靠传输。
17 2
|
16天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
44 13
|
9天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
13天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
13天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
13天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
15天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
17天前
|
网络协议 前端开发 API
HTTP 和 TCP 协议的应用场景有哪些不同
【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。