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


  • 同步模式 , 线程数与并发成正比 , 并发越高对线程的消耗越多
  • 异步模式 , 提高并发不需要线程增加
  • 同步模式 , 系统Context Switch 次数随并发提高而快速增加
  • 异步模式 , 系统Context Switch 次数明显小于同步模式
  • 同步模式 , 并发超过某个临界点后 , 服务耗时快速上升 , 系统吞吐量急剧下降
  • 异步模式 , 吞吐量随着并发增加 , 服务耗时上升速度明显低于同步模式
从而得出以下结论:
  • 可以通过异步化微服务架构 , 提高相同资源配置下的服务吞吐量
  • 随着下游平均耗时的增加 , 异步化带来的吞吐和耗时的提升作用减小
  • 线程资源有限(内核、内存) , 不能无限增加来提高并发能力 , 异步化能极大提高系统瞬时并发能力(Scalability)
结论分析:
  • 高并发下同步模型大量线程在内核态度/用户态、不同CPU 核之间进行切换 , Context Switch 增加 , 系统性能下降
  • 下游平均耗时增加时 , 系统CPU 繁忙程度降低 , Context Switch 对性能系统影响下降
3. 异步模型探索3.1 阻塞与非阻塞在操作系统中 , 线程是CPU 调度的基本单位;阻塞调用是指发起调用后 , 线程进入阻塞状态(让出CPU) , 直到获得结果或异常返回;非阻塞调用是指不等待结果 , 调用不阻塞线程直接返回 。
几品飞车|微服务全链路异步化实践3.2 同步与异步同步和异步关注的是消息通信机制;同步就是在发起调用后就得到返回结果(未必是完整结果) , 也就是由调用者主动等待结果;异步则是调用在发出之后直接返回 , 通过信号通知、回调函数处理来通知结果 。
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践
几品飞车|微服务全链路异步化实践3.3 四种IO 模型非IO 系统调用层面 ,阻塞/非阻塞和同步/异步基本是同义词;在IO 系统调用层面 , 同步/异步和阻塞/非阻塞有以下组合:
  • 同步阻塞调用 , 线程同步等待阻塞调用结果
  • 同步非阻塞调用 , 线程通过轮训获取非阻塞调用结果
  • 异步阻塞调用 , IO 事件阻塞 , IO 操作不阻塞
  • 异步非阻塞调用 , 调用立即返回 , 信号/回调处理结果

几品飞车|微服务全链路异步化实践我们通过一个简单的客户端来介绍四种IO 模型的代码写法:
几品飞车|微服务全链路异步化实践同步阻塞IO
几品飞车|微服务全链路异步化实践非同步阻塞IO


推荐阅读