当前位置: 首页 > 科技观察

搜狗开源其轻量级高性能C++服务器引擎并引入任务流概念

时间:2023-03-22 13:25:54 科技观察

搜狗开源其C++服务器引擎SogouC++Workflow。实现了计算任务和通信任务的统一协调调度。据介绍,该引擎目前支持搜狗几乎所有后端C++在线服务,包括所有搜索服务、云输入法和在线广告等,每天处理数百亿次请求。SogouC++Workflow在设计之初就秉持着高性能和轻量级两大核心理念。长期以来,业界对服务器性能的优化主要集中在如何跑满CPU,如何单独让网络请求快速响应等等。这次推出的SogouWorkflow更侧重于如何让各种网络资源通过特定的调度器进行管理,从而尽可能多地进行调度。另一方面,集成多种通信和计算资源的方案进一步提升了Workflow引擎的性能。以往,开发者在面临选择高吞吐网络框架时,面对不同比例的计算资源,不得不划分不同大小的线程池。但是每种计算的具体资源需求比例是动态变化的,重要性也不一样,后端响应时间也是动态变化的。SogouC++Workflow使得C++服务器引擎能够像Go语言一样实现网络资源的异步调度,进一步打通计算、磁盘等资源。这个项目最大的亮点可能是任务流概念的创新引入。SogouC++Workflow对资源进行了高度封装,用户在做aio机制时不再需要访问连接池、线程池,包括文件fd和各种异步通知。这意味着在开发阶段,开发者只需要了解业务关系,无需关心内部细节,帮助开发者实现自己复杂的业务逻辑。开发者可以使用SogouC++Workflow封装的各种任务动态或静态构建自己的业务逻辑,如下图,不同类型的任务可以串行并行在一起:根据资料,除了各种创新设计在此外,SogouC++Workflow还具有友好的用户体验。SogouC++Workflow原生支持http、redis、mysql、kafka等协议,可以直接作为这些协议的客户端。并在其基础上开发了更加易用的搜狗RPC,实现了与brpc、thrift的互通,可以通过http+json或者IDL实现跨语言。开发团队透露,搜狗RPC项目也将于近期开源。HttpServer性能实测:SogouC++WorkflowVSnginx、brpc搜狗团队还提供了SogouC++Workflow与nginx、brpc两大主流系统的http服务器性能对比。测试环境:选择了最基本的测试场景:wrk或wrk2作为客户端跨机器,单服务器,长连接,CPU:40核E5-2630v4@2.20GHz,内存:192GB,网卡:25000Mb/s。nginx配置了auto进程数(与核心数一致),brpc配置了40个nthreads,workflow配置了16个poller线程和20个handler线程。测试一:不同并发数对QPS的影响(越高越好)结论:随着压测并发数的增加,服务器的QPS会相应增加。可以看到Workflow的QPS无论是低并发还是高并发还是高于nginx和brpc的,尤其是在并发数超过128的情况下。Workfow对于小包基本可以保证50w的QPS,说明内部对网络资源的高并发调度做了很多优化。测试二:不同数据大小对QPS的影响(越高越好)结论:这里返回包的大小就是http请求的bodysize。随着返回数据包的增加,QPS会降低。希望QPS还是尽量保持平稳,不要下降太快。相同并发下Workflow的性能仍然优于其他两个系统,说明网络收发和其他调用的调度协调更好。测试三:固定QPS下延迟分布CDF图(越左越好,越直越好)结论:本次测试是wrk2针对固定QPS的压测进行的,有1%的长尾请求outiler,长尾请求不计入结果,因为我们关心的是模拟普通请求在真实情况下能否及时处理。由于nginx在其他测试中性能略差,所以没有CDF对比。可以看出,在不同比例的分布中,Workflow的延迟较低,最慢的(0.99~1.00之间)的延迟增长相对缓慢,说明Workflow对于长尾处理更及时。