以鍵值對(Key-Value,簡稱KV)作為數據的存儲方式,已經在很多場合得到了成功的應用。KV存儲以其直觀性,降低了很多應用程序調用數據的復雜度,可以獲得更高數據的存取效率,但也有其局限性。寶存科技的Open-Channel SSD 定義了一種通用的,高效率的主機端直接訪問 FLASH 的標準接口,百度基于此開發出一套高性能KV存儲引擎,有效減少寫放大對設備性能的影響。
當前KV的不足之處
目前KV的成熟應用場合有:
內存數據庫及其持久化,如Redis、Pika;
分布式文件存儲系統底層存儲接口,如Ceph中使用Bluestore;
關系數據庫存儲引擎,如MySQL中的MyRocks引擎。
由于單機內存總量的限制,內存KV有持久化到硬盤的需求,而基于硬盤的KV數據庫多使用LSM Tree的方式在文件系統中實現(如RocksDB),在實際應用中會出現以下問題:
極高的寫放大。由于WAL的機制,一份數據落盤即出現“雙寫”的效果,產生1倍寫放大。WAL(Write-ahead logging)記錄了數據持久寫入DB之前的變更,是傳統數據庫保證數據安全性的必要動作。由于compaction機制的存在,新數據的寫入會導致舊數據被反復合并,最終一份數據的寫入實際會造成2倍以上的寫入量。業界存儲設備已經全面轉向SSD,而SSD的壽命是有限的,類似RocksDB的KV數據庫在SSD上會將SSD的預期壽命大幅縮短到原本的三分之一。
緩存未命中時的讀放大。傳統KV數據庫將數據按冷熱分層存儲,在讀取時分層檢索。如果讀取的數據沒有在緩存中,那么至少需要一次硬盤讀取操作,多則需要5次以上讀盤操作才能取到數據。
與設備性能不匹配的業務性能。對于單個硬盤來講,其總的IO能力是有限的,有限的IO能力被應用IO和KV數據庫的compaction共同占用。由于compaction同時占用硬盤的讀寫帶寬,大量的compaction操作使得上層業務可得的IO能力被大幅擠壓。
極低的空間使用率。以上情形同時存在,整個存儲設備一直處在compaction操作和compaction觸發之前有大量失效數據未標記的情況下,此時如果有一定的業務性能要求,用戶將不得不使用空間換性能,存儲設備內的有效數據總量相對設備的實際容量比例必然過小。
盡管很多業務已經從KV的使用中受益,但當前KV的不足限制了KV本該發揮的作用。
百度在Open-Channel SSD上的KV實現
搜索引擎及相關業務對KV有很強的需求。結合對KV的深入理解以及SSD的發展方向,百度選擇在Open-Channel SSD平臺上實現一套高性能KV,以移除當前KV存在的不足,充分發揮KV在SSD上應有的性能。
Open-Channel SSD是白盒化的NVMe SSD。SSD的底層介質NAND Flash具有先擦后寫、壽命有限的特點,因此將NAND Flash組織成主機可見的硬盤需要實現地址映射、垃圾回收、磨損均衡、錯誤處理等主要邏輯。Open-Channel SSD將實現這些邏輯的基本接口傳遞到主機層,用戶可以將業務邏輯和SSD邏輯結合實現,使用軟硬件深度捆綁優化的方式實現同樣硬件上的收益大幅度提升。
在百度的Open-Channel KV實現中,SSD不再以塊設備形式存在,而是以KV服務的形式呈現給上層業務,KV邏輯向上層提供KV接口。KV接口接收到的鍵值對將被一步寫到物理介質NAND的某個地址上并在內存中記錄映射關系,無需經過文件系統/虛擬內存/塊設備的層層轉換,讀取時同理。數據的傳輸獲得的是軟件層面最短的路徑,因而延遲大幅度縮短。
按照這種方法實現的KV可以解決傳統KV存在的問題:
極小的寫放大。如同寫入傳統SSD時SSD內部邏輯的動作一樣,每一個新的鍵值對永遠寫在新的物理地址上,舊值自然失效。由于沒有文件系統,從SSD角度等效OP會變得非常大,垃圾回收線程總是可以找到全臟或接近全臟的塊進行回收,實際寫放大僅為1.05。
沒有讀放大。所有key都可以在內存中找到,key中包含了value的物理地址,讀取任何值都只需要一次讀盤。
充分使用硬件性能。由于沒有compaction操作存在,SSD的所有性能都用于實際的業務讀寫,使得可用帶寬大幅提高。Open-Channel KV較原有方案的可用帶寬提高一倍。
巨幅提升的QoS水平。由于寫操作的重復機制和讀操作的等待機制被去除,QoS水平得到極大優化。
更高的空間使用率。業務對單盤輸出能力有極高的要求,原方案下滿足業務要求的性能時,SSD實際存儲的有效數據量僅占盤容量的30%,剩余空間被無效數據占據或存入數據也沒有額外的帶寬用于業務IO。Open-Channel KV方案在保證輸出能力的情況下,將單盤實際有效數據量提升到盤容量的70%。
性能對比實測:
Open-Channel平臺提供的助力
Open-Channel SSD作為軟硬件優化的基礎,目前已經有穩定的開發平臺,Linux內核也已內置支持。百度Open-Channel KV使用的硬件平臺具有以下特點:
使用標準NVMe控制芯片,定制化Open-Channel固件。硬件無需定制,作為客戶可以獲得標準品的供貨優勢。
高效的讀/寫/擦接口,完備的錯誤回報機制。開發端可以獲得硬件的極限性能和對硬件的完全控制。
Controller Memory Buffer(CMB)。CMB作為無掉電風險的高速緩沖區可以用在很多方面實現應用加速和優化,如 存放log避免雙寫、合并小value寫入避免塊設備模式每一筆IO都必須按block size下發產生的寫放大和寫延遲。使用CMB后,小于4k byte的KV寫入獲得數倍性能提升。
自動數據保護。企業級SSD產品除NAND ECC外,還需要page/block層面的保護。當前Open-Channel平臺提供底層自動數據保護功能,開發端只需要關注業務邏輯的編程即可。
評論
查看更多