远程调用的基本流程

远程设计底层是用的 RPC 进行的远程通信,往底层讲是 http 协议 + jdk 序列化方案组合成的一套 RPC 调用方案

通过代理的方式,将方法调用序列化为二进制数组,然后构造为请求,然后发送到服务器后,反序列化为对应的方法和参数,然后调用即可

那么,在不考虑难以预知的卡顿场景,比如网络慢(环境因素),数据量大(比如客户的配置很大之类的,当然这样的场景本身就需要考虑是不是传输的数据不对)的场景下,有没有一些通用方案可以加快远程设计的性能呢? 比如切换协议,但是切换协议本身的成本是比较大的,要考虑客户部署的适配情况,在没有关键阻塞点的情况下,一般不会考虑切换协议的方案。

减少请求数量

如果基于 Http ,经过测试,场景如下

  • 下载一个大文件 130mb, 耗时 40s,
  • 下载 500 个小文件,每个请求大概 500ms, 总共耗时 250s
  • 客户本身的网络一般,500 个请求,放大了建立连接的耗时,从而导致该问题。

基于此,当然第一方案是直接减少请求数量。将 500 个请求合并成一个,等价于大文件的方案

批量请求

两个比较类似的,1 个是 dubbo, 1 个是 kafka

https://garden.3dot141.top/4-Outcomes/%E8%BF%9C%E7%A8%8B%E9%80%9A%E4%BF%A1%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E6%8E%A2%E7%B4%A2#%E6%80%A7%E8%83%BD