螞蟻金服OceanBase挑戰TPCC丨TPC-C基準測試之鏈路層優化

螞蟻金服自研數據庫 OceanBase 登頂 TPC-C 引發業內普遍關注,爲了更清楚的展現其中的技術細節,咱們特地邀請 OceanBase 核心研發人員對本次測試進行技術解讀,共包括六篇:數據庫

1)TPC-C基準測試介紹後端

2)OceanBase如何作TPC-C測試數組

3)TPC-C基準測試之SQL優化緩存

4)TPC-C基準測試之數據庫事務引擎的挑戰性能優化

5)TPC-C基準測試之存儲優化服務器

6)TPC-C基準測試之鏈路層優化網絡

本文爲最後一篇,爲方便閱讀,咱們將系列文章整理成PDF電子書,關注「螞蟻金服科技」官方公衆號,回覆「TPCC」便可下載。多線程

導語

在 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) 和 OceanBaseServer(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 鏈路上的組件。

鏈路性能優化

螞蟻金服OceanBase挑戰TPCC | 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 能力

PreparedStatement 是一種二進制的請求交互協議,一次 PSSQL 文本傳輸,屢次執行,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~50us),以及自身對機器資源的最小消耗。在 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 兼容模式,能夠達到數據庫的易用性、高性能、服務持續的最大平衡。後續會持續優化傳輸協議以達到最高的傳輸及交互效率,完善數據庫訪問標準接口,爲用戶提供一個更爲成熟的數據庫服務。

歡迎數據庫驅動及協議、高性能服務器、數據庫中間件感興趣的有志之士加入咱們團隊,一塊兒打造世界級的 OceanBase 分佈式數據庫。簡歷請發送至 hongwei.yhw@antfin.com

相關文章
相關標籤/搜索