Skip to main content

非常强大的高性能 C++ 服务器引擎

·72 words·1 min
程序 C++
Table of Contents

搜狗公司C++服务器引擎,支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理超百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数C++后端开发需求。

你可以用来:
#

  • 快速搭建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;
}
  • 作为万能异步客户端。目前支持httpredismysqlkafka协议。
  • 轻松构建效率极高的spider。
  • 实现自定义协议client/server,构建自己的RPC系统。
  • srpc就是以它为基础,作为独立项目开源。支持srpcbrpcthrift等协议。
  • 构建异步任务流,支持常用的串并联,也支持更加复杂的DAG结构。
  • 作为并行计算工具使用。除了网络任务,我们也包含计算任务的调度。所有类型的任务都可以放入同一个流中。
  • Linux系统下作为文件异步IO工具使用,性能超过任何标准调用。磁盘IO也是一种任务。
  • 实现任何计算与通讯关系非常复杂的高性能高并发的后端服务。
  • 构建微服务系统。
  • 项目内置服务治理与负载均衡等功能。

系统设计特点
#

我们认为,一个典型的后端程序由三个部分组成,并且完全独立开发。即:程序=协议+算法+任务流。

基础任务,任务工厂与复合任务
#

  • 我们系统中包含六种基础任务:通讯,文件IO,CPU,GPU,定时器,计数器。
  • 一切任务都由任务工厂产生,并且在callback之后自动回收。
  • server任务是一种特殊的通讯任务,由框架调用任务工厂产生,通过process函数交给用户。
  • 大多数情况下,用户通过任务工厂产生的任务,都是一个复合任务,但用户并不感知。

异步性和基于“C++11 std::function“的封装
#

  • 不是基于用户态协程。使用者需要知道自己在写异步程序。
  • 一切调用都是异步执行,几乎不存在占着线程等待的操作。
  • 虽然我们也提供一些便利的半同步接口,但并不是核心的功能。

内存回收机制
#

  • 任何任务都会在callback之后被自动内存回收。如果创建的任务不想运行,则需要通过dismiss方法释放。
  • 任务中的数据,例如网络请求的resp,也会随着任务被回收。此时用户可通过std::move()把需要的数据移走。

项目地址
#

开源地址:https://github.com/sogou/workflow

Related

How to Perform UDP Ping in Linux
·451 words·3 mins
Linux UDP Ping Network Troubleshooting
Scheduling Regular MySQL Backups on Linux
·415 words·2 mins
Linux MySQL Backup Cron
Linux从内核的角度看外设芯片的驱动
·874 words·5 mins
Linux Device Driver Kernel Linux