RPC实战与核心原理之异步RPC

异步RPC:压榨单机吞吐量

如何提升单机吞吐量

提升吞吐量,其实关键就两个字:“异步”,提高CPU等资源的利用率

调用端如何异步

异步,最常用的方式就是返回 Future 对象的 Future 方式,或者入参为 Callback 对象的回调方式,而 Future 方式可以说是最简单的一种异步方式了。我们发起一次异步请求并且从请求上下文中拿到一个 Future,之后我们就可以调用 Future 的 get 方法获取结果。

对于 RPC 框架,无论是同步调用还是异步调用,调用端的内部实现都是异步的

调用端发送的每条消息都一个唯一的消息标识,实际上调用端向服务端发送请求消息之前会先创建一个 Future,并会存储这个消息标识与这个 Future 的映射,动态代理所获得的返回值最终就是从这个 Future 中获取的;当收到服务端响应的消息时,调用端会根据响应消息的唯一标识,通过之前存储的映射找到对应的 Future,将结果注入给那个 Future,再进行一系列的处理逻辑,最后动态代理从 Future 中获得到正确的返回值。

  • 所谓的同步调用,不过是 RPC 框架在调用端的处理逻辑中主动执行了这个 Future 的 get 方法,让动态代理等待返回值;而异步调用则是 RPC 框架没有主动执行这个 Future 的 get 方法,用户可以从请求上下文中得到这个 Future,自己决定什么时候执行这个 Future 的 get 方法。
  • Future示意图

如何做到 RPC 调用全异步

服务端业务处理逻辑异步

  • 调大业务线程池的线程数,但是对于 RPC 框架来说,往往都会有多个服务共用一个线程池的情况,即使调大业务线程池,比较耗时的服务很可能还会影响到其它的服务。所以最佳的解决办法是能够让业务线程池尽快地释放,那么我们就需要 RPC 框架能够支持服务端业务逻辑异步处理,这对提高服务的吞吐量有很重要的意义。
posted @ 2022-02-13 17:53  牛犁heart  阅读(1353)  评论(0编辑  收藏  举报