搜狗又有兩大開源力作!你一個(gè)也不知道?
前不久,搜狗正式宣布開源了一個(gè)C++服務(wù)器引擎——workflow。
搜狗公司C++服務(wù)器引擎,支撐搜狗幾乎所有后端C++在線服務(wù),包括所有搜索服務(wù),云輸入法,在線廣告等,每日處理超百億請(qǐng)求。這是一個(gè)設(shè)計(jì)輕盈優(yōu)雅的企業(yè)級(jí)程序引擎,可以滿足大多數(shù)C++后端開發(fā)需求。
目前,Workflow在Github上標(biāo)星2.8K,累計(jì)分支560(Github地址:https://github.com/sogou/workflow)
Sogou C++ Workflow在設(shè)計(jì)之初,就秉持著高性能與輕量級(jí)兩個(gè)核心理念。長(zhǎng)久以來,業(yè)界中優(yōu)化服務(wù)器性能都主要專注于如何跑滿cpu、如何單獨(dú)地讓網(wǎng)絡(luò)請(qǐng)求極速響應(yīng)等方面。而此次上線的搜狗Workflow則更專注于如何讓各種網(wǎng)絡(luò)資源被具體的調(diào)度器管理,使其盡可能地全部調(diào)度起來。
另一方面,對(duì)多通信計(jì)算資源融為一體的解決方案,進(jìn)一步提升了Workflow引擎的性能。
此項(xiàng)目最大的亮點(diǎn)可能是創(chuàng)新性引入了任務(wù)流的概念,Sogou C++ Workflow將資源高度封裝,用戶再也接觸不到連接池、線程池,包括想要做 aio 時(shí)的文件 fd與各種異步通知機(jī)制。這就意味著,在開發(fā)階段開發(fā)人員僅僅需要了解業(yè)務(wù)關(guān)系而不用關(guān)心內(nèi)部細(xì)節(jié),幫助開發(fā)者們實(shí)現(xiàn)自己復(fù)雜的業(yè)務(wù)邏輯。
功能特性
你可以將Workflow用于快速搭建http服務(wù)器:
- #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協(xié)議。
- 實(shí)現(xiàn)自定義協(xié)議client/server,構(gòu)建自己的RPC系統(tǒng)。srpc就是以它為基礎(chǔ),作為獨(dú)立項(xiàng)目開源。支持srpc,brpc和thrift等協(xié)議。
- 構(gòu)建異步任務(wù)流,支持常用的串并聯(lián),也支持更加復(fù)雜的DAG結(jié)構(gòu)。
- 作為并行編程工具使用。除了網(wǎng)絡(luò)任務(wù),我們也包含計(jì)算任務(wù)的調(diào)度。所有類型的任務(wù)都可以放入同一個(gè)流中。
- 在Linux系統(tǒng)下作為文件異步IO工具使用,性能超過任何標(biāo)準(zhǔn)調(diào)用。磁盤IO也是一種任務(wù)。
- 實(shí)現(xiàn)任何計(jì)算與通訊關(guān)系非常復(fù)雜的高性能高并發(fā)的后端服務(wù)。
- 構(gòu)建服務(wù)網(wǎng)格(service mesh)系統(tǒng)。項(xiàng)目?jī)?nèi)置服務(wù)治理與負(fù)載均衡等功能。
在Github上,搜狗還貼心給出了大量的workflow示例,具體如下:
此外,開源workflow幾個(gè)月后,,搜狗又宣布開源workflow的生態(tài)項(xiàng)目——srpc,這是一個(gè)基于workflow 打造的輕量級(jí)RPC框架。
srpc內(nèi)部實(shí)現(xiàn)層次精巧,非常注重縱向?qū)哟尾鸱趾蜋M向解耦。其中壓縮層、序列化層、協(xié)議層是互相解耦的,利用函數(shù)重載、派生子類實(shí)現(xiàn)父類接口和模版特化等多種多態(tài)方式,來實(shí)現(xiàn)內(nèi)部使用同一套代碼的高度復(fù)用。后續(xù)架構(gòu)升級(jí)或者用戶進(jìn)行二次開發(fā),無論是中間再加一層、還是某層內(nèi)橫向添加一種內(nèi)容,都不需要改動(dòng)現(xiàn)有的代碼,十分方便。(Github地址:https://github.com/sogou/srpc)
搜狗方面表示,目前,srpc已在搜狗搜索和搜狐集團(tuán)團(tuán)隊(duì)中多個(gè)線上業(yè)務(wù)中穩(wěn)定使用了一段時(shí)間。由于接口簡(jiǎn)介易上手,且直接打通workflow的任務(wù)流、計(jì)算調(diào)度、服務(wù)治理等功能,其對(duì)開發(fā)效率有了非常大的提升。
不知道你對(duì)搜狗這兩大開源神器感興趣么?