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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
微软合作 NASA,提供基于 Python 的太空探索课程
微软宣布和美国宇航局(NASA)达成合作,就如何使用 Python 进行太空探索提出了一些想法。双方合作创建了三个基于 Python 制作的学习模块,这些模块可以教初学者如何使用 Python 语言和机器学习算法来探索太空,对太空岩石进行分类以及预测天气和火箭发射的延迟。 感兴趣的用户只要拥有一台 Windows、Mac 或 Linux 计算机即可开展学习。课程内容包含了什么是编程语言的基础知识、如何使用微软的 Visual Studio Code(VS Code)代码编辑器、安装 Python 的扩展、以及如何在 VS Code 中运行一个基本的 Jupyter Notebook。 第一个学习模块为“太空探索中的 Python 简介”,共包含八个单元。其中介绍了 NASA 的 Artemis 月球探索计划以及该计划背后的关键技术。该模块中关于如何学习 Python 的信息并不多;不过详细介绍了在月球探索中使用的机器和机器人,如何让计算机科学家和开发人员与宇航员和地质学家一起发挥重要作用。 第二个模块“使用 Python 和人工智能对空间岩石进行分类”也包含八个单元。该模块的内容要求学...
-
下一篇
喵的Unity游戏开发之路 - 互动环境(有影响的运动)
前言 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学。 为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发。 本文不是广告,不是推广,是免费的纯干货! 本文全名:喵的Unity游戏开发之路 - 移动- 互动环境 - 有影响的运动 互动环境 有影响的运动 通过加速区创建跳板和悬浮力。 制作一个多功能检测区。 反应性地交换材料并激活或停用对象。 通过事件触发的简单插值移动对象。 这是有关控制角色移动的教程系列的第十期。它使环境能够以各种方式对运动做出反应。 本教程使用Unity 2019.4.4f1制作。它还使用ProBuilder软件包。 效果之一 修正 我改进了轨道摄像机的1.4节“使焦点居中”,以便更好地实现焦点居中和焦点半径限制的相互作用。调整OrbitCamera.UpdateFocusPoint如下: void UpdateFocusPoint () { previousFocusPoint = focusPoint; Vector3 targetPoint = focus.positi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker容器配置,解决镜像无法拉取问题
- MySQL数据库在高并发下的优化方案