琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快

Sogou C++ Workflow 在 琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快:2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 Apache-2.0
开发语言 C/C++
操作系统 跨平台
软件类型 开源软件
所属分类 服务器软件HTTP服务器
开发厂商
地区 国产
提 交 者
适用人群 未知
收录时间 2020-09-03

软件简介

Sogou C++ Workflow 是搜狗公司的 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协议。
  • 实现自定义协议client/server,构建自己的RPC系统。
    • 搜狗RPC就是以它为基础,作为独立项目开源。支持srpcbrpcthrift等协议()。
  • 构建异步任务流,支持常用的串并联,也支持更加复杂的DAG结构。
  • 作为并行编程工具使用。除了网络任务,我们也包含计算任务的调度。所有类型的任务都可以放入同一个流中。
  • Linux系统下作为文件异步IO工具使用,性能超过任何标准调用。磁盘IO也是一种任务。
  • 实现任何计算与通讯关系非常复杂的高性能高并发的后端服务。
  • 构建服务网格(service mesh)系统。
    • 项目内置服务治理与负载均衡等功能。

编译和运行环境

  • 项目支持LinuxmacOSWindows等操作系统。
    • Windows版暂时以独立branch发布,使用iocp实现异步网络。用户接口与Linux版一致。
  • 支持所有CPU平台,包括32或64位x86处理器,大端或小端arm处理器。
  • 需要依赖于OpenSSL,推荐OpenSSL 1.1及以上版本。
  • 项目使用了C++11标准,需要用支持C++11的编译器编译。但不依赖boostasio
  • 项目无其它依赖,但是包含了lz4zstdsnappy几个压缩库的无改动源代码(kafka协议需要)。

系统设计特点

典型后端服务器由以下三个部分组成,并且完全独立开发。

  • 协议
    • 大多数情况下,用户使用的是内置的通用网络协议,例如http,redis或各种rpc。
    • 用户可以方便的自定义网络协议,只需提供序列化和反序列化函数,就可以定义出自己的client/server。
  • 算法
    • 在 Sogou C++ Workflow 的设计里,算法是与协议对称的概念。
      • 如果说协议的调用是rpc,算法的调用就是一次apc(Async Procedure Call)。
    • 提供了一些通用算法,例如sort,merge,psort,reduce,可以直接使用。
    • 与自定义协议相比,自定义算法的使用要常见得多。任何一次边界清晰的复杂计算,都应该包装成算法。
  • 任务流
    • 任务流就是实际的业务逻辑,就是把开发好的协议与算法放在流程图里使用起来。
    • 典型的任务流是一个闭合的串并联图。复杂的业务逻辑,可能是一个非闭合的DAG。
    • 任务流图可以直接构建,也可以根据每一步的结果动态生成。所有任务都是异步执行的。

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

  • 系统中包含六种基础任务:通讯,文件IO,CPU,GPU,定时器,计数器。
  • 一切任务都由任务工厂产生,并且在callback之后自动回收。
    • server任务是一种特殊的通讯任务,由框架调用任务工厂产生,通过process函数交给用户。
  • 大多数情况下,用户通过任务工厂产生的任务,都是一个复合任务,但用户并不感知。
    • 例如,一次http请求,可能包含许多次异步过程(DNS,重定向),但对用户来讲,就是一次通信任务。
    • 文件排序,看起来就是一个算法,但其实包括复杂的文件IO与CPU计算的交互过程。
    • 如果把业务逻辑想象成用设计好的电子元件搭建电路,那么每个电子元件内部可能又是一个复杂电路。

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

  • 不是基于用户态协程。使用者需要知道自己在写异步程序。
  • 一切调用都是异步执行,几乎不存在占着线程等待的操作。
    • 虽然我们也提供一些便利的半同步接口,但并不是核心的功能。
  • 尽量避免派生,以std::function封装用户行为,包括:
    • 任何任务的callback。
    • 任何server的process。符合FaaS(Function as a Service)思想。
    • 一个算法的实现,简单来讲也是一个std::function。但算法也可以用派生实现。

内存回收机制

  • 任何任务都会在callback之后被自动内存回收。如果创建的任务不想运行,则需要通过dismiss方法释放。
  • 任务中的数据,例如网络请求的resp,也会随着任务被回收。此时用户可通过std::move()把需要的数据移走。
  • SeriesWork和ParallelWork是两种框架对象,同样在callback之后被回收。
  • 项目中不使用std::shared_ptr来管理内存。
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (5)

加载中
好东西,收藏
10/18 08:44
回复
举报
搭建和编译有文档吗,各个功能模块功能是什么,如何快速融入现有业务中,希望能出个教程
10/14 10:29
回复
举报
每次都是代码和文字,有没有新鲜的
09/24 23:15
回复
举报
跟drogon比。性能怎么样呢?
09/10 08:40
回复
举报
可以可以,收藏
09/04 11:28
回复
举报
更多评论
发表于AI & 大数据专区
09/04 08:54

琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快:搜狗开源其轻量级高性能 C++ 服务器引擎,引入任务流概念

搜狗公司开源了其 C++ 服务器引擎 Sogou C++ Workflow,这一引擎实现了高性能、轻量级落地,还引入任务流概念,实现了计算任务与通信任务的统一和协同调度。 据介绍,目前该引擎支撑着搜狗几乎所有后端 C++ 在线服务,包括所有搜索服务、云输入法与在线广告等,每日处理数百亿请求。 Sogou C++ Workflow 在设计之初,就秉...

3
39
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2019/04/19 09:14

以下是我从其他网站中学的内容,后有相应的网站学习链接地址,可供学习 1.选择菜单项File->New->Project,弹出“New Project”对话框。 2.左侧面板中Installed Templated的Visual C++下选择MFC,中间窗口中选择MFC Application,然后在下面的Name编辑框中键入工程名称,本例取名“Addition”,在Location编辑框中设置工程...

0
0
发表了博客
2019/08/11 23:27

.hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与d...

0
0
发表了博客
2019/02/26 13:07

C++ STL详解 转载自:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html 一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来 的。现在虽说它主要出现在C++中,但在被引入C...

0
1
发表了博客
2014/07/14 15:47

c++ STL之 Map

0
1
发表了博客
01/10 16:17

C++中对共享数据的存取在并发条件下可能会引起data race的undifined行为,需要限制并发程序以某种特定的顺序执行, 有两种方式:使用mutex保护共享数据,原子操作:针对原子类型操作要不一步完成,要么不做,不可能出现操作一半被切换CPU, 这样防止由于多线程指令交叉执行带来的可能错误。非原子操作下,某个线程可能看...

0
0
发表了博客
2018/07/29 20:32

之前写过一篇关于map容器的一篇博客,但是只有一些基础操作,后来我在CSDN上看到了一位大佬写的博客于是转载过来了。 作者大大的博客http://blog.csdn.net/sunshinewave/article/details/8067862 —————————————————————————————————————————————————————————...

0
0
发表了博客
2019/03/16 15:25

1,智能指针:auto_ptr(c++11 已经弃用),unique_ptr(用于取代 auto_ptr), shared_ptr, weak_ptr   http://www.cnblogs.com/TenosDoIt/p/3456704.html(值得一看)   http://blog.csdn.net/zhourong0511/article/details/80315961(优缺点分析) 1 // classTest.cpp : 定义控制台应用程序的入口点。 2 // 3 4 ...

0
5
发表了博客
2014/07/10 13:46

c++ STL

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于开源治理专区
10/19 22:04

琪琪色原网站,琪琪色影院,琪琪色原网站影音先锋_是全亚洲更新最快:如何在 OSC 社区运营你的开源项目?

在 OSCHINA 社区,拥有着围绕每一款开源软件展开的完整宣发链条。如果你或你的团队拥有一款开源软件,并且想要让更多的人了解和使用它,那么你可以: 在 OSCHINA 社区投递软件 投递与该软件相关的新闻,比如版本升级、项目社区重大事件等 撰写与该软件技术相关的博客 积极参与项目相关的问答 在 OSCHINA 社区,为你的开源...

23
43
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
5 评论
143 收藏
分享
返回顶部
顶部