找回密码
 立即注册
查看: 216|回复: 0

RPC(一)

[复制链接]
发表于 2022-5-19 16:59 | 显示全部楼层 |阅读模式
近期看了极客时间《RPC 实战与核心原理》,对于rpc有了一定的认识,记录一下。
RPC 的全称是 Remote Procedure Call,即远程过程调用。在微服务开发中,一个服务暴露api接口给另一个服务调用。即为一次RPC调用。RPC架构不局限于调用,还有更吸引人的点,它真正强大的地方是它的治理功能,比如连接管理、健康检测、负载均衡、优雅启停机、异常重试、业务分组以及熔断限流等等。
在服务间调用方面,RPC 的作用就是体现在:
    屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。

很重要的一点是RPC不像HTTP,它不是一种规范,而是一种思想,没有行业标准。
分布式系统中的网络通信一般都会采用四层的 TCP 协议或七层的 HTTP 协议。
springcloud: 使用的是http协议,dubbo: 使用的是TCP协议
简单复习一下计算机网络的基础知识:
我们通常谈论计算机网络的五层协议的架构,即应用层、传输层、网络层、数据链路层和物理层。
应用层的任务是通过应用进程之间的交互来完成特定的网络应用。HTTP属于应用层协议,它将基于TCP/IP通信协议传输数据(HTML文件、图片文件、查询结果等)。HTTP 协议适用于客户端服务器架构。作为 HTTP 客户端,浏览器通过 URL 将所有请求发送到 HTTP 服务器(Web 服务器)。Web 服务器根据接收到的请求,将响应信息发送给客户端。HTTP 协议是基于 TCP 协议的。
传输层的主要任务是为两个主机进程之间的通信提供通用的数据传输服务。TCP是一种传输层协议,主要解决如何在网络中传输数据。与UDP相比,TCP  提供的是面向连接的可靠的数据传输服务。
有一个说法:与自定义的 TCP 数据包协议相比,HTTP 协议增加的开销在于连接的建立和断开
其实是不对的:HTTP协议支持连接池的复用,也就是说可以建立一定数量的连接,而不需要频繁的创建和销毁。其次,HTTP 还可以使用二进制编码协议 protobuf 对内容进行编码。因此,两者最大的区别在于传输协议。
HTTP 的报文信息成熟,也方便跨语言、跨平台。但是报文有效利用率不高。自定义TPC协议的报文,大大精简了传输内容。性能是强了不少,但以我从事的物联网为例,服务的接口不仅仅流通于一种语言,对于网关、硬件来说,往往是用C来开发,HTTP的优势就体现出来了。同一k8s集群就可访问。
为什么不暴露对外的restful 接口,内部仍然采用TCP协议的RPC接口?
通常对外的接口用ssl证书加密,还需要走网关解析验证用户信息,内部接口就少去这些麻烦,直接调用,效率性能都用提升。

框架的性能可能对一个真实的请求(Request)影响并不是很大,或者说并不起决定性作用,也许真正影响性能的是你的业务代码,比如数据库访问以及IO,当然了,框架的性能在一些对性能要求敏感的应用来说也是要考虑的。对于没有自研RPC框架的公司来说,Spring Cloud是一个完整的RPC框架,社区也活跃,是一个合适的选择。孰优孰劣?Dubbo VS Spring Cloud性能测试大对决!
springcloud也是支持rpc的,比如grpc。https://github.com/yidongnan/grpc-spring-boot-starter
protobuf(Google Protocol Buffers)是一种高效的数据序列化方法,缺点是可读性差。
protobuf优缺点及编码原理
总结:RPC 框架能够帮助我们解决系统拆分后的通信问题,并且能让我们像调用本地一样去调用远程方法。利用 RPC 我们不仅可以很方便地将应用架构从“单体”演进成“微服务化”,而且还能解决实际开发过程中的效率低下、系统耦合等问题,这样可以使得我们的系统架构整体清晰、健壮,应用可运维度增强。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-27 05:34 , Processed in 0.062569 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表