今天分享一個適合C++開發者進階的開源項目,這個項目的名字叫workflow,項目地址如下:https://github.com/sogou/workflow
“
項目適用場景
該項目是搜狗的服務器引擎,幾乎搜狗所有的后端C++服務和其他幾十家公司都在使用這個引擎,每日處理超百億請求。
不僅如此,該項目也非常適合在嵌入式應用上實現網絡的框架設計,框架設計是一個項目成功與否非常重要的環節,而網絡在AIOT、智能家居、智能硬件上尤其重要。
比如在項目中需要使用http,Workflow在設計上可以通過Cmake配置支持windows 或者 Linux 或 MacOS 等多個平臺上的多個項目編譯,而且,可以在不同平臺上保持相同的接口。
如果你新增一個嵌入式設備,比如ESP32,在服務器和客戶端只需要維護一套代碼,就可以完成自己的應用需求。
真正做到把云端的技術移植到嵌入式設備上運行。
適用于嵌入式幾大特點:
1、支持多平臺、多體系結構
多平臺的代碼說明在配置和耦合上考慮了很多設計上的細節。?前Workflow除了Linux、Windows、MacOS、Android以外,還可以愉快地在樹莓派、國產?芯處理器等不同體系結構上運?。
2、編譯快
Workflow除OpenSSL以外不依賴其他庫,?且在接口層是沒有模版的,因此編譯速度?常快,不到一分鐘即可編出一個可?的lib。
3、體積小、支持編譯剪裁
Workflow的Kafka協議默認是不編譯的,除此之外,還可以裁剪掉其他不常?的模塊。
并且可以通過strip命令去掉符號鏈接,即可讓庫?件縮?到400k左右。
4、運行時內存小、調度快
作為一個異步調度的庫,Workflow調度性能一直是?常好的。另外運?時內存占?也?常的小。
5、自定義協議非常方便
社區活躍以及項目負責人積極回復問題也是一個亮點,如果在框架搭建和移植上出現問題,在社區上提問都會得到快速響應。
“
移植到嵌入式設備的開源支持
據悉?前已經有許多?戶?到了嵌?式上了。github官方也做出了耐心的解釋。
“
框架能做什么
1、輕松的搭建server
不用多說,服務端框架如果不能搭建server那還玩啥了,但使用這個框架非常方便,以http server為例,只需要簡單幾行代碼即可:
#include
2、輕松高效的發起客戶端請求
項目號稱可作為萬能異步客戶端,目前支持http,redis,mysql、websocket和kafka協議,下面是官方給出的一個mysql的客戶端示例:
int main(int argc, char *argv[]) { ... WFMySQLTask *task = WFTaskFactory::create_mysql_task(url, RETRY_MAX, mysql_callback); task->get_req()->set_query("SHOW TABLES;"); ... task->start(); ... }
以往的C++ server需要訪問mysql時,可能使用的是傳統的客戶端。在一個線程下以同步阻塞的方式等待數據到來。如果有多個網絡請求希望并發,那么用戶需要管理好多個mysql cli對象。
workflow完美的解決了這一系列問題,把所有這種用戶請求交給內部的poller線程統一管理,實現了高效的非阻塞IO行為,提升了server作為客戶端請求數據時的性能表現。再也不用擔心這種客戶端行為影響server整體的性能。
支持自定義協議client/server:用戶可構建自己的RPC系統,搜狗有個開源項目srpc就是以這個框架為基礎實現的。
3、可建構異步任務流
支持串聯,支持并聯,支持串并聯的組合體,也支持復雜的DAG結構。
4、異步IO
在Linux系統下可作為文件異步IO工具使用,性能超過任何標準調用。
5、通信與計算一體化
多數框架都著重于網絡IO的效率問題,而計算與任務調度等需要用戶自己實現,workflow會自動對任務進行調度,打通網絡和磁盤等資源,特別適合需要網絡通信的重計算模塊。
“
任務流框架設計
在作者的設計理念中,一切業務邏輯皆是任務,多個任務會組成任務流,任務流可組成圖,這個圖可能是串聯圖、并聯圖,也可能是串并聯圖,類似于這種:
或者是這種復雜的DAG圖:
當然圖的層次結構可由用戶自定義,很牛的一點是支持動態創建任務流。
分享結束,希望小伙伴喜歡,嵌入式真需要不斷學習去充實自己的大腦,相信你們都能夠成為最厲害的程序員。
最近很多小伙伴領取了程序員知識圖譜,反饋很好。我們知道每一個技術領域都有它完整地知識體系,而良好的知識體系有助于技術人員的發展和成長,減少學習過程中所走的彎路。所以還沒有領取的小伙伴趕緊領取起來吧!(底部有領取入口哦)
-
嵌入式
+關注
關注
5069文章
19021瀏覽量
303384 -
C++
+關注
關注
22文章
2104瀏覽量
73498 -
workflows
+關注
關注
0文章
6瀏覽量
5919
原文標題:分享一個適合嵌入式的C++開源項目-Workflow
文章出處:【微信號:嵌入式學習站,微信公眾號:嵌入式學習站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論