几品飞车|微服务全链路异步化实践( 三 )


几品飞车|微服务全链路异步化实践多路复用IO
几品飞车|微服务全链路异步化实践Asynchnorous IO
对四中IO 模型 , 有以下的对比:

  • 同步阻塞式IO 模型 , 编程简单但线程阻塞 , 资源利用率低;
  • 同步非阻塞式IO 模型 , 需要轮训CPU , 浪费资源;
  • 异步非阻塞AIO 模型 , 不阻塞线程 , 使用回调方式处理数据 , 但是编程难度高;
  • 多路复用IO 模型 , 能够实现异步非阻塞IO , 且编程简单 , 方便实现同步和异步调用 , 因此成为RPC 框架的首选 。
4. 全链路异步编程指南4.1 全链路组成及现状微服务架构下的全链路包含了网关层、WEB 服务、RPC 服务、数据层等 。 目前公司的网关层已经实现了纯异步架构 , Web 框架和RPC 框架支持纯异步编程 , 数据存储层目前异步方案还不成熟 。
几品飞车|微服务全链路异步化实践4.2 网关异步化
网关层由于其特殊性 , 不需要访问业务数据库只做协议转换和流量转发 , 目前已经使用了纯异步的架构;其IO 密集型的特点 , 特别适合纯异步的架构 , 可以极大的节省资源 。
4.3 Web 服务异步化
Web 服务作为微服务体系内的重要组成 , 服务节点众多 , 传统的Web 服务框架SpringMVC 不支持纯异步化编程 , OPPO 自研Web 框架Restlight 支持纯异步编程 , 且性能远超SpringMVC 。 下面是性能对比及Restlight 异步实践 。
几品飞车|微服务全链路异步化实践Restlight 框架异步编程实践:通过Controller 方法返回值区分同步和异步调用 , 且支持三种异步调用方式 , CompletableFuture、ListenableFuture(Guava)、Future(Netty) 。
几品飞车|微服务全链路异步化实践4.4 RPC 调用异步化RPC 调用等待下游response 返回时 , 线程不应处于block 状态;作为微服务架构中数据流量最大的一部分 , RPC 调用异步化的收益巨大;目前ESA RPC 已经具备了纯异步化的能力 , 提供RPC 调用的服务一般既是客户端也是服务端 , 因此包含了客户端异步调用能力和服务端异步处理能力;为了兼容存量接口 , ESA RPC 既支持CompletableFuture 也支持普通返回值的接口 。
客户端异步化实践:底层使用异步非阻塞IO 收发网路数据包 , 使用CompletableFUture传递IO 事件以实现响应式编程 , 客户端不被RPC 调用阻塞 , 可继续调用其他服务 。
接口返回CompletableFuture 来实现异步调用:
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践普通接口使用ESARpcContext::asyncCall 实现异步调用:
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践服务端异步化实践:通过服务端异步功能返回CompletableFuture 给框架以释放Biz 线程 , 自定义线程池或者IO 线程池收到下游response 后 , 完成返回给框架的Future 。


推荐阅读