您的位置首页  轻工新闻  新闻

实测搜狗开源搜索引擎服务框架Workflow:QPS提升12倍 具备四大特色

搜狐科技讯

一个好的项目就好比美食,看上去赏心悦目,吃上去也口齿留香。当“新鲜”的Workflow被盛到面前,你很难背叛自己的胃和审美。如果你从事C++编程,想必会惊呼:“这是我的菜!”。

相见恨晚,也恰逢其时,搜狗正好开源了搜索引擎的服务框架——Sogou C++ Workflow,该框架是搜狗公司的后端C++编程标准,是一套企业级的程序引擎,刚现世便备受好评,展现惊人的风采。

搜狐集团商业部的一个业务恰逢其会地使用Workflow进行了改造,在Workflow的作者们的帮助下,结果远远超出了预期。

项目实测:Workflow助推QPS提升12倍

此次使用Workflow进行改造的服务是一个代理平台,服务代理的广告投放产品体系。主要业务是client发出请求,服务请求不同的DSP-server(一对多),最后将DSP-server返回的数据透传给client。

原有服务是自搭建的服务器模型,因QPS(每秒查询率)受限于线程数量和网络耗时,计划对服务进行改造,提升性能。服务改造需要满足三个要求,一是提升服务器性能,提升QPS;二是支持一次rpc进行多个http请求下游DSP;三是较低的改造成本,避免复杂的配置。

在对Workflow进行框架调研后,发现其非常贴合此次改造需求。它不仅可以异步为服务器性能QPS提供保证,同时Parallel + series 的强大功能便于实现并行和串行的请求,一对多的功能得以实现,而简洁的接口则可以降低使用成本。

在改造过程中,client、sever、DSP-server各占一台机器进行压力测试,设置DSP-server网络延迟为100ms。

对于原server,在设置线程池线程数为2048时,server QPS随线程数增长至2,850左右,保持99.9%成功率,cpu占用700%,之后随client线程数增加,QPS虽然有所上升,但成功率大幅度下降,不再具有实际意义。

当使用Workflow进行改造后,server在client线程数达3700时,QPS达34,740左右,成功率在99.7%,网卡占用97%;client线程数增加至4000时,QPS达36,360,CPU占用至1820%左右,未达极限3600%,成功率下降至98.9%,其原因是网卡已满,限制了服务器性能。

也就是说,在下游网络耗时100ms,保证成功率在99.5%以上,相同机器下进行性能测试后的结果是,QPS有显著提升,从2,850提升至36,360,提升12倍有余,远超预期。同时,根据CPU和QPS推测,预计该机器QPS能达65,000左右,解决了线程数和延迟对QPS的影响。

出现问题别担心 工程师将提供指导

尽管使用Workflow如鱼得水,但此次测试却不是一帆风顺,还是遇到了一些问题。不过,Workflow的工程师们热情且迅速有效的伸出援手,友好的态度为Workflow提供了温度。

在此次改造的性能测试过程中,linux报错系统资源不可用。在给Workflow工程师们发出请求帮助后立刻得到了回应,他们表现出对问题的探索精神和丰富的经验,迅速定位问题:端口用完导致该错误,并提出了解决方案。

同时,还出现了QPS受限问题。测试使用thrift-client请求访问server,下游dsp延迟暂设50ms,然而QPS仅达到20,尽管增加client并发量,但QPS没有提升。Workflow工程师们在了解了问题状况后,也很快找到了关键点,给出了多种解决方案。

值得一提的是,在对Workflow充满赞叹之余,Workflow的工程师们又一次更新,推出srpc,彻底击破了thrift同步模式的限制。目前,sogou-rpc(srpc)尚未开源,但此次也获取到内测版本进行开发测试。

srpc的出现让异步完美实现,更让人惊叹的是,接口非常的简单,在很短的时间内即可将框架载入业务。它支持thrift,却比thrift更简洁,使用方式类似thrift,提供的却是异步的服务,更加亲和的是,也不需要管理连接池和一堆琐碎的配置。据悉,srpc也即将开放。

因此当出现问题的时候,不用担心,Workflow的工程师们可以提供指导,提高服务性能,包括关闭日志,避免日志系统瓶颈;根据业务调节handlerthreads和epollthreads个数;千兆网卡瓶颈受限。

具备四大特色 助力打造优秀程序引擎

程序员常在性能敏感的地方使用C++语言,与CPU进行博弈,也总是感概现有框架反人类的设计,却也没有更好的替代品。但Workflow的横空出世,为C++打造了一套优秀的程序引擎。

它有精简的接口,符合直观美学的设计规范。开发者能够非常迅速的将业务移植上去,并得到更优秀的性能,除非对程序有特定需求,否则无需配置复杂的参数,也无需自己维护连接池,简而言之,高效的性能,高效的使用。

动态的串行和并行的功能,几乎能满足所有业务情况。Workflow中,串行和并行是非常优雅的设计,尤其是在以task为单位的业务中。在普通的程序设计中,串行和并行的方式是通过程序流逻辑和多线程搭配完成,而Workflow将其抽象到了同一个层次,这就意味着,对于串行和并行我们仅仅需要了解业务关系而不用关心实现具体手法和一堆复杂的传参,调用方法几乎相同。而这样优雅的设计,得以满足几乎所有的业务情况,只需要将任务放置在串并联中合理的位置,就能完成想要的功能。

它拥有超高的性能。采用纯异步的设计方式,不会IO阻塞,让CPU得以尽情奔跑。仅32个线程性能超越2000个线程的线程池同步模型,尤其是在网络延迟较高的情况,对比表现极其出色。在C++20协程全面问世前,异步使用callback也非常直观。

它拥有全面的功能。原生实现了多种互联网的协议,http,redis,mysql,即将推出的srpc更是在其基础上适配了更广泛的规则,支持thrift、protouf、json等协议。这也意味着,你原先使用的几乎所有协议,在这都能找到答案。无论是负载均衡,或者更细节的超时控制,在Workflow都已经实现。在使用中或许你还会惊喜的发现一些意料之外的功能,以一套Workflow,几乎可以覆盖一切高性能的后端服务需求。

这是一份具有艺术美感的代码,像是一件工艺品,每一行都有着韵味,这是每个程序员都追求的目标和境界。它所具备的价值承载了更多的意义,或许言论过于感性,中国互联网软件行业从开源社区获取多于其贡献,近些年正是这些开源设计者正不断做出贡献,他们长达一两年的日日夜夜,是“世界是平的”最好的践行者,是足够真诚的理想主义者,他们已经越过边界看到了远方。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
  • 标签:大香焦依人在钱4
  • 编辑:杨保录
  • 相关文章