每秒幾萬次MySQL交互,搜狗純異步MySQL客戶端開源了!

不少朋友問,如何學習RPC內核知識?
個人回答是, 直接看源碼

今年看源碼,以前推薦過一個框架《單機40萬QPS,搜狗WF框架,今年最值得學習的開源代碼》,隨着源碼閱讀的愈來愈深刻,發現了WF框架一個很是獨特的地方: 高性能純異步MySQL客戶端 ,很是有意思,今天和你們介紹一下本身的學習心得。

首先,什麼是WF?
WF,是搜狗開源的C++服務器引擎框架。WF的設計目標是: 輕量級,高性能 搜狗幾乎全部的C++後端服務,都基於這個框架,天天處理超過百億的請求。它的性能超高 ,單機每秒50W的QPS,特別是高併發壓測的狀況下,比nginx和brpc表現都要好。

什麼是WF高性能純異步MySQL客戶端?
WF高性能純異步MySQL客戶端,既繼承了WF的極簡設計目標,無需依賴任何庫,又繼承了高性能設計目標,在合理的配置下,每秒能處理幾萬次MySQL請求。

除此以外,它能支持事務,支持存儲過程,支持多語句多結果集,並在內核防止SQL注入,互聯網業務絕大部分需求都能輕鬆應對。
畫外音:支持事務的異步MySQL客戶端,太爽了。

同時,做爲WF原生自有協議的一部分,它與任務流,服務治理能特性完美融合,與http,redis,計算任務統一使用,並可以經過upstream輕鬆實現讀寫分離。

爲何搜狗WF異步MySQL客戶端,能作到每秒幾萬次數據庫交互?

如上圖所示,傳統的MySQL客戶端,每每是同步阻塞式的,在向MySQL發送請求到MySQL回覆響應的過程當中,整個線程處於阻塞等待狀態。
畫外音,圖示:
(1)粉色:本地CPU計算;
(2)藍色:與MySQL通信,請求與響應;
(3)白色:本地等待;

此時,若是但願提升併發處理能力,每每要設置大量的工做線程,而工做線程的切換,以及臨界資源的鎖爭奪,性能會有較大的影響。

而做爲異步MySQL客戶端,向MySQL發送請求以後,線程就能夠執行本地其餘異步調用,或者發送下一個MySQL請求,無任何阻塞,用不多的線程,就能擁有很高的併發處理能力
畫外音:全部網絡任務共享處理線程池。

體驗完搜狗WF異步MySQL客戶端,有什麼感覺?

首先,客戶端使用起來很是簡便。

如上圖所示,簡單的幾行,就可以提交一個異步的MySQL任務。
畫外音:
url參數, mysql://uname:pwd@host:port/dbname
set_query,能夠設置但願執行的SQL語句;
callback,異步返回結果的回調;

其次,可以支持的命令很是豐富。
增刪改查、建庫刪庫、建表刪表、預處理、使用存儲過程和使用事務的多種需求,均可以輕鬆知足。
畫外音:目前不支持切換數據庫,但能夠經過db.table的方式進行跨庫的操做。

還有,對結果集的處理極其友好。
在異步回調中,經過 task->get_resp() 可以拿到 MySQLResponse
(1)一個 MySQLResponse 裏包含若干 ResultSet
(2)一個 ResultSet 包含若干 Row
(3)一個 Row 包含若干 Field
對使用者很是友好,可以很輕鬆的進行結果集處理,規避掉各類細節。

同時,對鏈接的封裝很是靈活。
若是無需獨佔鏈接,傳入url建立任務,調用方甚至無需關注「鏈接」的存在;對於須要獨佔鏈接的事務需求,能夠先建立鏈接,再在鏈接上建立任務。

最後再強調一點,WF在github上的文檔和demo很是齊全 對於新手極其友好 。並且碰到代碼中不明白的地方,能夠直接聯繫開發小組,做者會直接和你們交流,避免二手消息。

畫外音:找一段demo代碼單步執行下來,協議設計與實現,底層網絡通信,IO線程,工做線程,任務隊列,線程同步互斥機制,超時處理機制,異常處理機制等,能迅速掌握一套RPC內核原理與細節,基本上國內大部分公司的offer能手到擒來。

WF,是今年我看過最清爽的開源代碼,很是適合瞭解通訊內核,RPC內核,調度框架內核,強烈推薦給你們。

WF的高性能異步 MySQL-client ,也很是推薦你們使用,MySQL數據庫老大難的性能瓶頸,說不定就解決了。

地址 :https://github.com/sogou/workflow
畫外音:WF還有不少優秀的設計,等待你們去挖掘。

相關文章:
單機40萬QPS,搜狗WF框架,今年最值得學習的開源代碼

閱讀原文 直達代碼 。好的代碼,一塊兒分享。

本文分享自微信公衆號 - 架構師之路(road5858)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。mysql

相關文章
相關標籤/搜索