下游服务处理时延与长连接

场景:服务a访问服务b,a对外提供http,a和b之间通过thrift协议(沟通方式是tcp)交互

时延与长连接,随着服务b时延上升,对服务a造成什么影响?a使用sdk访问b,sdk中有保持长连接的pool,假设pool大小=4096:

  • b处理时间1ms,一个conn1s能处理1000个req,排除网络延迟的影响,qps上限=4096*1000=400w+
  • b处理时间100ms,一个conn1s能处理10个req,qps上限=4096*10=4w+

假设b处理能力足够,那么什么情况下b的处理时延会影响到a,就是从a发起到b的请求qps超过上面计算结果的情况下,会导致a和b之间建立大量的长连接(前提是b允许突破4096,给新的req新增连接,且a使用的sdk内部也保护策略的情况下),a在新建连接上花费大量的cpu时间片。

当a和b之间qps低于阈值时,b的时延几乎不对a的cpu造成异常的影响。

那么a的cpu主要用在什么上面,外部的http调用,会导致用net/http实现的a在高并发场景下,新增保持大量的长连接,新增的goroutine得不到cpu,就会在某个核下面排队,导致a对外的时延上升,情况随着并发量的增大会持续恶化,知道时延满足不了业务需求。

下游服务处理时延与长连接
Share this