數據庫

TPC-C基準測試之鏈路層優化

廣告
廣告

作者:易鴻偉 閆建良 王光樹

在 TPC-C 標準定義中,測試系統分為 RTE(Remote Terminal Emulator)和 SUT 兩部分。在實際的 TPC-C 測試流程中,不只是對 DB 端能力的考驗,對鏈路 中的所有組件都存在極大的資源消耗和壓力。以這次 6088 萬 tpmC 測試結果看,我 們一共在 64 臺 64C128G 的云服務器上運行了 960 個 RTE 客戶端,來模擬總計 47942400 個用戶 Terminal,最后還需要基于這么多 RTE 統計結果進行一致性 和持久化審計驗證。而 SUT 又拆分為三部分:WAS(Web Application Server)、 OceanBase Proxy(OBProxy) 和 OceanBase Server(OBServer)。RTE 的 請 求 到 WAS,然后 WAS 通過 OceanBase 客戶端來訪問 OBProxy,OBProxy 會將請求 轉發到后端 OceanBase 集群中最佳的 ObServer 去執行請求。WAS 和 OBProxy 是 RTE 和 OBServer 之間的橋梁,這個橋梁對于承載壓力起著至關重要的作用。本 次 TPC-C 基準測試中,OceanBase 訪問鏈路上主要涉及兩個組件:

  • ODBC 接口及驅動:TPC-C 測試中,WAS 請求 OceanBase 采用了 ODBC 接口。ODBC(Open Database Connectivity) 是 Microsoft 提出的 數據訪問規范,ODBC 在大多數 DBMS 上都可以使用,OceanBase 也提供 了 ODBC 接口訪問能力。感興趣的用戶可以查閱 ODBC API 說明 快速上手 使用,使用 ODBC 的用戶可以直接使用該接口無縫遷移的訪問 OceanBase。 ODBC 接口及驅動集成到 WAS 內部,作為請求 OceanBase 的客戶端。
  • OBProxy 代理:OceanBase 實現了 OBProxy 代理服務器來解決數據庫鏈 路上的路由及容災問題。OBProxy 會感知數據副本地址和分區規則,不參 與 SQL 引擎參與執行計劃的生成調度,主要負責 SQL 路由和轉發。這種架 構設計中,OBProxy 承擔了基礎的路由和容災功能,而數據庫的功能全部交

由 OBServer 實現。這樣更加簡單明確的分工可以各組件性能做的更加極致, OBProxy 也做到了完全無狀態,只需要添加節點即可實現代理能力的水平擴 容,OceanBase 整體也能做到數據庫的最高性能。

TPC-C 基準 OceanBase 鏈路訪問圖

TPC-C 是一個非常嚴苛的基準測試模型,考驗的是一個完備的關系數據庫系統 全鏈路的能力,任何一個環節有瓶頸均無法發揮數據庫的最大性能,接下來本文會 分別在性能、成本及服務持續三個方面來說明下是如何優化 OceanBase 鏈路上的 組件。

鏈路性能優化

在 TPC-C 基準測試之 SQL 優化已經提到,從整個鏈路的角度來看,SQL 所 需要的執行時間是非常短暫的,大量時間花費在與客戶端的交互過程中,造成資 源的浪費和耗時的增加,為此 OBServer 提供 Prepared Statement、存儲過程和 ARRAY BINDING 能力。客戶端和 OBProxy 針對該能力進行支持以使其真正發 揮作用。同時客戶端本身也進行一些優化提升鏈路性能,接下來主要介紹鏈路性能部 分的優化點:

  • 提供異步接口能力:通常使用數據庫訪問都是同步接口,同步接口開發方便, 但客戶端受網絡交互耗時影響大,并發能力受到限制。使用多線程的方式可以 幫助提升并發能力,但機器的線程資源是寶貴的,過多的線程會增加機器線 程切換的開銷,限制了并發能力。為使 WAS 可以達到更高的吞吐能力,我 們基于事件驅動機制在 ODBC 接口內增加異步接口的支持。使用異步接口, WAS 單個線程內可以在發送請求后無需等待執行結果繼續在其他 Session 上 發送請求,通過充分使用線程資源從而大幅提升吞吐能力。異步接口本身參 考 ODBC 接口規范,用戶調用異步接口會立即返回,如果尚未執行完成則返 回 SQL_STILL_EXECUTING,用戶可以輪詢接口直到執行完成返回成功 (SQL_SUCCESS)或者失敗(SQL_ERROR),也可以基于網絡事件驅動, 在有結果返回時再次調用接口獲取結果。使用異步接口,可以在少量線程資源 下輕松支持大量的并發連接,極大的提升了 WAS 的并發能力,機器資源的利 用率也得到提升,大幅降低壓測成本。
  • 提 供 Prepared Statement 能 力:Prepared Statement 是 一 種 二 進 制 的 請 求交互協議,一次 PS SQL 文本傳輸,多次執行,OBProxy SQL 引擎會緩 存 PS SQL 文本以及解析結果,每條 PS SQL 只需要執行一次 Prepare 操 作,后續所有 Session 上的每次執行只需要傳入對應的 Statement Id,就可 以從緩存中找到對應的 SQL 解析結果,結合傳入的參數,可以很快的計算出 OBServer 的路由信息,轉發性能更為高效。同時,作為代理層的 OBProxy 也很好的支持了 OBServer 的分布式特性,當 Client Session 需要切換 Server Session 時,無需再次發送 PS SQL 和 Execute 階段時的類型數據, OBProxy 可以自行判斷并決定是否需要同步 PS SQL 或加上類型數據。通 過 Prepared Statement 能力,可以有效減低系統間的交互成本,提升性能,相比普通 SQL 文本的交互方式,省去了大量 SQL 文本的傳輸以及請求文本 解析的 CPU 開銷。
  • 存儲過程:對于存儲過程,OBProxy 做了大量優化,存儲過程通常包含多條 SQL,不同 SQL 通常需要路由到不同 OBServer 上執行,產生大量遠程執 行。遠程執行不僅會增加 RT,也會占用更多的 CPU 資源,因此,OBProxy 的 SQL 引擎會解析存儲過程中的 SQL,計算最優策略,將存儲過程調用發往 最合適的 OBServer 上執行,盡可能的減少遠程執行次數。OBProxy 也會緩 存存儲過程的解析結果和路由信息,用以省去每次硬解析帶來的 CPU 開銷。
  • 復雜類型:我們在 OceanBase 原有傳輸協議上重新做了擴展,使得整個鏈 路支持復雜類型的傳輸。同時,OBProxy 新增了復雜數據類型的解析,能夠 根據復雜類型數據來計算路由和分區裁剪。通過支持復雜類型,可以提高每次 傳輸攜帶的數據信息,有效減少交互次數,也能夠根據復雜類型的數據計算最 佳路由策略,盡可能的路由到分區更多的 OBServer 上,減少遠程執行次數。 正是有了 OBProxy 對于數組等復雜類型的支持,才使得客戶端可以更好的使 用存儲過程和 ARRAY BINDING 的能力。

代理資源占用

OBProxy 代理采用多線程異步框架和透明流式轉發的設計,保證了數據的高性 能轉發(單核 5 萬 QPS、轉發 RT 30~50 us),以及自身對機器資源的最小消耗。 在 TPC-C 基準測試中,我們也采用了本地的形式部署到 WAS 端,這樣可以最大程 度的的減少客戶端到代理層的網絡開銷。在本次測試中,OBProxy 代理層部署到 64 臺客戶端機器上,每臺機器上使用到了 10 個 Core,一共占用 640 Cores,僅占整 體 CPU 測試成本的 7% 左右,幾乎沒有使用存儲資源,資源占用比例小且支持水平擴容。

持續服務能力

OceanBase 提供了高可用的數據庫服務,在出現機器不可用的場景下,不需要 有任何人工干預數據庫依然能夠持續提供服務,在本次 TPC-C 做 Durability 測試強 制斷電操作中,OceanBase 就表現出無人工干預下的數據庫持續服務的能力,大大 超出審計員的期望。

OceanBase 針對強制斷電這種單機故障場景,OBProxy 有包含黑名單和灰 名單兩種機制,用于處理 OBServer 錯峰合并、升級、宕機、啟動 / 停止,網絡分 區等狀態。黑名單采取定期刷新維護,由 OBServer 反饋哪些服務器節點不能提供 服務。灰名單則采取主動觸發維護,當 OBProxy 轉發請求給 OBServer,如果發 現 OBServer 返回特定的系統錯誤,或者 OBServer 在一段時間內有多次連續不 可用,則將該 OBServer 加入灰名單。黑名單中的 OBServer 不會被訪問,灰名 單中的 OBServer 每隔一段時間會重試一次,檢查是否需要洗白,以避免長時間將 OBServer 降級。通過 OceanBase 這樣的機制,能夠保障 TPC-C Durability 測 試過程中的數據庫持續服務能力。

總結

OceanBase 鏈路層為客戶提供了端到端的完整解決方案,其自研的傳輸協議 能夠非常靈活的支持 SQL 特性和交互協議,實現了標準的數據庫訪問接口并支持 Oracle 兼容模式,可以達到數據庫的易用性、高性能、服務持續的最大平衡。后續 會持續優化傳輸協議以達到最高的傳輸及交互效率,完善數據庫訪問標準接口,為用 戶提供一個更為成熟的數據庫服務。

我還沒有學會寫個人說明!

陶建輝:通過技術“Leave a dent in the world”

上一篇

女朋友還是游戲?一起來分析下游戲的開發與銷售情況

下一篇

你也可能喜歡

TPC-C基準測試之鏈路層優化

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
双色球常规走势图 排列三试机号 麻将现金棋牌平台 福利彩票双色球开奖结果 逆袭分分彩智能做号软件下载 七星彩走势图100 nba新闻虎扑网 新金沙投注平台 11选5每期7码必出五码 博彩充值漏洞 时时彩龙虎刷反水教程 广东11选5计划软件手机版下载 赢了5万不走倒输90万