SOFA-Bolt通信模型介绍

SOFA-bolt 是蚂蚁金服开源的一个分布式 RPC 框架,用于快速构建金融级云原生架构的中间件,也是在金融场景里锤炼出来的最佳实践。SOFA-bolt 有四种网络通讯模型:分别是 oneway、sync、future、callback,本文主要介绍这四通信模型。

通信模型

  • oneway:不关注结果,即客户端发起调用后不关注服务端返回的结果,适用于发起调用的一方不需要拿到请求的处理结果,或者说请求或处理结果可以丢失的场景;
  • sync:同步调用,调用线程会被阻塞,直到拿到响应结果或者超时,它是最常用的方式,适用于发起调用方需要同步等待响应的场景;
  • future:异步调用,调用线程不会被阻塞,通过 future 获取调用结果时才会被阻塞,适用于需要并发调用的场景,比如某个客户端调用多个服务端并等待所有结果返回后执行特定逻辑的场景;
  • callback:异步调用,调用线程不会被阻塞,调用结果在 callback 线程中被处理,适用于高并发要求的场景;

oneway 调用的场景非常明确,当调用方不需要拿到调用结果的时候就可以使用这种模式,但是当需要处理调用结果的时候,选择使用同步的 sync 还是使用异步的 future 和 callback?都是异步调用,又如何在 future、callback 两种模式中选择?

显然同步能做的事情异步也能做,但是异步调用会涉及到线程上下文的切换、异步线程池的设置等等,较为复杂。如果你的场景比较简单,比如整个流程就一个调用并处理结果,那么建议使用同步的方式处理;如果整个过程需要分几个步骤执行,可以拆分不同的步骤异步执行,给耗时的操作分配更多的资源来提升系统整体的吞吐。

在 future 和 callback 的选择中,callback 是更彻底的异步调用,future 适用于需要协调多个异步调用的场景。比如需要调用多个服务,并且根据多个服务端响应结果执行逻辑时,可以采用 future 的模式给多个服务发送请求,在统一对所有的 future 进行处理完成协同操作。

参考: