<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 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/dbname
          set_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
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品人妻无码一区二区三区91电影 | 久久久久久日产精品 | 国产综合区 | 婷婷aV无码 | 九九九在线观看视频 |