阿里云OSS性能與擴展性最佳實踐,阿里云centos系統服務器搭建阿里云OSS性能與擴展性最佳實踐如果您在上傳大量文件時,在命名上使用了順序前綴(如時間戳或字母順序),可能會出現大量文件索引集中存儲于存儲空間中的某個特定分區的情況。此時如果您的請求次數過多,會導致請求速率下降。出現這種問題時,建議您為Object的名稱......
如果您在上傳大量文件時,在命名上使用了順序前綴(如時間戳或字母順序),可能會出現大量文件索引集中存儲于存儲空間中的某個特定分區的情況。此時如果您的請求次數過多,會導致請求速率下降。出現這種問題時,建議您為Object的名稱增加隨機前綴。
背景信息
OSS按照文件名UTF8編碼的順序對用戶數據進行自動分區,從而能夠處理海量文件,以及承載高速率的客戶請求。不過,如果您在上傳大量文件時,在命名上使用了順序前綴(如時間戳或字母順序),可能會導致大量文件索引集中存儲于某個特定分區。當您的請求速率超過2000次/秒時(下載、上傳、刪除、拷貝、獲取元數據信息等操作算1次操作,批量刪除N個文件、列舉N個文件等操作算N次操作),會帶來如下后果:
該分區成為熱點分區,導致分區的I/O能力被耗盡,或被系統自動限制請求速率。
熱點分區的存在會觸發系統進行持續的分區數據再均衡,這個過程可能會延長請求處理時間。
說明分區數據再均衡是依賴于對當前系統狀態、處理能力等信息做各種智能分析后進行的,并不是某個固定的拆分規則。所以分區數據再均衡后,使用了順序前綴的文件可能還會處于高熱點的分區當中。
以上情況會降低OSS的水平擴展效果,導致客戶的請求速率受限。
要解決這個問題,就要消除文件名中的順序前綴。您可以在文件名前綴中引入某種隨機性,這樣文件索引(以及I/O負載)就會均勻分布在多個分區。
解決方案
下面提供了兩個將順序前綴改為隨機性前綴的方法。
向文件名添加十六進制哈希前綴
如下所示,若您使用日期與客戶ID生成文件名,則會包含順序時間戳前綴:
samplebucket01/201711/customer/file1
samplebucket01/201711/customer2/file2
samplebucket01/201711/customer3/file3
...
samplebucket01/201712/customer2/file4
samplebucket01/201712/customer5/file5
samplebucket01/201712/customer7/file6
...
針對這種情況,您可以對客戶ID計算哈希(即MD5),并取若干字符的哈希前綴作為文件名的前綴。假如取4個字符的哈希前綴,結果如下:
samplebucket01/2c99/201711/customer/file1
samplebucket01/7a01/201711/customer2/file2
samplebucket01/1dbd/201711/customer3/file3
...
samplebucket01/7a01/201712/customer2/file4
samplebucket01/b1fc/201712/customer5/file5
samplebucket01/2bb7/201712/customer7/file6
...
加入4個字符組成的十六進制哈希作為前綴,則每個字符有0~9以及a~f共16種取值,4個字符共有16 4=65536種可能的字符組合。那么在存儲系統中,這些數據理論上會被持續劃分至最多65536個分區,以每個分區操作2000次/秒的性能瓶頸標準,再結合您業務的請求速率,可以評估hash桶的個數是否合適。
如果您想要列出文件名中帶有特定日期的文件,例如列出samplebucket01里帶有201711的文件,您只要對samplebucket01進行列舉(即通過多次調用ListObject接口,分批次地獲得samplebucket01下的所有文件),然后合并帶有該日期的文件即可。
反轉文件名
如下所示,若您使用了毫秒精度的Unix時間戳生成文件名,同樣屬于順序前綴:
samplebucket02/1513160001245.log
samplebucket02/1513160001722.log
samplebucket02/1513160001836.log
samplebucket02/1513160001956.log
...
samplebucket02/1513160002153.log
samplebucket02/1513160002556.log
samplebucket02/1513160002859.log
...
這種情況可以考慮通過反轉時間戳前綴來避免文件名包含順序前綴,反轉后結果如下:
samplebucket02/5421000613151.log
samplebucket02/2271000613151.log
samplebucket02/6381000613151.log
samplebucket02/6591000613151.log
...
samplebucket02/3512000613151.log
samplebucket02/6552000613151.log
samplebucket02/9582000613151.log
...
由于文件名中的前3位數字代表毫秒時間,會有1000種取值。而第4位數字,每1秒鐘就會改變一次。同理第5位數字每10秒鐘就會改變一次。以此類推,反轉文件名后,極大地增強了前綴的隨機性,從而將負載壓力均勻地分攤在各個分區上,避免出現性能瓶頸。
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部