自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

沙場秋點(diǎn)兵——MySQL容器化性能測試對比

企業(yè)動態(tài)
直接使用物理SSD時,由于是進(jìn)行本地SSD讀寫,延時很低;且MySQL應(yīng)用為了確保其操作的順序性,主要是采用有限線程低并發(fā)進(jìn)行順序追加寫

   容器技術(shù)改變了應(yīng)用交付、運(yùn)行的方式,幾乎各種Linux環(huán)境下的應(yīng)用程序都可以使用容器來運(yùn)行。但是否能在容器環(huán)境里運(yùn)行數(shù)據(jù)庫應(yīng)用,以及數(shù)據(jù)庫應(yīng)用是否適合在容器里運(yùn)行,一直都是大家很關(guān)注的問題,今天我們就來深入分析一下容器環(huán)境運(yùn)行MySQL數(shù)據(jù)庫的事。

  在容器中運(yùn)行數(shù)據(jù)庫,能幫助用戶提高服務(wù)器利用效率,降低基礎(chǔ)架構(gòu)成本,更快速地部署、更便捷地管理數(shù)據(jù)庫服務(wù)。

  根據(jù)云監(jiān)控供應(yīng)商Datadog的調(diào)查報告, Postgres、MongoDB和MySQL等數(shù)據(jù)庫技術(shù)都位于容器上運(yùn)行的十大技術(shù)之中——并且使用量還在增長。

  

 

  MySQL容器化需要容器存儲的有力支持

  數(shù)據(jù)庫實(shí)際上由兩大組件組成:讀取、寫入和查詢數(shù)據(jù)的應(yīng)用,以及數(shù)據(jù)存儲,我們通常稱之為數(shù)據(jù)卷。MySQL等數(shù)據(jù)庫應(yīng)用所需的計算資源完全可以通過容器技術(shù)提供,是否能流暢運(yùn)行MySQL數(shù)據(jù)庫的關(guān)鍵在于容器存儲方案。國內(nèi)大多數(shù)用戶在選擇容器存儲時,通常有以下幾種方案:

  l 新版本的Kubernetes可以支持塊設(shè)備掛載至容器內(nèi)部(該塊設(shè)備可以來自服務(wù)器的物理磁盤,也可以來自傳統(tǒng)的SAN陣列)

  l 通過Ceph提供的CSI插件使用CephRBD或者CephFS

  l 使用焱融云的YRCloudFile提供的容器存儲

  大多數(shù)客戶對容器存儲的以下幾點(diǎn)尤為關(guān)注:

  l 數(shù)據(jù)可靠性

  l 是否能通過容器編排平臺快速完成存儲資源的生命周期管理(創(chuàng)建、擴(kuò)容、刪除和回收等)

  l MySQL在容器化環(huán)境中的容災(zāi)備份

  l MySQL容器故障后,在新節(jié)點(diǎn)重新啟動,其數(shù)據(jù)是否能快速訪問

  l MySQL使用容器存儲的實(shí)際性能如何,是否能滿足業(yè)務(wù)需求

  關(guān)于用戶關(guān)注的上述特性,我們在之前的文章中都有過介紹,在以后的文章里也會進(jìn)一步描述。本文針對用戶最關(guān)注的,MySQL基于不同存儲的實(shí)際性能進(jìn)行了實(shí)際測試和對比。

  MySQL存儲引擎和數(shù)據(jù)寫入策略

  在介紹實(shí)際測試性能之前,有必要介紹一下MySQL數(shù)據(jù)庫的存儲引擎,以及相關(guān)的寫入策略,這對于數(shù)據(jù)庫的實(shí)際使用性能有非常關(guān)鍵的影響。

  MySQL存儲引擎

  MySQL數(shù)據(jù)庫提供插件式的存儲引擎,這個存儲引擎提供了一系列標(biāo)準(zhǔn)的管理和數(shù)據(jù)讀寫服務(wù)的支持,不同的存儲引擎有不同的特點(diǎn),存儲引擎對于業(yè)務(wù)開發(fā)人員而言是透明的。其中,InnoDB是著名的第三方存儲引擎,后被Oracle收購,是MySQL數(shù)據(jù)庫OLTP(Online Transaction Processing,在線事務(wù)處理)應(yīng)用中使用最廣的存儲引擎,也是5.5.8版本后,MySQL默認(rèn)的存儲引擎,以下的測試就基于InnoDB存儲引擎進(jìn)行。

  InnoDB刷數(shù)據(jù)策略

  InnoDB中有一項(xiàng)設(shè)置——innodb_flush_method,這項(xiàng)設(shè)置負(fù)責(zé)控制InnoDB刷數(shù)據(jù)時所使用的系統(tǒng)調(diào)用。所謂刷數(shù)據(jù),即將緩存在內(nèi)存中或臨時磁盤存儲區(qū)域中的數(shù)據(jù)寫入特定的日志及數(shù)據(jù)文件(log,如ib_logfile和數(shù)據(jù)庫data file),完成持久化。

  刷數(shù)據(jù)動作可能是因?yàn)閮?nèi)存區(qū)域已滿并且系統(tǒng)需要釋放一些空間而觸發(fā),或是因?yàn)槭聞?wù)完成更改的commit操作而觸發(fā),或者由需要終結(jié)所有未完成工作的關(guān)閉操作而觸發(fā)。

  innodb_flush_method的值對應(yīng)著不同的系統(tǒng)調(diào)用,從而會觸發(fā)不同的系統(tǒng)行為,經(jīng)常使用的值包括:

  l fsync:InnoDB使用fsync()系統(tǒng)調(diào)用將MySQL的數(shù)據(jù)和日志文件都刷到持久化存儲中,fsync是InnoDB的模式設(shè)置。

  l O_DIRECT:InnoDB使用O_DIRECT標(biāo)識打開MySQL的數(shù)據(jù)文件,意味著MySQL數(shù)據(jù)將繞過pagecache,直接寫入磁盤,并使用fsync()系統(tǒng)調(diào)用將MySQL數(shù)據(jù)和日志文件的元數(shù)據(jù)信息更新刷入磁盤。

  l O_DIRECT_NO_FSYNC:只使用O_DIRECT方式,繞過pagecache,將數(shù)據(jù)直接寫入磁盤,并在寫操作時跳過fsync()更新日志的元數(shù)據(jù)信息。在8.0.14版本之后, MySQL會在創(chuàng)建文件、增加文件長度以及關(guān)閉文件時自動調(diào)用fsync()來更新MySQL文件在文件系統(tǒng)中的元數(shù)據(jù)信息。

  YRCloudFile可以支持這種刷數(shù)據(jù)方式,即可以很好地確保每個數(shù)據(jù)都直接落盤,同時減少頻繁調(diào)用fsync帶來的開銷,極大提升性能。

  

 

  sysbench性能對比測試

  在下面進(jìn)行的性能對比的測試中,我們在MySQL容器中使用了以下幾種存儲方案進(jìn)行對比:

  l 將本地物理SSD盤掛載到MySQL容器中

  l 將基于RoCE(RDMA over Converged Ethernet)的YRCloudFile集群中的PV掛載到MySQL容器中

  l 將基于TCP的YRCloudFile集群中的PV掛載到MySQL容器中

  l 將CephRDB的PV掛載到MySQL容器中

  l 將CephFS的PV掛載到容器中

  除物理SSD盤外,YRCloudFile和Ceph集群都采用以下四臺相同的物理服務(wù)器進(jìn)行搭建:

  l CPU:Intel 4112 * 2

  l 內(nèi)存:64GB

  l 系統(tǒng)盤:240GB * 2

  l 元數(shù)據(jù)盤:960GB SSD * 2(CephRBD時不需要元數(shù)據(jù)盤)

  l 緩存盤:960GB SSD * 2

  l 數(shù)據(jù)盤:4TB SATA * 2

  l 管理網(wǎng)絡(luò):1Gb * 2

  l 存儲網(wǎng)絡(luò):10Gb * 2

  MySQL版本為8.0.14,使用InnoDB作為存儲引擎,innodb_flush_method設(shè)為O_DIRECT_NO_FSYNC ;Ceph版本為mimic,Ceph基于filestore;sysbench版本為1.0.17,基于50個表,每個表中包含100萬條數(shù)據(jù)的數(shù)據(jù)庫進(jìn)行oltp_write_only和oltp_read_write測試。

  測試結(jié)果如下:

  

 

  

 

  從測試結(jié)果看:

  l 直接使用物理SSD時,由于是進(jìn)行本地SSD讀寫,延時很低;且MySQL應(yīng)用為了確保其操作的順序性,主要是采用有限線程低并發(fā)進(jìn)行順序追加寫,延時性能決定了單個MySQL的整體性能,因此無論YRCloudFile還是Ceph存儲集群對單個MySQL實(shí)例而言,會受到延時影響,性能不如本地SSD盤。

  l 另一方面,我們看到基于RoCE的YRCloudFile的性能已經(jīng)接近本地SSD盤,基于TCP的YRCloudFile集群所提供的性能略低于RoCE的性能。

  l 基于RoCE的YRCloudFile性能高于基于TCP的YRCloudFile性能,是CephRBD或CephFS性能的將近一倍。這是因?yàn)椋?)YRCloudFile集群的元數(shù)據(jù)保存在本地SSD,相對于CephFS的元數(shù)據(jù)保存在RADOS中而言,其元數(shù)據(jù)讀延時明顯低于CephFS;2)基于RDMA的YRCloudFile繞過了系統(tǒng)內(nèi)核,直接訪問集群中的磁盤數(shù)據(jù),進(jìn)一步降低了延遲。

  也許有讀者會問,從單個MySQL實(shí)例的測試性能看,YRCloudFile分布式存儲系統(tǒng)的優(yōu)勢如何體現(xiàn)呢?通過使用YRCloudFile,可以充分發(fā)揮集群中所有磁盤的性能,使整個集群支持更多的MySQL實(shí)例,而單塊SSD盤的性能可以支撐的MySQL實(shí)例就有限得多了。此外,YRCloudFile也正在通過硬件offload,NVMe優(yōu)化等方式,進(jìn)一步縮短集群IO的延時,使集群IO的延時盡可能接近本地SSD的延時,從而使單MySQL實(shí)例的性能更加接近使用本地SSD運(yùn)行MySQL的性能。

  在這篇文章中,我們介紹了如何通過設(shè)置MySQL InnoDB的innodb_flush_method參數(shù),使用YRCloudFile獲得很好的MySQL運(yùn)行性能,并對比了在同等環(huán)境下,使用SSD、CephRBD、CephFS所獲得的性能。在后續(xù)文章里,我們還會分享更多基于YRCloudFile運(yùn)行各種中間件應(yīng)用的很好實(shí)踐,以及相關(guān)的技術(shù)細(xì)節(jié)。

責(zé)任編輯:張誠 來源: 51CTO
相關(guān)推薦

2009-02-24 09:18:00

2013-11-21 17:40:25

OA

2009-09-17 15:39:56

C#數(shù)組初始化

2013-11-28 16:52:46

華為RH5885VMmark

2009-08-18 14:14:45

C#擴(kuò)展方法性能測試

2014-10-23 16:22:05

華為

2012-06-13 09:35:41

存儲虛擬化

2010-01-16 11:02:12

Ubuntu性能測試

2017-08-22 10:52:35

容器DockerLinux

2011-12-06 10:00:52

Ubuntu性能測試

2009-07-24 13:17:43

世紀(jì)互聯(lián)至強(qiáng)CloudEx

2013-12-25 10:32:41

MySQL性能測試

2010-05-27 12:58:16

MySQL性能測試

2022-05-30 10:28:04

FlatBuffer數(shù)據(jù)可視化

2013-05-21 10:56:11

Hyper-V 3.0虛擬化

2009-04-16 17:24:54

性能優(yōu)化SQL Server 數(shù)據(jù)收集

2010-03-19 09:31:52

虛擬化性能

2009-03-28 16:56:55

NehalemIntel服務(wù)器

2011-09-14 09:42:17

虛擬化ROI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號