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