侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

RPC框架

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 162 阅读 / 1,026 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
全部是阻塞式的调用.

传对象的话,对象的更改不会同步回来.
RPC(Remote Procedure Call Protocol),远程过程调用,是一种进程间通信方式。

特性:
1、SOCKET TCP/UDP通讯、协议解析、编解码数据 2、动态代理、反射调用
说白了,就是SOCKET编程传输OBJECT并动态代理执行。

职责:
让调用方感觉就像调用本地函数一样调用远端函数
让服务提供方感觉就像实现一个本地函数一样来实现服务
服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦

采用的不是HTTP协议,消息体可以为xml,json,binary三种


(1)入参到字节流的转化,即序列化应用层协议细节
(2)socket发送,即网络传输协议细节
(3)socket接受
(4)字节流到出参的转化,即反序列化应用层协议细节

实现的功能
client端又包含:序列化、反序列化、连接池管理、负载均衡、故障转移、队列管理,超时管理、异步管理等等等等职责。
server端包含:服务端组件、服务端收发包队列、io线程、工作线程、序列化反序列化、上下文管理器、超时管理、异步回调等等等等职责。


RPC 异常处理
无论 RPC 怎样努力把远程调用伪装的像本地调用,但它们依然有很大的不同点,而且有一些异常情况是在本地调用时绝对不会碰到的。在说异常处理之前,我们先比较下本地调用和 RPC 调用的一些差异:
1. 本地调用一定会执行,而远程调用则不一定,调用消息可能因为网络原因并未发送到服务方。
2. 本地调用只会抛出接口声明的异常,而远程调用还会跑出 RPC 框架运行时的其他异常。
3. 本地调用和远程调用的性能可能差距很大,这取决于 RPC 固有消耗所占的比重。 正是这些区别决定了使用 RPC 时需要更多考量。当调用远程接口抛出异常时,异常可能是一个业务异常,也可能是 RPC 框架抛出的运行时异常(如:网络中断等)。业务异常表明服务方已经执行了调用,可能因为某些原因导致未能正常执行,而 RPC 运行时异常则有可能服务方根本没有执行,对调用方而言的异常处理策略自然需要区分。
由于 RPC 固有的消耗相对本地调用高出几个数量级,本地调用的固有消耗是纳秒级,而 RPC 的固有消耗是在毫秒级。那么对于过于轻量的计算任务就并不合适导出远程接口由独立的进程提供服务,只有花在计算任务上时间远远高于 RPC 的固有消耗才值得导出为远程接口提供服务。


1.
效率提升
2.
每个请求应该尽快被执行,因此我们不能每请求来再创建线程去执行,需要提供线程池服务。
3.
资源隔离
4.
当我们导出多个远程接口时,如何避免单一接口调用占据所有线程资源,而引发其他接口执行阻塞。
5.
超时控制
当某个接口执行缓慢,而 client 端已经超时放弃等待后,server 端的线程继续执行此时显得毫无意义。
0

评论区