几品飞车|微服务全链路异步化实践
1. 背景
随着公司业务的发展 , 核心服务流量越来越大 , 使用到的资源也越来越多 。 在微服务架构体系中 , 大部分的业务是基于Java 语言实现的 , 受限于Java 的线程实现 , 一个Java 线程映射到一个kernel 线程 , 造成了高并发场景下线程资源的极大浪费 , 线程成为提高系统并发和吞吐量的瓶颈 。
在微服务架构下 , 使用同步编程模式时不仅造成了资源的极大浪费 , 并且在流量发生激增波动的时候 , 受制于系统资源而无法快速的扩容 。 本文将探索服务异步化在并发、吞吐量方面对系统带来的提升 。
2. 如何快速提高服务吞吐量首先 , 以微服务架构中的RPC 服务调用举例 , 测试和探索在微服务架构中 , 异步架构如何提高服务的吞吐量和并发 。 ESA Stack 是OPPO 自研的基础框架技术栈 , ESA RPC 是自研的RPC 框架 。 本节测试服务我们使用ESA RPC 搭建 。
关于ESA RPC的详情 , 可以参考我们之前发布的文章《 Dubbo协议解析及ESA RPC实践 》 。
2.1 服务架构【几品飞车|微服务全链路异步化实践】下图所示为测试环境架构 。 其中Service A 既是服务端也是客户端 , 它模拟了生产环境中大部分服务的角色 。 我们对Service A 分别采用同步模型和纯异步模型进行压测 , 其中纯异步模型包含了客户端、服务端逻辑的异步处理 。 Service B 模拟一个耗时为N ms 的下游服务 , 为Service A 的调用提供固定的延时响应 。
测试服务器的配置为8 核16G , 千兆网卡 。
2.2 同步异步模型对比测试场景1:
并发压测客户端200~8000 , 服务耗时50ms , 分别对同步和异步架构进行压测 , 对比TPS、服务耗时、CPU 上下文切换;同步模式下 , 线程数和并发客户端相同;异步模式下 , 使用框架默认的200 线程 。 测试数据如下 。
测试场景2:
并发压测客户端8000 , 服务耗时50~500ms , 分别对同步和异步模式进行压测 , 对比TPS、服务耗时、CPU 上下文切换;同步模式下服务端8000 线程;异步模式下 , 使用框架默认的200 线程 。
2.3 服务扩展性对比并发指服务瞬时同时处理的任务数(包含处于IO 等待状态的任务) 。 服务端设置业务处理线程200 , 那么同步模式下能提供的并发为200;纯异步模式下服务并发不受线程限制 , IO密集型服务尤其收益 。 在系统流量突增的情景下 , 异步模式具有更强的可扩展性(Scalability) 。
2.4 结论根据上面的测试数据可以做出以下对比:
推荐阅读
- 智通财经|| 远洋服务向港交所递表 在管面积约4230万平方米,新股消息
- 【】淄博这家税务局主动服务 助一湖北籍纳税人退税近40万
- 央视新闻客户端|田间地头到跨境物流,China服务安排上了
- 第一财经|住建部:房地产经纪机构应对住房租赁服务项目实行明码标价
- 央视网|直通服贸会 | 加强“一带一路”服贸合作 促进服务转型升级
- 央视网|带你逛服贸 | 文化服务专题展 规模大、颜值高、创意多
- 9月7日|远洋集团拟分拆远洋服务赴港上市 持股份额将不低于五成
- 物业|远洋集团拟分拆远洋服务赴港上市 持股份额将不低于五成
- 服务|快看 | 58同城特别股东大会通过私有化协议,获75%得票比例
- 央视新闻|第三届“一带一路”服务贸易合作论坛举行
