前不久,搜狗正式宣布开源了一个C++服务器引擎——workflow。
搜狗公司C++服务器引擎,支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理超百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数C++后端开发需求。
目前,Workflow在Github上标星2.8K,累计分支560(Github地址:https://github.com/sogou/workflow)
Sogou C++ Workflow在设计之初,就秉持着高性能与轻量级两个核心理念。长久以来,业界中优化服务器性能都主要专注于如何跑满cpu、如何单独地让网络请求极速响应等方面。而此次上线的搜狗Workflow则更专注于如何让各种网络资源被具体的调度器管理,使其尽可能地全部调度起来。
另一方面,对多通信计算资源融为一体的解决方案,进一步提升了Workflow引擎的性能。
此项目最大的亮点可能是创新性引入了任务流的概念,Sogou C++ Workflow将资源高度封装,用户再也接触不到连接池、线程池,包括想要做 aio 时的文件 fd与各种异步通知机制。这就意味着,在开发阶段开发人员仅仅需要了解业务关系而不用关心内部细节,帮助开发者们实现自己复杂的业务逻辑。
功能特性
你可以将Workflow用于快速搭建http服务器:
- #include <stdio.h>
- #include "workflow/WFHttpServer.h"
- int main()
- {
- WFHttpServer server([](WFHttpTask *task) {
- task->get_resp()->append_output_body("<html>Hello World!</html>");
- });
- if (server.start(8888) == 0) { // start server on port 8888
- getchar(); // press "Enter" to end.
- server.stop();
- }
- return 0;
- }
- 作为万能异步客户端。目前支持http,redis,mysql和kafka协议。
- 实现自定义协议client/server,构建自己的RPC系统。srpc就是以它为基础,作为独立项目开源。支持srpc,brpc和thrift等协议。
- 构建异步任务流,支持常用的串并联,也支持更加复杂的DAG结构。
- 作为并行编程工具使用。除了网络任务,我们也包含计算任务的调度。所有类型的任务都可以放入同一个流中。
- 在Linux系统下作为文件异步IO工具使用,性能超过任何标准调用。磁盘IO也是一种任务。
- 实现任何计算与通讯关系非常复杂的高性能高并发的后端服务。
- 构建服务网格(service mesh)系统。项目内置服务治理与负载均衡等功能。
在Github上,搜狗还贴心给出了大量的workflow示例,具体如下:
此外,开源workflow几个月后,,搜狗又宣布开源workflow的生态项目——srpc,这是一个基于workflow 打造的轻量级RPC框架。
srpc内部实现层次精巧,非常注重纵向层次拆分和横向解耦。其中压缩层、序列化层、协议层是互相解耦的,利用函数重载、派生子类实现父类接口和模版特化等多种多态方式,来实现内部使用同一套代码的高度复用。后续架构升级或者用户进行二次开发,无论是中间再加一层、还是某层内横向添加一种内容,都不需要改动现有的代码,十分方便。(Github地址:https://github.com/sogou/srpc)
搜狗方面表示,目前,srpc已在搜狗搜索和搜狐集团团队中多个线上业务中稳定使用了一段时间。由于接口简介易上手,且直接打通workflow的任务流、计算调度、服务治理等功能,其对开发效率有了非常大的提升。
不知道你对搜狗这两大开源神器感兴趣么?