WF,是搜狗開源的C++服務器引擎框架。WF的設計目標是:
輕量級,高性能
。
搜狗幾乎全部的C++後端服務,都基於這個框架,天天處理超過百億的請求。它的性能超高
,單機每秒50W的QPS,特別是高併發壓測的狀況下,比nginx和brpc表現都要好。
WF高性能純異步MySQL客戶端,既繼承了WF的極簡設計目標,無需依賴任何庫,又繼承了高性能設計目標,在合理的配置下,每秒能處理幾萬次MySQL請求。
除此以外,它能支持事務,支持存儲過程,支持多語句多結果集,並在內核防止SQL注入,互聯網業務絕大部分需求都能輕鬆應對。
同時,做爲WF原生自有協議的一部分,它與任務流,服務治理能特性完美融合,與http,redis,計算任務統一使用,並可以經過upstream輕鬆實現讀寫分離。
爲何搜狗WF異步MySQL客戶端,能作到每秒幾萬次數據庫交互?
如上圖所示,傳統的MySQL客戶端,每每是同步阻塞式的,在向MySQL發送請求到MySQL回覆響應的過程當中,整個線程處於阻塞等待狀態。
此時,若是但願提升併發處理能力,每每要設置大量的工做線程,而工做線程的切換,以及臨界資源的鎖爭奪,性能會有較大的影響。
而做爲異步MySQL客戶端,向MySQL發送請求以後,線程就能夠執行本地其餘異步調用,或者發送下一個MySQL請求,無任何阻塞,用不多的線程,就能擁有很高的併發處理能力。
如上圖所示,簡單的幾行,就可以提交一個異步的MySQL任務。
url參數,
mysql://uname:pwd@host:port/dbname
set_query,能夠設置但願執行的SQL語句;
增刪改查、建庫刪庫、建表刪表、預處理、使用存儲過程和使用事務的多種需求,均可以輕鬆知足。
畫外音:目前不支持切換數據庫,但能夠經過db.table的方式進行跨庫的操做。
在異步回調中,經過
task->get_resp()
可以拿到
MySQLResponse
:
(1)一個
MySQLResponse
裏包含若干
ResultSet
;
(2)一個
ResultSet
包含若干
Row
;
對使用者很是友好,可以很輕鬆的進行結果集處理,規避掉各類細節。
若是無需獨佔鏈接,傳入url建立任務,調用方甚至無需關注「鏈接」的存在;對於須要獨佔鏈接的事務需求,能夠先建立鏈接,再在鏈接上建立任務。
最後再強調一點,WF在github上的文檔和demo很是齊全,
對於新手極其友好
。並且碰到代碼中不明白的地方,能夠直接聯繫開發小組,做者會直接和你們交流,避免二手消息。
畫外音:找一段demo代碼單步執行下來,協議設計與實現,底層網絡通信,IO線程,工做線程,任務隊列,線程同步互斥機制,超時處理機制,異常處理機制等,能迅速掌握一套RPC內核原理與細節,基本上國內大部分公司的offer能手到擒來。
WF,是今年我看過最清爽的開源代碼,很是適合瞭解通訊內核,RPC內核,調度框架內核,強烈推薦給你們。
WF的高性能異步
MySQL-client
,也很是推薦你們使用,MySQL數據庫老大難的性能瓶頸,說不定就解決了。
地址
:https://github.com/sogou/workflow
本文分享自微信公衆號 - 架構師之路(road5858)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。mysql