微服务(二)之有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
目录
相关文章
|
8月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
8月前
|
JSON 自然语言处理 API
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
本文深入解析了分布式系统中服务通信的核心机制,重点介绍了 RPC 与 gRPC 的原理、优势及使用场景,并详解 gRPC 所依赖的序列化协议 Protocol Buffers(Protobuf)。内容涵盖 RPC 概念、gRPC 特性、Protobuf 语法及服务定义,适合微服务架构设计与维护人员阅读,助你构建高性能、低耦合的服务通信体系。
967 73
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
|
7月前
|
JSON 移动开发 网络协议
gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?
自研RPC协议针对内网高并发场景,通过精简帧头、长度前缀解决TCP拆包粘包,支持灵活扩展与高效序列化,显著提升性能与资源利用率,适用于对延迟敏感的分布式系统。
437 4
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
951 3
|
12月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
634 30
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
1124 121
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
521 16
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
594 0
|
负载均衡 Java 开发者
Spring Cloud 远程调用:为何选择 HTTP 而非 RPC?
【10月更文挑战第1天】在微服务架构中,远程服务调用是一个核心环节。面对HTTP和RPC(Remote Procedure Call,远程过程调用)这两种通信协议,Spring Cloud 选择了HTTP作为其主要通信手段。本文将深入探讨Spring Cloud选择HTTP而非RPC的原因,以及这一选择在实际工作中的优势。
566 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
811 6
下一篇
开通oss服务