每秒幾萬次MySQL交互,搜狗純異步MySQL客戶端開源了!架構(gòu)師之路關(guān)注共 1886字,需瀏覽 4分鐘 ·2020-11-03 13:32 很多朋友問,如何學(xué)習(xí)RPC內(nèi)核知識?我的回答是,直接看源碼。今年看源碼,之前推薦過一個框架《單機40萬QPS,搜狗WF框架,今年最值得學(xué)習(xí)的開源代碼》,隨著源碼閱讀的越來越深入,發(fā)現(xiàn)了WF框架一個非常獨特的地方:高性能純異步MySQL客戶端,非常有意思,今天和大家介紹一下自己的學(xué)習(xí)心得。首先,什么是WF?WF,是搜狗開源的C++服務(wù)器引擎框架。WF的設(shè)計目標是:輕量級,高性能。搜狗幾乎所有的C++后端服務(wù),都基于這個框架,每天處理超過百億的請求。它的性能超高,單機每秒50W的QPS,特別是高并發(fā)壓測的情況下,比nginx和brpc表現(xiàn)都要好。什么是WF高性能純異步MySQL客戶端?WF高性能純異步MySQL客戶端,既繼承了WF的極簡設(shè)計目標,無需依賴任何庫,又繼承了高性能設(shè)計目標,在合理的配置下,每秒能處理幾萬次MySQL請求。除此之外,它能支持事務(wù),支持存儲過程,支持多語句多結(jié)果集,并在內(nèi)核防止SQL注入,互聯(lián)網(wǎng)業(yè)務(wù)絕大部分需求都能輕松應(yīng)對。畫外音:支持事務(wù)的異步MySQL客戶端,太爽了。同時,作為WF原生自有協(xié)議的一部分,它與任務(wù)流,服務(wù)治理能特性完美融合,與http,redis,計算任務(wù)統(tǒng)一使用,并能夠通過upstream輕松實現(xiàn)讀寫分離。為什么搜狗WF異步MySQL客戶端,能做到每秒幾萬次數(shù)據(jù)庫交互?如上圖所示,傳統(tǒng)的MySQL客戶端,往往是同步阻塞式的,在向MySQL發(fā)送請求到MySQL回復(fù)響應(yīng)的過程中,整個線程處于阻塞等待狀態(tài)。畫外音,圖示:(1)粉色:本地CPU計算;(2)藍色:與MySQL通訊,請求與響應(yīng);(3)白色:本地等待;此時,如果希望提高并發(fā)處理能力,往往要設(shè)置大量的工作線程,而工作線程的切換,以及臨界資源的鎖爭奪,性能會有較大的影響。而作為異步MySQL客戶端,向MySQL發(fā)送請求之后,線程就可以執(zhí)行本地其他異步調(diào)用,或者發(fā)送下一個MySQL請求,無任何阻塞,用很少的線程,就能擁有很高的并發(fā)處理能力。畫外音:所有網(wǎng)絡(luò)任務(wù)共享處理線程池。體驗完搜狗WF異步MySQL客戶端,有什么感受?首先,客戶端使用起來非常簡便。如上圖所示,簡單的幾行,就能夠提交一個異步的MySQL任務(wù)。畫外音:url參數(shù),mysql://uname:pwd@host:port/dbnameset_query,可以設(shè)置希望執(zhí)行的SQL語句;callback,異步返回結(jié)果的回調(diào);其次,能夠支持的命令非常豐富。增刪改查、建庫刪庫、建表刪表、預(yù)處理、使用存儲過程和使用事務(wù)的多種需求,都可以輕松滿足。畫外音:目前不支持切換數(shù)據(jù)庫,但可以通過db.table的方式進行跨庫的操作。還有,對結(jié)果集的處理極其友好。在異步回調(diào)中,通過task->get_resp()能夠拿到MySQLResponse:(1)一個MySQLResponse里包含若干ResultSet;(2)一個ResultSet包含若干Row;(3)一個Row包含若干Field;對使用者非常友好,能夠很輕松的進行結(jié)果集處理,規(guī)避掉各種細節(jié)。同時,對連接的封裝非常靈活。如果無需獨占連接,傳入url創(chuàng)建任務(wù),調(diào)用方甚至無需關(guān)注“連接”的存在;對于需要獨占連接的事務(wù)需求,可以先創(chuàng)建連接,再在連接上創(chuàng)建任務(wù)。最后再強調(diào)一點,WF在github上的文檔和demo非常齊全,對于新手極其友好。而且碰到代碼中不明白的地方,可以直接聯(lián)系開發(fā)小組,作者會直接和大家交流,避免二手消息。畫外音:找一段demo代碼單步執(zhí)行下來,協(xié)議設(shè)計與實現(xiàn),底層網(wǎng)絡(luò)通訊,IO線程,工作線程,任務(wù)隊列,線程同步互斥機制,超時處理機制,異常處理機制等,能迅速掌握一套RPC內(nèi)核原理與細節(jié),基本上國內(nèi)大部分公司的offer能手到擒來。WF,是今年我看過最清爽的開源代碼,非常適合了解通信內(nèi)核,RPC內(nèi)核,調(diào)度框架內(nèi)核,強烈推薦給大家。WF的高性能異步MySQL-client,也非常推薦大家使用,MySQL數(shù)據(jù)庫老大難的性能瓶頸,說不定就解決了。地址:https://github.com/sogou/workflow畫外音:WF還有很多優(yōu)秀的設(shè)計,等待大家去挖掘。相關(guān)文章:《單機40萬QPS,搜狗WF框架,今年最值得學(xué)習(xí)的開源代碼》閱讀原文,直達代碼。好的代碼,一起分享。 瀏覽 10點贊 評論 收藏 分享 手機掃一掃分享分享 舉報 評論圖片表情視頻評價全部評論推薦 async-mysql-php異步 mysql 客戶端PHP異步并發(fā)訪問mysql簡單實現(xiàn)。在實際的開發(fā)過程中,我們常常會遇到需要操作多張表,多個庫的情況。有時因為一些限制我們不能進行連表(例如,異地數(shù)據(jù)庫),所以只能用php串行訪問后再在php里進行合async-mysql-php異步 mysql 客戶端PHP異步并發(fā)訪問mysql簡單實現(xiàn)。在實際的開發(fā)過程中,我們常常會遇到需要操作多張表,多個庫的情況MySQL SiduMySQL客戶端MySQL Sidu 是一個 簡單易用的基于Web瀏覽器的 MySQL 的客戶端,采用 PHP開發(fā),MySQL SiduMySQL客戶端MySQLSidu是一個簡單易用的基于Web瀏覽器的MySQL的客戶端,采用PHP開發(fā),可以對數(shù)據(jù)進行各種常用的操作如添加刪除修改等。如下圖所示:太牛了,MySQL每秒寫入57萬條數(shù)據(jù)Java大聯(lián)盟0MySQL 開源工具集合點擊上方"藍字"關(guān)注我們,享更多干貨!上次聊到MySQL官方運維工具。這次再了解下常用的開源工具。目前已收集的并在實際環(huán)境中使用過的開源工具如下:可以說掌握了這些工具(原理和使用技巧),MySQL的日常運維就更簡...MySQL ClientMySQL 的客戶端工具這個多合一的工具將幫助你創(chuàng)建、管理和編輯MySQL數(shù)據(jù)庫。一個直觀的界面就能完成所有任務(wù)。支持從4.02到5.12的所有MySQL版本和所有最新的MySQL功能,包括視圖、觸發(fā)器、存儲過程和函數(shù)以及I每秒 570000 的寫入,MySQL如何實現(xiàn)?程序IT圈0MySQL 每秒 570000 的寫入,如何實現(xiàn)?數(shù)據(jù)管道0MySQL 被超越了!SQL數(shù)據(jù)庫開發(fā)0點贊 評論 收藏 分享 手機掃一掃分享分享 舉報