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 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 memberikan 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 dan mengelola arsitektur penyimpanan objek datar dalam 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 CreateMultiPartUpload operasi PutObject atau operasi dan secara otomatis dihapus ketika mereka menjadi kosong setelah DeleteObject atau AbortMultiPartUpload operasi. Tidak ada batas atas untuk jumlah objek dan subdirektori dalam direktori.
Direktori yang dibuat ketika objek diunggah ke bucket direktori dapat skala secara instan untuk mengurangi kemungkinan 503 (Slow Down) kesalahan HTTP. 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 dari bucket direktori. Tidak perlu mengacak awalan kunci untuk mencapai kinerja optimal karena sistem secara otomatis mendistribusikan objek untuk distribusi beban merata, tetapi sebagai hasilnya, kunci tidak disimpan secara leksikografis dalam bucket direktori. Ini berbeda dengan bucket tujuan umum S3 di mana kunci yang secara leksikografis lebih dekat lebih cenderung 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 berskala 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 pengoptimalan kinerja yang lebih besar dengan operasi tertentu, mengkonsolidasikan lebih banyak entri (yang merupakan objek atau subdirektori) ke dalam direktori akan menyebabkan latensi yang lebih rendah dan tingkat permintaan yang lebih tinggi:
Operasi API yang bermutasi, seperti
PutObject,DeleteObject,CreateMultiPartUploaddanAbortMultiPartUpload, mencapai kinerja optimal ketika diimplementasikan dengan direktori yang lebih sedikit dan lebih padat yang berisi ribuan entri, daripada dengan sejumlah besar direktori yang lebih kecil.ListObjectsV2operasi bekerja lebih baik ketika lebih sedikit direktori yang 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 secara internal mengelola distribusi beban, 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 menghasilkan banyak direktori perantara. Dalam contoh berikut, semua job-1 s adalah direktori yang berbeda karena orang tua mereka berbeda. Direktori akan jarang dan permintaan mutasi dan 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 V2 ListObjects
Karena pem / batas diperlakukan khusus untuk bucket direktori, itu harus digunakan dengan niat. Sementara bucket direktori tidak mengurutkan objek secara leksikografis, objek dalam direktori masih dikelompokkan bersama dalam ListObjectsV2 output. 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 pola YYYY/MM/DD/HH/ 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 menyebabkan 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 dibatasi jika memungkinkan
Per ListObjectsV2 mintaan tanpa delimiter melakukan penelusuran rekursif mendalam pertama dari semua direktori. Per ListObjectsV2 mintaan 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 dibatasi 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 dalam 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 yang dibatasi untuk membuat daftar subdirektori dan objek Anda, jika logika aplikasi Anda memungkinkan untuk itu. Misalnya, Anda dapat menjalankan perintah berikut untuk operasi daftar 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 membuat 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" } ] }
Co-locate Penyimpanan S3 Express One Zone dengan sumber daya komputasi Anda
Dengan S3 Express One Zone, setiap bucket direktori terletak di Zona Ketersediaan tunggal 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 di mana Anda dapat memilih Availability Zone Wilayah AWS untuk mengurangi latensi antara komputasi dan penyimpanan.
Jika Anda mengakses bucket direktori di Zona Ketersediaan, 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 untuk 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 individu 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 paralelisasi unggahan atau pengunduhan objek yang lebih besar, Anda dapat mengurangi latensi ujung ke ujung. Jika menggunakan Java 2.x SDK, Anda harus mempertimbangkan untuk menggunakan S3 Transfer Manager yang akan memanfaatkan peningkatan kinerja seperti operasi API upload multipart dan pengambilan rentang byte untuk mengakses data secara paralel.
Gunakan titik akhir Gateway VPC
Titik akhir gateway menyediakan koneksi langsung dari VPC 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 bucket direktori.
Gunakan otentikasi sesi dan gunakan kembali token sesi selagi valid
Bucket direktori menyediakan mekanisme otentikasi token sesi untuk mengurangi latensi pada operasi API yang sensitif 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 SDK, SDK menangani penyegaran token sesi secara otomatis untuk menghindari gangguan layanan saat sesi berakhir. Kami menyarankan Anda menggunakan AWS SDK untuk memulai dan mengelola permintaan ke operasi CreateSession API.
Untuk informasi selengkapnya tentang CreateSession, lihat Mengotorisasi operasi API titik akhir Zonal dengan CreateSession.
Gunakan CRT-based klien
Com AWS mon Runtime (CRT) adalah sekumpulan pustaka modular, berkinerja, dan efisien yang ditulis dalam C dan dimaksudkan untuk bertindak sebagai basis SDK. AWS CRT memberikan peningkatan throughput, peningkatan manajemen koneksi, dan waktu startup yang lebih cepat. CRT tersedia melalui semua AWS SDK kecuali Go.
Untuk informasi selengkapnya tentang cara mengonfigurasi CRT untuk SDK yang Anda gunakan, lihat pustaka Com AWS mon Runtime (CRT), Mempercepat throughput Amazon S3 dengan Runtime AWS Umum
Gunakan versi terbaru AWS SDK
AWS SDK menyediakan dukungan bawaan untuk banyak pedoman yang direkomendasikan untuk mengoptimalkan kinerja Amazon S3. SDK menawarkan API yang lebih sederhana untuk memanfaatkan Amazon S3 dari dalam aplikasi dan diperbarui secara berkala untuk mengikuti praktik terbaik terbaru. Misalnya, SDK secara otomatis mencoba kembali permintaan 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 bila sesuai. Byte-range permintaan 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 AWS SDK untuk mendapatkan fitur pengoptimalan kinerja terbaru.
Penyelesaian masalah kinerja
Apakah Anda mengatur permintaan coba ulang untuk aplikasi sensitif 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 SDK memiliki batas waktu yang dapat dikonfigurasi dan nilai coba ulang yang dapat Anda sesuaikan dengan toleransi aplikasi spesifik Anda.
Apakah Anda menggunakan AWS Pustaka Runtime Umum (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) Anda untuk beban kerja yang menuntut kinerja, pilihlah jenis instans yang memiliki jumlah sumber daya yang dibutuhkan aplikasi Anda. Penyimpanan berkinerja tinggi S3 Express One Zone idealnya dipasangkan dengan jenis instans yang lebih besar dan lebih baru dengan jumlah memori sistem yang lebih besar serta CPU dan GPU yang lebih kuat yang dapat memanfaatkan penyimpanan berkinerja lebih tinggi. Kami juga merekomendasikan penggunaan versi terbaru CRT-enabled AWS SDK, yang dapat mempercepat permintaan baca dan tulis secara paralel dengan lebih baik.
Apakah Anda menggunakan AWS SDK untuk 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 AWS SDK. Namun, dengan mekanisme otorisasi dan otentikasi berbasis sesi yang digunakan oleh S3 Express One Zone, kami sangat menyarankan Anda menggunakan AWS SDK untuk mengelola CreateSession dan token sesi terkelola. AWS SDK secara otomatis membuat dan menyegarkan token atas nama Anda dengan menggunakan operasi CreateSession API. Menggunakan penyimpanan CreateSession pada latensi pulang-pergi per permintaan ke 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.txtdalamnyareports/dibuat. Untuk operasi ini, dua direktori dibuat selain objek.
-
Kemudian, ketika operasi lain
PUT(<bucket>, "documents/logs/application.txt")dijalankan, direktoridocuments/sudah ada,documents/direktorilogs/di dalamnya tidak ada dan dibuat, dan objekapplication.txtdilogs/dalamnya 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.txtdibuat. Untuk operasi ini, tidak ada direktori yang dibuat.
Contoh 2: Bagaimana permintaan S3 ListObjects V2 ke bucket direktori berinteraksi dengan direktori
Untuk ListObjectsV2 permintaan S3 tanpa menentukan pembatas, bucket dilalui dengan cara mendalam terlebih dahulu. Output dikembalikan dalam urutan yang konsisten. Namun, sementara urutan ini tetap sama di antara permintaan, urutannya bukan leksikografi. Untuk bucket dan direktori yang dibuat dalam contoh sebelumnya:
-
Ketika a
LIST(<bucket>)dieksekusi, direktoridocuments/dimasukkan dan melintasi dimulai. -
Subdirektori
logs/dimasukkan dan melintasi dimulai. -
Objek
application.txtditemukan di dalamnyalogs/. -
Tidak ada lagi entri yang ada di dalamnya
logs/. Operasi Daftar keluar darilogs/dan masukdocuments/lagi. -
Direk
documents/tori terus dilalui dan objekreadme.txtditemukan. -
Direk
documents/tori terus dilalui dan subdirektorireports/dimasukkan dan melintasi dimulai. -
Objek
quarterly.txtditemukan di dalamnyareports/. -
Tidak ada lagi entri yang ada di dalamnya
reports/. Daftar keluar darireports/dan masukdocuments/lagi. -
Tidak ada lagi entri di dalam
documents/dan Daftar kembali.
Dalam contoh ini, logs/ dipesan sebelum readme.txt dan readme.txt dipesan sebelumnyareports/.
Contoh 3: Bagaimana DeleteObject permintaan S3 ke bucket direktori berinteraksi dengan direktori
-
Dalam bucket yang sama, ketika operasi
DELETE(<bucket>, "documents/reports/quarterly.txt")dijalankan, objekquarterly.txtdihapus, meninggalkan direktorireports/kosong dan menyebabkannya segera dihapus. Direkdocuments/tori tidak kosong karena memiliki direktorilogs/dan objek direadme.txtdalamnya, jadi tidak dihapus. Untuk operasi ini, hanya satu objek dan satu direktori yang dihapus.
-
Ketika operasi
DELETE(<bucket>, "documents/readme.txt")dijalankan, objekreadme.txtdihapus.documents/masih tidak 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.txtdibiarkanlogs/kosong dan menyebabkannya segera dihapus. Ini kemudian didocuments/biarkan kosong dan menyebabkannya juga segera dihapus. Untuk operasi ini, dua direktori dan satu objek dihapus. Ember itu sekarang kosong.