远程调用的基本流程
远程设计底层是用的 RPC 进行的远程通信,往底层讲是 http 协议 + jdk 序列化方案组合成的一套 RPC 调用方案
通过代理的方式,将方法调用序列化为二进制数组,然后构造为请求,然后发送到服务器后,反序列化为对应的方法和参数,然后调用即可
那么,在不考虑难以预知的卡顿场景,比如网络慢(环境因素),数据量大(比如客户的配置很大之类的,当然这样的场景本身就需要考虑是不是传输的数据不对)的场景下,有没有一些通用方案可以加快远程设计的性能呢? 比如切换协议,但是切换协议本身的成本是比较大的,要考虑客户部署的适配情况,在没有关键阻塞点的情况下,一般不会考虑切换协议的方案。
减少请求数量
如果基于 Http ,经过测试,场景如下
- 下载一个大文件 130mb, 耗时 40s,
- 下载 500 个小文件,每个请求大概 500ms, 总共耗时 250s
- 客户本身的网络一般,500 个请求,放大了建立连接的耗时,从而导致该问题。
基于此,当然第一方案是直接减少请求数量。将 500 个请求合并成一个,等价于大文件的方案
批量请求
两个比较类似的,1 个是 dubbo, 1 个是 kafka