天天看點

螞蟻金服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整體也能做到資料庫的最高性能。

螞蟻金服OceanBase挑戰TPCC丨TPC-C基準測試之鍊路層優化導語鍊路性能優化代理資源占用持續服務能力總結

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 分布式資料庫。履歷請發送至 [email protected]