摘要:另外,結合技術與盤古存儲直接進行數據交換,達到接近于本地的時延和更高的吞吐,從而使得今年跨網絡的極低時延成為可能,為大規模存儲計算分離打下了堅強的基礎。為了避免擴容而帶來的數據遷移,結合底層盤古實現的在線。
一、2017年我們做了什么?
記得早在2017年的時候,王堅博士就曾召大家就關于“IDC As a Computer”是否能做到,進行過激烈的討論。而要做到此,必須要實現存儲計算分離,分離后由調度對計算和存儲資源進行獨立自由調度。而在實現存儲計算分離的所有業務中,數據庫是最難的。因為數據庫對I/O的時延和穩定性有著極高的要求。但是從業界來看,存儲計算分離又是一個未來的技術趨勢,因為像Google spanner以及Aurora都已經實現了。
所以2017年,我們抱著堅定的信念,去實現數據庫的存儲計算分離。事實上,2017年我們做到了,基于盤古和AliDFS(ceph分支) ,在張北單元存儲計算分離承擔10%的交易量。2017年是數據庫實現存儲計算分離的元年,為2018年大規模實現存儲計算分離打下了堅實的基礎。
二、2018技術突破?如果說2017年是數據庫實現存儲計算分離的突破之年的話,那么2018年就是追求極致性能的一年,也是由試驗走向大規模部署的一年,其技術的挑戰可想而知。在2017年的基礎上,2018年的挑戰更為巨大,需要讓存儲計算分離更加的高性能、普適、通用以及簡單。
2018年,為了使得在存儲計算分離下數據庫的I/O達到最高性能和吞吐,我們自研了用戶態集群文件系統DADI DBFS。我們通過將技術沉淀到DADI DBFS用戶態集群文件上,賦能集團數據庫交易全單元規模化存儲計算分離。那么成為存儲中臺級產品,DBFS又做了那些技術上的創新呢?
2.1 用戶態技術
2.1.1 “ZERO” copy
我們直接通過用戶態,旁路kernel,實現I/O路徑的“Zero”copy。避免了核內核外的copy,使得吞吐和性能都有了非常大的提高。
過去使用kernel態時,會有兩次數據copy,一次由業務的用戶態進程copy數據到核內,一次由核內copy到用戶態網絡轉發進程。這兩次copy會影響整體吞吐和時延。
切到純用戶態之后,我們使用polling模型進行I/O request請求的發送。另外對于polling mode下CPU的消耗,我們使用了adaptive sleep技術,使得空閑時,不會浪費core資源。
2.1.2 RDMA
另外,DBFS結合RDMA技術與盤古存儲直接進行數據交換,達到接近于本地SSD的時延和更高的吞吐,從而使得今年跨網絡的極低時延I/O成為可能,為大規模存儲計算分離打下了堅強的基礎。今年集團參加大促的RDMA集群,可以說是在規模上為業界最大的一個集群。
2.2 Page cache
為了實現buffer I/O的能力,我們多帶帶實現了page cache。Page cahce采用touch count based LRU算法實現。引入touch count的意義是為了更好的與數據庫的I/O特性結合。因為數據庫中時常會有大表掃描等行為,我們不希望這種使用頻率低的數據頁沖刷掉LRU的效率。我們會基于touch count將page在hot端和cool端進行移動。
Page cache的頁大小可配置,與數據庫的頁大小進行結合時,會發揮更好的cache效率。總體上DBFS的page cache具備以下的能力:
基于touch count進行page的冷熱端遷移
*?冷熱端比例可配置,目前為熱冷比例為2:8
*?page size可配置,結合數據庫頁進行最優化配置
多shard,提高并發;總體容量可配置
2.3 異步I/O
為了提高數據庫的I/O吞吐能力,大部分數據庫都使用了異步I/O。我們為了兼容上層數據庫的I/O特性,實現了異步I/O。異步I/O特性:
無鎖隊列實現
可配置的I/O depth,能夠使得針對數據庫不同的I/O類型進行精確時延控制
polling adaptive,減少CPU消耗
2.4 原子寫
為了保證數據庫頁寫出的時候不出現partial write,DBFS實現了原子寫功能。基于DBFS的Innodb,可以安全的將double write buffer關掉,從而使得在存計分離下數據庫帶寬節省100%。
另外,如PostgreSQL使用的是buffer I/O,也避免了PG在dirty page flush時偶發性遇到的缺頁問題。
2.5 Online Resize
為了避免擴容而帶來的數據遷移,DBFS結合底層盤古實現volume的在線resize。DBFS有自己的bitmap allocator,用于實現底層存儲空間的管理。我們對bitmap allocator進行了優化,在文件系統層級做到了lock free的resize,使得上層業務可以在任何時候進行對業務無損的高效擴容,完全優于傳統的ext4文件系統。
Online Resize的支持,避免了存儲空間的浪費,因為不用reserve如20%的存儲空間了,可以做到隨擴隨寫。
以下為擴容時的bitmap變化過程:
2.6 TCP與RDMA互切
RDMA在集團數據庫大規模的引入使用也是一個非常大的風險點,DBFS與盤古一起實現了RDMA與TCP互切的功能,并在全鏈路過程中進行了互換演練,使得RDMA的風險在可控的范圍內,穩定性保障更加完善。
另外,DBFS,盤古以及網絡團隊,針對RDMA進行了非常多的容量水位壓測,故障演練等工作,為業界最大規模RDMA上線做了非常充足的準備。
2.7 2018年大促部署
在做到了技術上的突破和攻關后,DBFS最終完成艱巨的任務通過大促全鏈路的考驗以及雙“十一”大考,再次驗證了存儲計算分離的可行性和整體技術趨勢。
三、存儲中臺利器DBFS除了以上做為文件系統必須實現的功能以外,DBFS還實現了諸多的特性,使得業務使用DBFS更加的通用化,更加易用性,更加穩定以及安全。
3.1 技術沉淀與賦能
我們將所有的技術創新和功能以產品的形式沉淀在DBFS中,使得DBFS能夠賦能更多的業務實現以用戶態的形式訪問不同的底層存儲介質,賦能更多數據庫實現存儲計算分離。
3.1.1 POSIX兼容
目前為了支撐數據庫業務,我們兼容了大多數常用的POSIX文件接口,以方便上層數據庫業務的對接。另外也實現了page cache,異步I/O以及原子寫等,為數據庫業務提供豐富的I/O能力。另外,我們也實現了glibc的接口,用于支持文件流的操作和處理。這兩種接口的支持,大大簡化了數據庫接入的復雜度,增加了DBFS易用性,使得DBFS可以支撐更多的數據庫業務。
posix部分大家比較熟悉就不再列出,以下僅為部分glibc接口供參考:
// glibc interfaceFILE fopen(constcharpath,constchar*mode);
FILE fdopen(int fildes,constcharmode);
size_t fread(voidptr, size_t size, size_t nmemb, FILE stream);
size_t fwrite(constvoidptr, size_t size, size_t nmemb, FILE stream);
intfflush(FILE *stream);
intfclose(FILE *stream);
intfileno(FILE *stream);
intfeof(FILE *stream);
intferror(FILE *stream);
voidclearerr(FILE *stream);
intfseeko(FILE *stream, off_t offset,int whence);
intfseek(FILE *stream,long offset,int whence);
off_t ftello(FILE *stream);
longftell(FILE *stream);
voidrewind(FILE *stream);
3.1.2 Fuse實現
另外,為了兼容Linux生態我們實現了fuse,打通VFS的交互。Fuse的引入使得用戶在不考慮極致性能的情況下,可以不需要任何代碼改動而接入DBFS,大大提高產品的易用性。另外,也大大方便了傳統的運維操作。
3.1.3 服務化能力
DBFS自研了shmQ組件,基于內享內存的IPC通信,從而拉通了對于PostgreSQL基于進程架構和MySQL基于線程架構的支持,使得DBFS更加的通用化和安全,為以后在線升級提供堅實的基礎。
shmQ基于無鎖實現,性能和吞吐表現優異,從目前測試來看,在16K等數據庫大頁下能控制在幾個us以內的訪問時延。服務化以及多進程架構的支持,目前性能與穩定性符合預期。
3.1.4 集群文件系統
集群功能是DBFS的又一大明顯特性,賦能數據庫基于shared-disk模式,實現計算資源的線性擴展,為業務節省存儲成本。另外,shared-disk的模式也為數據庫提供了快速的彈性能力,也大大提高了主備快速切換的SLA。集群文件系統提供一寫多讀以及多點寫入的能力,為數據庫shared-disk和shared nothing架構打下堅實的基礎。與傳統的OCFS相比,我們在用戶態實現,性能更好,更加自主可控。OCFS嚴重依賴于Linux的VFS,如沒有獨立的page cache等。
DBFS 支持一寫多讀模式時,提供多種角色可選(M/S),可以存在一個M節點多個S節點使用共享數據,M 節點和S節點共同訪問盤古數據。上層數據庫對M/S節點進行了限制,M節點的數據訪問是可讀可寫的,S節點的數據訪問是只讀的。如果主庫發生故障,就會進行切換。主從切換步驟:
業務監控指標探測發現M 節點出現無法訪問或者異常的時候,進行決策,是否要進行切換。
如果發生切換,由管控平臺發起切換命令,切換命令完成,代表DBFS和上層數據庫都已經完成角色切換。
在DBFS 切換的過程中,最主要的動作就是IO fence,禁止掉原本的M節點IO能力,防止雙寫情況。
DBFS在多點寫入時,對所有節點進行全局的metalock控制,blockgroup allocation優化等。另外也會涉及到基于disk的quorum算法等,內容比較復雜,暫不做詳細陳述。
3.2 軟硬件結合
隨著新存儲介質的出現,數據庫勢必需要借其發揮更好的性能或者更低成本優化,并且做到對底層存儲介質的自主可控。
從Intel對存儲介質的規劃來看,從性能到容量,會形成AEP,Optane和SSD這三種產品,而在向大容量方向上,又會有QLC的出現。所以綜合性能和成本來看,我們覺得Optane是一個比較不錯的cache產品。我們選擇它作為DBFS 機頭持久化filecache的實現。
3.2.1 持久化file cache
DBFS實現了基于Optane的local持久化cache功能,使得在存計分離下更近一步提升數據庫的讀寫性能。File cache為了達到生產可用性,做了非常多的工作,如:
穩定可靠的故障處理
支持動態enable和disable
支持負載均衡
支持性能指標采集和展示
支持數據正確性scrub
這些功能的支撐,為線上穩定性打下堅實的基礎。其中,針對Optane的I/O為SPDK的純用戶態技術,DBFS結合Fusion Engine的vhost實現。File Cache的頁大小可以根據上層數據庫的block大小進行最佳配置,以達到最好的效果。
以下為file cache的架構圖:
以下是測試所得讀寫性能收益數據:
其中帶有“cache”的為基于filecache所得。整體表現隨著命中率提高,讀時延開始下降。另外,我們針對file cache,進行了諸多性能指標的監控。
3.2.2 Open Channel SSD
X-Engine和DBFS以及Fusion Engine團隊展開合作,基于object SSD進一步打造存儲自主可控的系統。在降低SSD磨損,提高SSD吞吐,降低讀寫相互干擾等領域,進行了深度探索與實踐,都取得了非常不錯的效果。目前已經結合X-Engine的分層存儲策略,打通了讀寫路徑,我們期待下一步更加深入的智能化存儲研發。
四、總結與展望2018年DBFS已經大規模支持了X-DB以存儲計算分離形態支持“11.11”大促;與此同時也賦能ADS實現一寫多讀能力以及Tair等。
在支持業務的同時,DBFS本身已經拉通了PG進程與MySQL線程架構的支持,打通了VFS接口,做到了與Linux生態的兼容,成為真正意義上的存儲中臺級產品——集群用戶態文件系統。未來結合更多的軟硬件結合、分層存儲、NVMeoF等技術賦能更多的數據庫,實現其更大的價值。
本文作者:呂健
閱讀原文
本文來自云棲社區合作伙伴“阿里技術”,如需轉載請聯系原作者。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17839.html
摘要:另外,結合技術與盤古存儲直接進行數據交換,達到接近于本地的時延和更高的吞吐,從而使得今年跨網絡的極低時延成為可能,為大規模存儲計算分離打下了堅強的基礎。為了避免擴容而帶來的數據遷移,結合底層盤古實現的在線。 一、2017年我們做了什么? 記得早在2017年的時候,王堅博士就曾召大家就關于IDC As a Computer是否能做到,進行過激烈的討論。而要做到此,必須要實現存儲計算分離,...
摘要:江湖傳聞年,也就是比特幣創立初期,向中本聰發難,認為必須改變比特幣的共識機制并提出改進方案。至此,單純的機制已無完備性可言,也背離了中本聰的設計初衷。理想終將照進現實,算法也終將回歸本來之美。 江湖傳聞:2010年,也就是比特幣創立初期,BM向中本聰發難,認為必須改變比特幣的共識機制并提出改進方案。不過,傲嬌的中本聰本尊并沒有采納,他在強調了比特幣去中心化的重要性和必要性之后,霸氣回應...
由于容器虛擬化技術可以充分利用硬件資源,對于開發團隊就像夢想照進了現實。盡管容器化沒有推翻虛擬機在企業應用開發和部署上的地位,但是Docker等工具在實現開發、測試和部署大規模現代軟件的速度和敏捷性方面大展身手。Docker容器具有諸多優點:無需復雜的hypervisor、可移植性、資源隔離性、輕量級、開放標準、完美適應微服務架構。眾多的應用通過容器隔離起來,相互獨立地運行在同一臺宿主機上,哪家公...
摘要:碼君必須在此強調,勞動法中沒有任何一條規定,示意過上班看手機是可以被開除的。吐槽歸吐槽,碼君也不禁在想,到底是出于何種心態,能讓這些管理層設立出如此罔顧現實的規定。 ...
摘要:先不閑聊,今天說說年剛剛讀完的第二本書,其實還不算書吧,應該是繪本,幾米繪本其中的一個小作品我的心中每天開出一朵花。希望你在你的程序人生中,能將一個美好的有效期限增大,這取決于你對他的期望值,還有就是去發現屬于你的美好。 本博客 貓叔的博客,轉載請申明出處 前言 3月到的時候,我的腦子中都是各種雜七雜八的預想,關于工作、生活、情感、現實等等,甚至都沒來的及準備一下,2019年就已經過了...
閱讀 1701·2021-11-25 09:43
閱讀 2665·2019-08-30 15:53
閱讀 1807·2019-08-30 15:52
閱讀 2897·2019-08-29 13:56
閱讀 3316·2019-08-26 12:12
閱讀 565·2019-08-23 17:58
閱讀 2126·2019-08-23 16:59
閱讀 931·2019-08-23 16:21