![]()
作者 | Renato Losio
譯者 | 田橙
Dropbox 近日介紹了其如何通過重新設計壓縮策略,提高 Magic Pocket 的存儲效率。Magic Pocket 是公司用于大規模存儲用戶文件的內部不可變對象存儲系統。新的方案會定期將有效數據重新組織到新的存儲卷中,從而釋放并復用那些部分占用的舊卷空間。
正如在《Increasing Magic Pocket write throughput by removing our SSD cache disks》一文中所述,Dropbox 去年引入了一項新服務,改變了數據在該不可變對象存儲中的分布方式,從而降低了后臺寫入的寫放大。但這一變化也帶來了一個非預期結果:數據碎片化增加。
Dropbox 的后端將文件拆分為小對象,分布存儲在不同服務器上,并將數據視為不可變。雖然這種設計提升了可靠性,但在文件更新或刪除時,舊數據無法立即移除。Dropbox 的資深軟件工程師 Facundo Agriel 解釋道:
由于數據是不可變的,刪除操作不會立即釋放磁盤空間。舊數據仍然保留在存儲卷中。一旦一個卷被關閉,就不會再被重新打開。這種權衡帶來的結果是,刪除會留下未使用空間,如果不主動回收,這些浪費會隨著時間不斷累積。若缺乏回收機制,存儲卷會逐漸變為部分填充狀態,使有效數據分散在更多磁盤上。由此產生的碎片化會顯著增加存儲開銷。
今年早些時候,Dropbox 發現一個名為“Live Coder”的新服務生成了大量嚴重未填滿的存儲卷,有些卷的使用率甚至低于 5%。這使得數據分散在大量幾乎空置的卷中,進一步加劇了碎片化和存儲開銷,同時也暴露了現有壓縮系統的局限。
Dropbox 早期的壓縮策略在大多數存儲卷接近滿載時運行良好,但當大量卷嚴重未填滿時,其效率顯著下降。為了解決這一問題,Dropbox 重新設計了負責空間回收的系統。更新后的方案優先處理效率最低的存儲卷,并更加精細地管理清理任務,以避免對系統資源造成壓力。Agriel 補充道:
壓縮過程負責執行物理層面的空間回收。由于卷在關閉后無法修改,我們會從這些卷中收集仍然有效的數據塊(blob),將其寫入新的卷,并淘汰舊卷。這就是刪除最終轉化為可復用空間的方式。
新的壓縮策略被稱為 L2,當大量存儲卷處于低填充狀態時,它可以更快地回收空間。與之前逐步填滿已有高密度卷的方法不同,L2 會將多個稀疏卷合并為一個接近滿載的卷,從而加快空間回收速度。
![]()
Dropbox Magic Pocket
Dropbox 還引入了第三種壓縮策略 L3,用于處理那些極度未填滿、此前方法難以高效回收的存儲卷。該策略通過 Live Coder 服務,將這些稀疏卷中剩余的有效數據流式遷移,并逐步重寫到新的糾刪碼(erasure-coded)卷中。
在 Dropbox 的不可變存儲系統中,壓縮通過將有效數據重寫到新卷并淘汰舊卷來回收磁盤空間,而糾刪碼則通過將數據拆分為多個片段并附加校驗塊來防止硬件故障,在部分數據丟失時仍可恢復。
在 Hacker News 的討論中,一些用戶質疑該產品的可用性(“如此出色的工程工作卻被一個問題重重的產品所掩蓋”)以及其定價,也有人對大型公司中所謂“非預期后果”的說法提出疑問。用戶 nopurpose 寫道:
我原以為這種體量的公司,在動這種會影響巨額基礎設施成本的改動前,都會拿生產數據反復建模推演……結果發現也差不多:先發了再說,看看哪兒先炸。
Agriel 在討論中回應稱,大規模系統的運行往往是緩慢且不均勻的,這使得基礎設施變更帶來的影響難以及時察覺。
正如 InfoQ 此前報道,Magic Pocket 是 Dropbox 自研的對象存儲系統,具備橫向擴展能力,可支持 EB 級規模,已替代 Amazon S3,提供 99.99% 的可用性和極高的數據持久性。Agriel 曾在 QCon Plus 2023 上介紹過 Magic Pocket 的實現。
https://www.infoq.com/news/2026/04/dropbox-tiered-compaction/
聲明:本文由 InfoQ 翻譯,未經許可禁止轉載。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.