S3P 提供了一種在大型 AWS S3 儲存桶上複製、列出、同步和執行其他批次操作的極為快速的方法。
您可以將其用作常見操作的命令列工具,也可以將其用作幾乎任何您能想像到的內容的庫。
S3 的 API 的結構圍繞著連續列出項目 - 請求 1000 個項目,等待,然後請求下一個 1000 個。然而,S3P 可以並行列出項目。它利用 S3 的能力來請求等於或在給定密鑰之後的前 1000 個項目。然後,借助二分演算法和一些智慧啟發式方法,S3P 可以以任意平行度掃描儲存桶的內容。實際上,S3P 列出儲存桶的速度比傳統方法快 20 倍。
S3P 其實只是一個奇特、非常快速的 S3 列表工具。 S3P 的核心能力大大提高了匯總、複製和同步的能力,可以從根本上更快地列出物件。
我們使用單一 EC2 執行個體運行 S3P,在同一區域的兩個儲存桶之間保持高達8GB/秒的複製速度。
在 Medium 上閱讀有關 S3P 的更多資訊。
NodeJS
AWS-CLI
複製大檔案需要aws-cli
。預設情況下,使用aws-cli
複製大於 100 MB 的檔案。這是性能方面的一個很好的折衷方案。但是,您可以使用--large-copy-threshold
選項將該閾值變更為 5 GB。
為什麼?如果沒有更複雜的解決方案,
aws-sdk
不支援處理大於 5 GB 的檔案。
鍵名必須使用有限的字元集:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
為什麼?由於 Aws-S3 不支援按降序列出鍵,因此 S3P 使用基於字元範圍的分而治之演算法。
s3p 使用與 aws-cli 相同的憑證,因此請參閱他們的文件:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
無需直接安裝s3p。只要安裝了 NodeJS,就可以直接使用npx
執行 s3p 。
內建幫助詳細介紹了所有命令、選項,並提供了許多範例:
# list commands and get overall help
npx s3p help
使用--help
選項來取得每個指令的詳細協助和範例:
# get specific command help and example uses
npx s3p cp --help
您也可以在本地安裝 s3p,這將使其運行得更快。
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
除了效能之外,S3P 還提供靈活的自訂清單、複製和比較選項:
令人驚訝的是,您甚至不需要在雲端中運行 S3P 就能看到它的許多好處。您可以在本機電腦上執行它,並且由於 S3 複製從不直接通過 S3P,因此它不會佔用任何 AWS 頻寬。
S3-bucket-listing 效能幾乎可以達到20,000每秒 50,000 個項目(截至 S3Pv3.5)。
S3 儲存桶複製效能可以超過每秒 8 GB。
是的,我已經看到每秒 9 GB 的持續速度!這是在平均檔案大小略大於 100 MB 的儲存桶上。 S3P 在單一 c5.2xlarge 實例上運行。相比之下,我從未見過 aws-s3-cp 的速度超過 150mB/s。速度快了 53 倍以上。
平均檔案大小對 s3p 的整體每秒位元組數有很大影響:
地點 | 命令 | AWS CLI | s3p | 加速 | 平均尺寸 |
---|---|---|---|---|---|
當地的 | LS | 2500 條/秒 | 50000 條/秒 | 20倍 | 不適用 |
當地的 | CP | 30 兆位元組/秒 | 150 兆位元組/秒 | 5x | 512 KB |
EC2 | CP | 150 兆位元組/秒 | 8GB/秒 | 54x | 100 兆位元組 |
S3P 的開發目的是在包含數百萬個項目和數百 TB 的儲存桶上運行。目前,S3P仍然只是單核NodeJS應用程式。透過分叉工作器甚至使用 Elastic-Queue 之類的工具在實例之間分配工作,可以實現更大規模的平行 S3 操作。如果有人需要比 aws-cli 快 100-1000 倍的解決方案,請告訴我們。我們很樂意與您合作。
[email protected]
所有文件都嵌入在 CLI 幫助頁面中。使用:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
CLI 的所有功能也可以作為 API 提供。要了解 API,請先了解 CLI 選項,然後,要了解特定 CLI 命令的 API 調用,請使用--api-example
選項在命令列上執行該命令。這將輸出用於以程式設計方式呼叫該命令的範例 JavaScript 程式碼。
注意:當您在命令列上使用
--api-example
時,您的命令實際上不會運行。 S3P 只會將與 CLI 指令等效的 JavaScript 輸出到控制台,然後退出。
跑步:
> npx s3p ls --bucket foo --quiet --api-example
輸出:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
測試運行:
> node
貼:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
輸出:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P最初由GenUI.com與Resolution Bioscience, Inc.共同開發。
GenUI 是一家位於西雅圖的技術商業化軟體諮詢公司。我們加速軟體路線圖。請隨時聯繫 GenUI 並告訴我們您的專案。我們很樂意聽取您的意見。