搜狗伺服器引擎Sogou C++ Workflow開源啦!
搜狗公司開源了其 C++ 伺服器引擎 Sogou C++ Workflow,這一引擎實現了高效能、輕量級落地,還引入任務流概念,實現了計算任務與通訊任務的統一和協同排程。 |
據介紹,目前該引擎支撐著搜狗幾乎所有後端 C++ 線上服務,包括所有搜尋服務、雲輸入法與線上廣告等,每日處理數百億請求。
Sogou C++ Workflow 在設計之初,就秉持著高效能與輕量級兩個核心理念。長久以來,業界中最佳化伺服器效能都主要專注於如何跑滿 cpu、如何單獨地讓網路請求極速響應等方面。而此次上線的搜狗 Workflow 則更專注於如何讓各種網路資源被具體的排程器管理,使其儘可能地全部排程起來。
另一方面,對多通訊計算資源融為一體的解決方案,進一步提升了 Workflow 引擎的效能。過去開發者在面臨選擇高吞吐網路框架時,需要自己面對不同計算資源比例而劃分不同大小的執行緒池。然而每種計算具體資源需求比例是動態變化的,重要性也不一樣,後端響應時長也是動態變動。Sogou C++ Workflow 使得 C++ 伺服器引擎也能像 Go 語言一樣,實現網路資源非同步排程,並且進一步打通計算與磁碟等資源。
此專案最大的亮點可能是創新性引入了任務流的概念,Sogou C++ Workflow 將資源高度封裝,使用者再也接觸不到連線池、執行緒池,包括想要做 aio 時的檔案 fd 與各種非同步通知機制。這就意味著,在開發階段開發人員僅僅需要了解業務關係而不用關心內部細節,幫助開發者們實現自己複雜的業務邏輯。
開發人員可以利用 Sogou C++ Workflow 封裝好的各種任務來動態或靜態組建自己的業務邏輯,如下圖所示,不同型別的任務都可以被序列、並行到一起:
根據資料,除了各種創新設計以外,Sogou C++ Workflow 還擁有友好的使用者體驗。Sogou C++ Workflow 原生實現了對http、redis、mysql 和 kafka 等協議的支援,可以直接作為這些協議的客戶端使用。並且在其基礎上開發了一套更加易用的 Sogou RPC,實現了與 brpc 和 thrift 互通,並且可以透過 http+json 或 IDL 實現跨語言。
開發團隊透露,Sogou RPC 專案也會在不久的將來開源。
Http Server 效能實測:Sogou C++ Workflow VS nginx、brpc
搜狗團隊也提供了 Sogou C++ Workflow 和 nginx、brpc 兩個主流系統的 http server 效能對比。
選取了最基本的測試場景:wrk 或者 wrk2 跨機做 client,單 server,長連線,CPU:40 核 E5-2630 v4 @ 2.20GHz,記憶體:192GB,網路卡:25000Mb/s。nginx 配置了 auto 的程式數(與核數一致),brpc 配置了 40 個 nthreads,workflow 配置了 16 個 poller 執行緒和 20 個 handler 執行緒。
結論:隨著壓測併發數的增加,server 的 QPS 會隨著增高。可以看到 Workflow 無論是低併發數還是高併發數的情況下,QPS 依然比 nginx 和 brpc 要高,尤其是併發數超過 128 的時候優勢更加明顯,Workfow 對於小包基本能保證 50w 的 QPS,說明內部對網路資源的高併發排程做了很多最佳化。
結論:此處的返回包大小是 http 請求的 body 大小,隨著返回包增大,QPS 會有所下降,我們希望 QPS 依然儘可能保持平穩不要下降得太快。Workflow 在同併發下的效能依然比其他兩個系統要好,說明網路收發和其他呼叫之間的排程協調得更好。
本測試由 wrk2 進行固定 QPS 的壓測,其中還有 1% 的長尾請求 Outiler,長尾請求不計入結果,因為我們關注的是模擬真實情況下普通請求能否被及時處理。由於 nginx 在其他測試中效能略差一截,因此沒有對其進行 CDF 對比。可以看到在不同比例的分佈中,Workflow 的延遲更低、且最慢的那些(0.99 到 1.00 之間)延遲增長也相對緩慢,說明 Workflow 對長尾處理更及時。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2723358/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【開源】.net微服務開發引擎Anno開源啦微服務
- 如何打造規範的開源專案workflow
- 掌上邑大開源啦!
- go-echarts 開源啦GoEcharts
- 開源OLAP引擎選型
- 微前端框架chunchao(春潮)開源啦前端框架
- 火山引擎來思否啦~
- OpenYurt 開源之夏開始申請啦
- 一刻社群程式碼開源啦
- 更新啦!第 59 期《HelloGitHub》開源月刊Github
- 阿里分散式事務框架GTS開源啦!阿里分散式框架
- 主流開源OLAP引擎大比拼
- 滴滴內部監控系統 Nightingale 開源啦
- 五合一建站系統YouDianCMS開源啦
- 開源專案「喵爪」尋找小夥伴啦
- 使用開源搜尋引擎 YaCy 的技巧
- Devs--開源規則引擎介紹dev
- 《Python3網路爬蟲開發實戰》開源啦!Python爬蟲
- 開源貢獻者翻譯組 LCTT 九歲啦
- ubuntu安裝sogou輸入法UbuntuGo
- 大資料丨Sogou搜狗業務OP任嘉興帶你解讀“網際網路醫美商品推薦機制”大資料Go
- 開源表單工作流引擎好用嗎?
- PHP有償開源技術林-流程引擎PHP
- 基於laravel的流程引擎偷偷開源了Laravel
- Facebook開源Hermes:輕量JavaScript優化引擎JavaScript優化
- 開源搜尋技術的核心引擎 —— Lucene
- Golang 資料視覺化利器 go-echarts 開源啦Golang視覺化Echarts
- Facebook開源Hermes:輕量JavaScript最佳化引擎JavaScript
- 阿里開源深度神經網路推理引擎 MNN阿里神經網路
- 《流程引擎原理與實踐》開源電子書
- 基於 .NET 的開源工作流引擎框架框架
- 規則引擎模式的.NET開源專案案例模式
- 安裝sogou輸入法步驟:Go
- 它來了!Flutter 應用內除錯工具 UME 開源啦Flutter除錯
- 上線啦丨FlinkX1.12 Beta版正式在Github開源Github
- XAIGen:自動化攻擊特徵提取的專案開源啦AI特徵
- 如何編寫 C++ 遊戲引擎C++遊戲引擎
- aardio封裝庫) 微軟開源的js引擎(ChakraCore)封裝微軟JS