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

简介: 微服务(二)之有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
目录
相关文章
|
5月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
5月前
|
JSON 自然语言处理 API
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
本文深入解析了分布式系统中服务通信的核心机制,重点介绍了 RPC 与 gRPC 的原理、优势及使用场景,并详解 gRPC 所依赖的序列化协议 Protocol Buffers(Protobuf)。内容涵盖 RPC 概念、gRPC 特性、Protobuf 语法及服务定义,适合微服务架构设计与维护人员阅读,助你构建高性能、低耦合的服务通信体系。
737 73
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
|
3月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
5月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
604 2
|
5月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
229 0
|
5月前
|
网络协议 安全 网络安全
什么是HTTP协议
HTTP协议是超文本传输协议,基于TCP,规定了客户端与服务器端通信规则,但数据以明文传输,安全性低。HTTPS则通过SSL加密保障数据安全。两者默认端口不同,HTTP为80,HTTPS为443。HTTPS安全性更高,但消耗更多服务器资源。
223 0
|
5月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
532 0
|
6月前
|
存储 网络协议 安全
HTTP 协议及会话跟踪机制详解
本文详解了 HTTP 协议的核心知识,包括其定义(超文本传输协议,基于 TCP,规定客户端与服务器通信规则)及与 HTTPS 的区别(安全性、端口、资源消耗)。 介绍了 GET 与 POST 请求的差异(参数限制、安全性、应用场景),以及 Restful 风格(通过 URL 定位资源,请求方式决定操作)。列举了常见 HTTP 状态码(如 200 成功、404 资源未找到),对比了转发与重定向的区别(服务器端一次请求 vs 客户端两次请求)。 还阐述了会话跟踪机制:Cookie 基于客户端存储,通过Set-Cookie和Cookie头实现,安全性较低;Session 基于服务端存储,依赖 C
639 1
|
5月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
744 0