GreatSQL 開源資料庫 & NVIDIA InfiniBand存算分離池化方案:實現高性能分散式部署

来源:https://www.cnblogs.com/greatsql/archive/2022/08/25/16623317.html
-Advertisement-
Play Games

NVIDIA InfiniBand是一種被廣泛使用的網路互聯技術,基於IBTA(InfiniBand Trade Association)而定義的高帶寬、低延時、低CPU占用率、大規模易擴展的通信技術,是世界領先的超級電腦的互連首選,為高性能計算、人工智慧、雲計算、存儲等眾多數據密集型應用提供了強 ...


NVIDIA InfiniBand是一種被廣泛使用的網路互聯技術,基於IBTA(InfiniBand Trade Association)而定義的高帶寬、低延時、低CPU占用率、大規模易擴展的通信技術,是世界領先的超級電腦的互連首選,為高性能計算、人工智慧、雲計算、存儲等眾多數據密集型應用提供了強大的網路性能支撐。通過高速的InfiniBand技術,將業務負載由單機運行轉化為基於多機協作的高性能計算集群,並使高性能集群的性能得以進一步釋放與優化。

GreatSQL是由萬里資料庫維護的國內自主MySQL分支版本,專註於提升MGR可靠性及性能,支持InnoDB並行查詢特性,適用於金融級應用。

此次通過對比測試基於InfiniBand 的 NVMe SSD池化方案 及本地NVMe SSD的傳統方案的性能表現,評估使用基於InfiniBand的存算分離架構對分散式資料庫性能的提升程度及擴展性。

經過雙方合作,通過大量數據分析,可以看出基於InfiniBand池化方案的存算分離架構的性能更優、穩定性更強,為GreatSQL實現更高性能的分散式部署提供了有力的技術平臺支撐。

1、NVIDIA InfiniBand 池化方案介紹

file

分散式資料庫集群由兩部分組成:

  1. 計算節點是無SSD盤的裸金屬伺服器,運行MySQL資料庫服務程式;

  2. 存儲節點提供NVMe SSD資源池,通過軟體聚合方式提供高性能Lun實現對於資料庫的數據的存儲服務;

兩部分伺服器通過Quantum 平臺的InfiniBand網路實現對計算節點和存儲節點的無損連接,結合NVMe-oF(NVMe over Fabric)高效的數據存儲傳輸協議,將存儲節點的Lun掛載到計算節點,實現結算節點本地高性能的數據存儲能力。

  1. 測試環境

為了可以公平對比兩種方案的優劣,兩次測試均採用同一臺計算伺服器進行測試,不同的是,本地方案存儲由本地的PCIe4.0 NVMe SSD承載,InfiniBand 池化方案由100Gbps速率的HDR100網卡接入,通過相同型號的NVMe SSD組成的全閃伺服器藉助NVMe-oF提供高性能虛擬Lun完成數據訪問。

2.1 存儲設備

本次測試主要採取兩種存儲方案:

  • InfiniBand + NVMe SSD設備

  • 本機掛NVMe SSD設備

$ nvme list
Node                  SN                   Model                                    Namespace Usage                      Format           FW Rev
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
# InfiniBand + NVMe SSD設備
/dev/nvme0n1          MNC12                Mellanox BlueField NVMe SNAP Controller  1           1.10  TB /   1.10  TB    512   B +  0 B   1.0

# 本機掛載的兩個NVMe SSD設備
/dev/nvme2n1          S5L9NE0NA00144       SAMSUNG MZWLJ7T6HALA-0007C               1           7.68  TB /   7.68  TB    512   B +  0 B   EPK99J5Q
/dev/nvme3n1          S5L9NE0NA00091       SAMSUNG MZWLJ7T6HALA-0007C   

2.2 CPU&記憶體

  • 記憶體:512GB

  • CPU,最多128核

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              128
On-line CPU(s) list: 0-127
Thread(s) per core:  2
Core(s) per socket:  32
Socket(s):           2
NUMA node(s):        1
Vendor ID:           AuthenticAMD
BIOS Vendor ID:      Advanced Micro Devices, Inc.
CPU family:          23
Model:               49
Model name:          AMD EPYC 7542 32-Core Processor
BIOS Model name:     AMD EPYC 7542 32-Core Processor
Stepping:            0
CPU MHz:             3381.667
CPU max MHz:         2900.0000
CPU min MHz:         1500.0000
BogoMIPS:            5799.52
Virtualization:      AMD-V
L1d cache:           32K
L1i cache:           32K
L2 cache:            512K
L3 cache:            16384K
NUMA node0 CPU(s):   0-127
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca

2.3 操作系統

OS:CentOS 8
內核:Linux g4 5.4.90-1.el8.x86_64 #1 SMP Fri Mar 11 10:11:26 UTC 2022 x86_64 x86_64 x86_64 GNU/Linu

文件系統

$ mount | grep xfs
LABEL=/nvme0 /nvme0    xfs     defaults,noatime,nodiratime,inode64 0 0
LABEL=/nvme2 /nvme2    xfs     defaults,noatime,nodiratime,inode64 0 0
LABEL=/nvme3 /nvme3    xfs     defaults,noatime,nodiratime,inode64 0 0

$ df -hT
/dev/nvme0n1   xfs       1.0T  247G  778G  25% /nvme0
/dev/nvme2n1   xfs       7.0T  1.1T  6.0T  15% /nvme2
/dev/nvme3n1   xfs       7.0T  245G  6.8T   4% /nvme3

2.4 壓測參數&指標

  • 壓測工具:sysbench

    • 模式:oltp_read_write。
    • 每輪壓測時長:900秒。
    • 每輪壓測休眠間隔:180秒。
  • 共64個表。

  • 每個表12500000條記錄。

  • 整個測試庫大小約186G。

  • 採用InnoDB引擎。

  • 併發線程數變化:8、16、32、64、128。

  • ibp(innodb buffer pool)變化:47G、93G、140G、186G(約為物理數據的25%、50%、75%、100%)。

  • 主要參數選項

sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_doublewrite_files = 2
innodb_io_capacity = 400000
innodb_io_capacity_max = 800000
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 0

sysbench測試命令模板:

$ sysbench oltp_read_write.lua \
  --tables=64 \
  --table_size=12500000\
  --report-interval=1 \
  --threads=128 \
  --rand-type=uniform \
  --db-ps-mode=disable \
  --mysql-ignore-errors=all \
  --time=900 run

3.性能表現&總結

3.1測試總結

結論先行,整體測試情況如下:

  1. 當ibp不足以覆蓋全部物理數據時:

    1)GreatSQL 8.x性能遠高於GreatSQL 5.7。

    2)併發線程數越高,IB+NVMe SSD vs 本地NVMe SSD 的差距越小。

    3) ibp越大,GreatSQL 5.7和8.0性能越接近。

  2. 當ibp基本可以覆蓋全部物理數據時:

    1) GreatSQL 5.7的性能整體比GreatSQL 8.0略好。

  3. 總的測試下來看,IB NVMe SSD 相比 本地NVMe SSD的性能更好,也更穩定一些。

  4. 嘗試對比測試了組提交(binlog group commit),在本案中對性能影響很小,這裡不再贅述。

  5. 嘗試對比設置 innodb_thread_concurrency = 64|128,發現加上後,在ibp足夠大,且併發也打滿128線程後,性能更穩定些,波動沒那麼大了,且最終整體性能也能提升約8% ~ 10%(不過也要考慮到,真實生產環境中,很少會跑滿這麼大壓力)。

  6. 總的來說,當物理記憶體不足以覆蓋業務數據時(生成環境中這種情況很常見),如果單靠增加物理記憶體以提升資料庫性能可能從性價比角度看並不划算,不如換個思路,提升本地物理I/O設備的性能,畢竟現在NVMe SSD的性能可以跑到很高。

3.2 測試數據對比圖表

1)ibp=47G

file
file

2)ibp=93G

file

file

3)ibp=140G

file

file
4)ibp=186G

file

file

4.結語

從以上測試數據中,可以明顯看到採用了InfiniBand池化方案資料庫性能在不同場景中性能都有不同程度的明顯提升,尤其在高併發場景下,表現突出。

未來,萬里資料庫將聯合NVIDIA在萬里資料庫GreatDB集中式及分散式資料庫產品中,探索更多基於InfiniBand在資料庫中的結合點和創新點,基於NVIDIA InfiniBand打造資料庫+網路軟硬一體化聯合解決方案,為用戶創造更多價值。

關於 GreatSQL

GreatSQL是由萬里資料庫維護的MySQL分支,專註於提升MGR可靠性及性能,支持InnoDB並行查詢特性,是適用於金融級應用的MySQL分支版本。

GreatSQL社區 Gitee GitHub Bilibili

GreatSQL社區

https://greatsql.cn/

技術交流群:

微信:掃碼添加GreatSQL社區助手微信好友,發送驗證信息加群

圖片


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:本文主要著重介紹資源池資源監控以及用戶資源監控。 本文分享自華為雲社區《GaussDB(DWS)資源監控之用戶、隊列資源監控》,作者: 一隻菜菜鳥。 GaussDB(DWS)資源監控功能包含實例資源監控、記憶體資源監控、資源池資源監控、查詢監控以及用戶資源監控,本文主要著重介紹資源池資源監控以及 ...
  • 1 背景 京東SRC(Security Response Center)收錄大量外部白帽子提交的sql註入漏洞,漏洞發生的原因多為sql語句拼接和Mybatis使用不當導致。 2 手工檢測 2.1 前置知識 mysql5.0以上版本中存在一個重要的系統資料庫information_schema,通過 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 cgroups 是Linux內核提供的可以限制進程所使用資源的機制,可以對 cpu,記憶體等資源實現精細化的控制. 什麼是cgroups 控制族群(cgr ...
  • 摘要:SPL實現了更優演算法,性能遠遠超過存儲過程,能顯著提高單機計算效率,非常適合跑批計算。 本文分享自華為雲社區《Java開源專業計算引擎:跑批真的這麼難嗎?》,作者: Java李楊勇。 業務系統產生的明細數據通常要經過加工處理,按照一定邏輯計算成需要的結果,用以支持企業的經營活動。這類數據加工任 ...
  • 在日常的數據分析中,經常會遇到一類問題:計算從某個時間點開始的累計數據,但在某些時間點又是沒有數據的,需得到的結果是每個時間點的累計數據。 比如以下情況,左邊是原始數據,右邊是期望輸出數據: 因為大部分資料庫不像其他編程語言,沒有函數式編程,不能直接for迴圈。如果支持游標迴圈,則比較容易實現。 下 ...
  • 一、困境頻生 前端代碼管理何解? 前端代碼管理一直是困擾不少前端開發團隊的難題,從開發到發佈的整體工作流程中,除了常規的技術問題外,往往還伴隨著溝通成本、維護成本及協作效率等問題。這些問題在團隊規模較小的時候可能不太明顯,但是當團隊規模變大時就矛盾越發凸顯。 數棧前端開發團隊負責著離線開發,實時開發 ...
  • 前面已經講了MySQL的其他查詢性能優化方式,沒看過可以去瞭解一下: MySQL查詢性能優化七種武器之索引潛水 MySQL查詢性能優化七種武器之鏈路追蹤 今天要講的是MySQL的另一種查詢性能優化方式 — 索引下推(Index Condition Pushdown,簡稱ICP),是MySQL5.6版... ...
  • RadonDB MySQL Kubernetes[1] 於近日正式發佈新版本 2.2.1[2]。該版本主要在用戶管理、高可用組件等進行了優化,並修複一些問題。 致謝 感謝 @runkecheng @acekingke @zhl003 @qianfen2021 @hayleyling 提交的修改。 新 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...