Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik terbaik untuk mengoptimalkan kinerja S3 Express One Zone
Saat membangun aplikasi yang mengunggah dan mengambil objek dari Amazon S3 Express One Zone, ikuti panduan praktik terbaik kami untuk mengoptimalkan kinerja. Untuk menggunakan kelas penyimpanan S3 Express One Zone, Anda harus membuat bucket direktori S3. Kelas penyimpanan S3 Express One Zone tidak didukung untuk digunakan dengan bucket tujuan umum S3.
Untuk panduan kinerja semua kelas penyimpanan Amazon S3 lainnya dan bucket tujuan umum S3, lihat Pola desain praktik terbaik: mengoptimalkan performa Amazon S3.
Untuk kinerja dan skalabilitas yang optimal dengan kelas penyimpanan S3 Express One Zone dan bucket direktori dalam beban kerja skala tinggi, penting untuk memahami cara kerja bucket direktori secara berbeda dari bucket tujuan umum. Kemudian, kami menyediakan praktik terbaik untuk menyelaraskan aplikasi Anda dengan cara kerja bucket direktori.
Cara kerja bucket direktori
Kelas penyimpanan Amazon S3 Express One Zone dapat mendukung beban kerja hingga 2.000.000 GET dan hingga 200.000 transaksi PUT per detik (TPS) per bucket direktori. Dengan S3 Express One Zone, data disimpan dalam bucket direktori S3 di Availability Zones. Objek dalam bucket direktori dapat diakses dalam namespace hierarkis, mirip dengan sistem file dan berbeda dengan bucket tujuan umum S3 yang memiliki namespace datar. Tidak seperti bucket tujuan umum, bucket direktori mengatur kunci secara hierarkis ke dalam direktori alih-alih prefiks. Prefiks adalah string karakter di bagian awal nama kunci objek. Anda dapat menggunakan awalan untuk mengatur data Anda dan mengelola arsitektur penyimpanan objek datar di bucket tujuan umum. Untuk informasi selengkapnya, lihat Organisasi objek menggunakan prefiks.
Dalam bucket direktori, objek diatur dalam namespace hierarkis menggunakan garis miring maju (/
) sebagai satu-satunya pembatas yang didukung. Saat Anda mengunggah objek dengan kunci sepertidir1/dir2/file1.txt
, direktori dir1/
dan secara otomatis dir2/
dibuat dan dikelola oleh Amazon S3. Direktori dibuat selama PutObject
atau CreateMultiPartUpload
operasi dan secara otomatis dihapus ketika mereka menjadi kosong setelah DeleteObject
atau AbortMultiPartUpload
operasi. Tidak ada batas atas jumlah objek dan subdirektori dalam direktori.
Direktori yang dibuat saat objek diunggah ke bucket direktori dapat diskalakan secara instan untuk mengurangi kemungkinan kesalahan HTTP. 503 (Slow Down)
Penskalaan otomatis ini memungkinkan aplikasi Anda untuk memparalelkan permintaan baca dan tulis di dalam dan di seluruh direktori sesuai kebutuhan. Untuk S3 Express One Zone, direktori individual dirancang untuk mendukung tingkat permintaan maksimum bucket direktori. Tidak perlu mengacak awalan kunci untuk mencapai kinerja optimal karena sistem secara otomatis mendistribusikan objek untuk distribusi beban yang merata, tetapi sebagai hasilnya, kunci tidak disimpan secara leksikografis dalam ember direktori. Ini berbeda dengan bucket tujuan umum S3 di mana kunci yang lebih dekat secara leksikografis lebih mungkin ditempatkan bersama di server yang sama.
Untuk informasi selengkapnya tentang contoh operasi bucket direktori dan interaksi direktori, lihatOperasi bucket direktori dan contoh interaksi direktori.
Praktik terbaik
Ikuti praktik terbaik untuk mengoptimalkan kinerja bucket direktori Anda dan membantu beban kerja Anda menskalakan dari waktu ke waktu.
Gunakan direktori yang berisi banyak entri (objek atau subdirektori)
Bucket direktori memberikan kinerja tinggi secara default untuk semua beban kerja. Untuk optimasi kinerja yang lebih besar dengan operasi tertentu, mengkonsolidasikan lebih banyak entri (yang merupakan objek atau subdirektori) ke dalam direktori akan menghasilkan latensi yang lebih rendah dan tingkat permintaan yang lebih tinggi:
Operasi API yang bermutasi, seperti
PutObject
,,CreateMultiPartUpload
danDeleteObject
AbortMultiPartUpload
, mencapai kinerja optimal saat diimplementasikan dengan direktori yang lebih sedikit dan lebih padat yang berisi ribuan entri, bukan dengan sejumlah besar direktori yang lebih kecil.ListObjectsV2
operasi berkinerja lebih baik ketika lebih sedikit direktori perlu dilalui untuk mengisi halaman hasil.
Jangan gunakan entropi dalam awalan
Dalam operasi Amazon S3, entropi mengacu pada keacakan dalam penamaan awalan yang membantu mendistribusikan beban kerja secara merata di seluruh partisi penyimpanan. Namun, karena bucket direktori mengelola distribusi beban secara internal, tidak disarankan untuk menggunakan entropi dalam awalan untuk kinerja terbaik. Ini karena untuk bucket direktori, entropi dapat menyebabkan permintaan menjadi lebih lambat dengan tidak menggunakan kembali direktori yang telah dibuat.
Pola kunci seperti $HASH/directory/object
bisa berakhir dengan membuat banyak direktori perantara. Dalam contoh berikut, semua job-1
s adalah direktori yang berbeda karena orang tua mereka berbeda. Direktori akan jarang dan mutasi dan permintaan daftar akan lebih lambat. Dalam contoh ini ada 12 Direktori perantara yang semuanya memiliki satu entri.
s3://my-bucket/0cc175b9c0f1b6a831c399e269772661/job-1/file1 s3://my-bucket/92eb5ffee6ae2fec3ad71c777531578f/job-1/file2 s3://my-bucket/4a8a08f09d37b73795649038408b5f33/job-1/file3 s3://my-bucket/8277e0910d750195b448797616e091ad/job-1/file4 s3://my-bucket/e1671797c52e15f763380b45e841ec32/job-1/file5 s3://my-bucket/8fa14cdd754f91cc6554c9e71929cce7/job-1/file6
Sebaliknya, untuk kinerja yang lebih baik, kita dapat menghapus $HASH
komponen dan memungkinkan job-1
untuk menjadi satu direktori, meningkatkan kepadatan direktori. Dalam contoh berikut, direktori perantara tunggal yang memiliki 6 entri dapat menghasilkan kinerja yang lebih baik, dibandingkan dengan contoh sebelumnya.
s3://my-bucket/job-1/file1 s3://my-bucket/job-1/file2 s3://my-bucket/job-1/file3 s3://my-bucket/job-1/file4 s3://my-bucket/job-1/file5 s3://my-bucket/job-1/file6
Keuntungan kinerja ini terjadi karena ketika kunci objek awalnya dibuat dan nama kuncinya termasuk direktori, direktori secara otomatis dibuat untuk objek. Unggahan objek berikutnya ke direktori yang sama tidak memerlukan direktori yang akan dibuat, yang mengurangi latensi pada unggahan objek ke direktori yang ada.
Gunakan pemisah selain pembatas/untuk memisahkan bagian kunci Anda jika Anda tidak memerlukan kemampuan untuk mengelompokkan objek secara logis selama panggilan ListObjectsV2
Karena /
pembatas diperlakukan khusus untuk ember direktori, itu harus digunakan dengan niat. Sementara bucket direktori tidak secara leksikografis mengurutkan objek, objek dalam direktori masih dikelompokkan bersama dalam output. ListObjectsV2
Jika Anda tidak memerlukan fungsi ini, Anda dapat mengganti /
dengan karakter lain sebagai pemisah untuk tidak menyebabkan pembuatan direktori perantara.
Misalnya, asumsikan kunci berikut berada dalam YYYY/MM/DD/HH/
pola awalan
s3://my-bucket/2024/04/00/01/file1 s3://my-bucket/2024/04/00/02/file2 s3://my-bucket/2024/04/00/03/file3 s3://my-bucket/2024/04/01/01/file4 s3://my-bucket/2024/04/01/02/file5 s3://my-bucket/2024/04/01/03/file6
Jika Anda tidak perlu mengelompokkan objek berdasarkan jam atau hari dalam ListObjectsV2
hasil, tetapi Anda perlu mengelompokkan objek berdasarkan bulan, pola kunci berikut YYYY/MM/DD-HH-
akan menghasilkan direktori yang jauh lebih sedikit dan kinerja yang lebih baik untuk ListObjectsV2
operasi.
s3://my-bucket/2024/04/00-01-file1 s3://my-bucket/2024/04/00-01-file2 s3://my-bucket/2024/04/00-01-file3 s3://my-bucket/2024/04/01-02-file4 s3://my-bucket/2024/04/01-02-file5 s3://my-bucket/2024/04/01-02-file6
Gunakan operasi daftar yang dibatasi jika memungkinkan
ListObjectsV2
Permintaan tanpa delimiter
melakukan traversal rekursif kedalaman pertama dari semua direktori. ListObjectsV2
Permintaan dengan hanya delimiter
mengambil entri dalam direktori yang ditentukan oleh prefix
parameter, mengurangi latensi permintaan dan meningkatkan kunci agregat per detik. Untuk bucket direktori, gunakan operasi daftar terbatas jika memungkinkan. Daftar yang dibatasi menghasilkan direktori yang dikunjungi lebih sedikit kali, yang mengarah ke lebih banyak kunci per detik dan latensi permintaan yang lebih rendah.
Misalnya, untuk direktori dan objek berikut di bucket direktori Anda:
s3://my-bucket/2024/04/12-01-file1 s3://my-bucket/2024/04/12-01-file2 ... s3://my-bucket/2024/05/12-01-file1 s3://my-bucket/2024/05/12-01-file2 ... s3://my-bucket/2024/06/12-01-file1 s3://my-bucket/2024/06/12-01-file2 ... s3://my-bucket/2024/07/12-01-file1 s3://my-bucket/2024/07/12-01-file2 ...
Untuk ListObjectsV2
kinerja yang lebih baik, gunakan daftar terbatas untuk daftar subdirektori dan objek Anda, jika logika aplikasi Anda memungkinkan untuk itu. Misalnya, Anda dapat menjalankan perintah berikut untuk operasi daftar yang dibatasi,
aws s3api list-objects-v2 --bucket my-bucket --prefix '2024/' --delimiter '/'
Outputnya adalah daftar subdirektori.
{ "CommonPrefixes": [ { "Prefix": "2024/04/" }, { "Prefix": "2024/05/" }, { "Prefix": "2024/06/" }, { "Prefix": "2024/07/" } ] }
Untuk daftar setiap subdirektori dengan kinerja yang lebih baik, Anda dapat menjalankan perintah seperti contoh berikut:
Perintah:
aws s3api list-objects-v2 --bucket my-bucket --prefix '2024/04' --delimiter '/'
Output:
{ "Contents": [ { "Key": "2024/04/12-01-file1" }, { "Key": "2024/04/12-01-file2" } ] }
Lokasi bersama penyimpanan S3 Express One Zone dengan sumber daya komputasi Anda
Dengan S3 Express One Zone, setiap bucket direktori terletak di satu Availability Zone yang Anda pilih saat membuat bucket. Anda dapat memulai dengan membuat bucket direktori baru di Zona Ketersediaan lokal untuk beban kerja atau sumber daya komputasi Anda. Anda kemudian dapat segera memulai membaca dan menulis latensi sangat rendah. Bucket direktori adalah jenis bucket S3 tempat Anda dapat memilih Availability Zone Wilayah AWS untuk mengurangi latensi antara komputasi dan penyimpanan.
Jika Anda mengakses bucket direktori di Availability Zones, Anda mungkin mengalami sedikit peningkatan latensi. Untuk mengoptimalkan performa, kami menyarankan agar Anda sebisa mungkin mengakses bucket direktori dari instans Amazon Elastic Container Service, Amazon Elastic Kubernetes Service, dan Amazon Elastic Compute Cloud yang berada di Zona Ketersediaan yang sama.
Gunakan koneksi bersamaan untuk mencapai throughput tinggi dengan objek di atas 1MB
Anda dapat mencapai kinerja terbaik dengan mengeluarkan beberapa permintaan sekaligus ke bucket direktori untuk menyebarkan permintaan Anda melalui koneksi terpisah untuk memaksimalkan bandwidth yang dapat diakses. Seperti bucket tujuan umum, S3 Express One Zone tidak memiliki batasan jumlah koneksi yang dibuat ke bucket direktori Anda. Direktori individu dapat menskalakan kinerja secara horizontal dan otomatis ketika terjadi sejumlah besar penulisan bersamaan ke direktori yang sama.
Koneksi TCP individual ke bucket direktori memiliki batas atas tetap pada jumlah byte yang dapat diunggah atau diunduh per detik. Ketika objek menjadi lebih besar, waktu permintaan menjadi didominasi oleh streaming byte daripada pemrosesan transaksi. Untuk menggunakan beberapa koneksi untuk memparalelkan unggahan atau pengunduhan objek yang lebih besar, Anda dapat mengurangi end-to-end latensi. Jika menggunakan Java 2.x
SDK, Anda harus mempertimbangkan untuk menggunakan S3 Transfer Manager yang akan memanfaatkan peningkatan kinerja seperti operasi API unggahan multibagian dan pengambilan rentang byte untuk mengakses data secara paralel.
Gunakan titik akhir VPC Gateway
Titik akhir Gateway menyediakan koneksi langsung dari VPC Anda ke bucket direktori, tanpa memerlukan gateway internet atau perangkat NAT untuk VPC Anda. Untuk mengurangi jumlah waktu yang dihabiskan paket Anda di jaringan, Anda harus mengonfigurasi VPC Anda dengan titik akhir VPC gateway untuk bucket direktori. Untuk informasi selengkapnya, lihat Jaringan untuk ember direktori.
Gunakan otentikasi sesi dan gunakan kembali token sesi saat valid
Bucket direktori menyediakan mekanisme otentikasi token sesi untuk mengurangi latensi pada operasi API yang peka terhadap kinerja. Anda dapat melakukan satu panggilan CreateSession
untuk mendapatkan token sesi yang kemudian berlaku untuk semua permintaan dalam 5 menit berikutnya. Untuk mendapatkan latensi terendah dalam panggilan API Anda, pastikan untuk memperoleh token sesi dan menggunakannya kembali selama masa pakai token tersebut sebelum menyegarkannya.
Jika Anda menggunakan AWS SDKs, SDKs tangani penyegaran token sesi secara otomatis untuk menghindari gangguan layanan saat sesi berakhir. Kami menyarankan Anda menggunakan AWS SDKs untuk memulai dan mengelola permintaan ke operasi CreateSession
API.
Untuk informasi selengkapnya tentang CreateSession
, lihat Mengotorisasi operasi API titik akhir Zonal dengan CreateSession.
Gunakan klien berbasis CRT
AWS Common Runtime (CRT) adalah seperangkat pustaka modular, berkinerja, dan efisien yang ditulis dalam C dan dimaksudkan untuk bertindak sebagai dasar dari. AWS SDKs CRT menyediakan throughput yang ditingkatkan, manajemen koneksi yang ditingkatkan, dan waktu startup yang lebih cepat. CRT tersedia melalui semua AWS SDKs kecuali Go.
Untuk informasi selengkapnya tentang cara mengonfigurasi CRT untuk SDK yang Anda gunakan, lihat pustaka AWS Common Runtime (CRT), Mempercepatthroughput Amazon S3 dengan AWS Common Runtime, Memperkenalkan klien S3 berbasis CRT, dan Manajer Transfer S3 di SDK for Java 2.x, Menggunakan operasi S3 untuk Amazon
Gunakan versi terbaru dari AWS SDKs
Ini AWS SDKs menyediakan dukungan bawaan untuk banyak pedoman yang direkomendasikan untuk mengoptimalkan kinerja Amazon S3. SDKs Menawarkan API yang lebih sederhana untuk memanfaatkan Amazon S3 dari dalam aplikasi dan diperbarui secara berkala untuk mengikuti praktik terbaik terbaru. Misalnya, permintaan coba ulang SDKs secara otomatis setelah 503
kesalahan HTTP dan menangani respons koneksi yang lambat.
Jika menggunakan Java 2.x
SDK, Anda harus mempertimbangkan untuk menggunakan S3 Transfer Manager, yang secara otomatis menskalakan koneksi secara horizontal untuk mencapai ribuan permintaan per detik menggunakan permintaan rentang byte jika diperlukan. Permintaan rentang byte dapat meningkatkan kinerja karena Anda dapat menggunakan koneksi bersamaan ke S3 untuk mengambil rentang byte yang berbeda dari dalam objek yang sama. Ini membantu Anda mencapai throughput agregat yang lebih tinggi dibandingkan permintaan objek utuh tunggal. Jadi penting untuk menggunakan versi terbaru dari AWS SDKs untuk mendapatkan fitur optimasi kinerja terbaru.
Penyelesaian masalah kinerja
Apakah Anda menyetel permintaan coba lagi untuk aplikasi yang sensitif terhadap latensi?
S3 Express One Zone dibuat khusus untuk menghadirkan tingkat kinerja tinggi yang konsisten tanpa penyetelan tambahan. Namun, menetapkan nilai batas waktu yang agresif dan percobaan ulang dapat membantu mendorong latensi dan kinerja yang konsisten. AWS SDKs Memiliki batas waktu yang dapat dikonfigurasi dan nilai coba lagi yang dapat Anda sesuaikan dengan toleransi aplikasi spesifik Anda.
Apakah Anda menggunakan pustaka AWS Common Runtime (CRT) dan tipe instans Amazon EC2 yang optimal?
Aplikasi yang melakukan sejumlah besar operasi baca dan tulis cenderung membutuhkan lebih banyak memori atau kapasitas komputasi daripada aplikasi yang tidak melakukannya. Saat meluncurkan instans Amazon Elastic Compute Cloud (Amazon EC2) untuk beban kerja yang menuntut kinerja, pilih jenis instans yang memiliki jumlah sumber daya ini yang dibutuhkan aplikasi Anda. Penyimpanan berkinerja tinggi S3 Express One Zone idealnya dipasangkan dengan tipe instans yang lebih besar dan lebih baru dengan jumlah memori sistem yang lebih besar dan lebih kuat CPUs dan GPUs dapat memanfaatkan penyimpanan berkinerja lebih tinggi. Kami juga merekomendasikan penggunaan versi terbaru dari CRT-enabled AWS SDKs, yang dapat mempercepat permintaan baca dan tulis secara paralel dengan lebih baik.
Apakah Anda menggunakan AWS SDKs otentikasi berbasis sesi?
Dengan Amazon S3, Anda juga dapat mengoptimalkan kinerja saat menggunakan permintaan HTTP REST API dengan mengikuti praktik terbaik yang sama yang merupakan bagian dari permintaan. AWS SDKs Namun, dengan mekanisme otorisasi dan otentikasi berbasis sesi yang digunakan oleh S3 Express One Zone, kami sangat menyarankan Anda menggunakan token AWS SDKs to manage CreateSession
dan managed session token. AWS SDKs Secara otomatis membuat dan menyegarkan token atas nama Anda dengan menggunakan operasi CreateSession
API. Menggunakan CreateSession
save on per-request round-trip latency to AWS Identity and Access Management (IAM) untuk mengotorisasi setiap permintaan.
Operasi bucket direktori dan contoh interaksi direktori
Berikut ini menunjukkan tiga contoh tentang cara kerja bucket direktori.
Contoh 1: Bagaimana PutObject
permintaan S3 ke bucket direktori berinteraksi dengan direktori
-
Ketika operasi
PUT(<bucket>, "documents/reports/quarterly.txt")
dijalankan dalam bucket kosong, direktori didocuments/
dalam root bucket dibuat, direktori direports/
dalamnyadocuments/
dibuat, dan objek diquarterly.txt
dalamnyareports/
dibuat. Untuk operasi ini, dua direktori dibuat selain objek. -
Kemudian, ketika operasi lain
PUT(<bucket>, "documents/logs/application.txt")
dijalankan, direktoridocuments/
sudah ada, direktori dilogs/
dalamnyadocuments/
tidak ada dan dibuat, dan objek diapplication.txt
dalamnyalogs/
dibuat. Untuk operasi ini, hanya satu direktori yang dibuat selain objek. -
Terakhir, ketika
PUT(<bucket>, "documents/readme.txt")
operasi dijalankan, direktori didocuments/
dalam root sudah ada dan objekreadme.txt
dibuat. Untuk operasi ini, tidak ada direktori yang dibuat.
Contoh 2: Bagaimana ListObjectsV2
permintaan S3 ke bucket direktori berinteraksi dengan direktori
Untuk ListObjectsV2
permintaan S3 tanpa menentukan pembatas, bucket dilintasi secara mendalam terlebih dahulu. Output dikembalikan dalam urutan yang konsisten. Namun, meskipun urutan ini tetap sama di antara permintaan, urutannya tidak leksikografis. Untuk bucket dan direktori yang dibuat pada contoh sebelumnya:
-
Ketika
LIST(<bucket>)
dieksekusi, direktoridocuments/
dimasukkan dan melintasi dimulai. -
Subdirektori
logs/
dimasukkan dan melintasi dimulai. -
Objek
application.txt
ditemukan di dalamlogs/
. -
Tidak ada lagi entri di dalamnya
logs/
. Operasi Daftar keluar darilogs/
dan masukdocuments/
lagi. -
documents/
Direktori terus dilalui dan objek ditemukanreadme.txt
. -
documents/
Direktori terus dilalui dan subdirektorireports/
dimasukkan dan melintasi dimulai. -
Objek
quarterly.txt
ditemukan di dalamreports/
. -
Tidak ada lagi entri di dalamnya
reports/
. Daftar keluar darireports/
dan masukdocuments/
lagi. -
Tidak ada lagi entri di dalam
documents/
dan Daftar kembali.
Dalam contoh ini, logs/
dipesan sebelumnya readme.txt
dan readme.txt
dipesan sebelumnyareports/
.
Contoh 3: Bagaimana DeleteObject
permintaan S3 ke bucket direktori berinteraksi dengan direktori

-
Dalam ember yang sama, ketika operasi
DELETE(<bucket>, "documents/reports/quarterly.txt")
dijalankan, objekquarterly.txt
dihapus, membiarkan direktorireports/
kosong dan menyebabkannya segera dihapus.documents/
Direktori tidak kosong karena memiliki direktorilogs/
dan objek direadme.txt
dalamnya, jadi tidak dihapus. Untuk operasi ini, hanya satu objek dan satu direktori yang dihapus. -
Ketika operasi
DELETE(<bucket>, "documents/readme.txt")
dijalankan, objekreadme.txt
dihapus.documents/
masih belum kosong karena berisi direktorilogs/
, jadi tidak dihapus. Untuk operasi ini, tidak ada direktori yang dihapus dan hanya objek yang dihapus. -
Terakhir, ketika operasi
DELETE(<bucket>, "documents/logs/application.txt")
dijalankan, dihapus,application.txt
dibiarkanlogs/
kosong dan menyebabkannya segera dihapus. Ini kemudian dibiarkandocuments/
kosong dan menyebabkannya juga segera dihapus. Untuk operasi ini, dua direktori dan satu objek dihapus. Ember itu sekarang kosong.