Penskalaan Horizontal dan Paralelisasi Permintaan untuk Throughput Tinggi - Pola Desain Praktik Terbaik: Mengoptimalkan Performa Amazon S3

Penskalaan Horizontal dan Paralelisasi Permintaan untuk Throughput Tinggi

Amazon S3 adalah sistem terdistribusi yang sangat besar. Untuk membantu Anda memanfaatkan skalanya, sebaiknya skalakan permintaan paralel secara horizontal ke titik akhir layanan Amazon S3. Selain mendistribusikan permintaan dalam Amazon S3, jenis pendekatan penskalaan ini membantu mendistribusikan beban melalui beberapa jalur dalam jaringan.

Untuk transfer throughput tinggi, Amazon S3 menyarankan penggunaan aplikasi yang menggunakan beberapa koneksi ke data GET atau PUT secara paralel. Misalnya, ini didukung oleh Amazon S3 Transfer Manager di AWS Java SDK, dan sebagian besar AWS SDK lainnya menyediakan konstruksi serupa. Untuk beberapa aplikasi, Anda dapat memperoleh koneksi paralel dengan meluncurkan beberapa permintaan secara bersamaan di thread atau instans aplikasi yang berbeda. Pendekatan terbaik yang harus dilakukan tergantung pada aplikasi dan struktur objek yang Anda akses.

Anda dapat menggunakan SDK AWS untuk menerbitkan permintaan GET dan PUT secara langsung, bukan menggunakan pengelolaan transfer di AWS SDK. Dengan pendekatan ini, Anda dapat menyesuaikan beban kerja secara langsung, dan masih mendapat manfaat dari dukungan SDK untuk percobaan ulang dan penanganan respons HTTP 503 yang mungkin terjadi. Umumnya, saat Anda mengunduh objek besar dalam suatu Wilayah dari Amazon S3 ke Amazon EC2, sebaiknya buat permintaan bersamaan untuk rentang byte suatu objek pada granularitas 8–16 MB. Buat satu permintaan bersamaan untuk setiap 85–90 MB/dtk throughput jaringan yang diinginkan. Untuk mensaturasi kartu antarmuka jaringan (NIC) 10 Gb/d, Anda dapat menggunakan sekitar 15 permintaan bersamaan melalui koneksi terpisah. Anda dapat menaikkan skala permintaan bersamaan melalui lebih banyak koneksi untuk mensaturasi NIC yang lebih cepat, seperti NIC 25 Gb/d atau 100 Gb/d.

Mengukur performa penting saat Anda mengatur jumlah permintaan yang akan diterbitkan secara bersamaan. Sebaiknya mulai dengan satu permintaan sekaligus. Ukur bandwidth jaringan yang dicapai dan penggunaan sumber daya lainnya yang digunakan oleh aplikasi Anda dalam memproses data. Anda kemudian dapat mengidentifikasi sumber daya hambatan (yaitu, sumber daya dengan penggunaan tertinggi), dan jumlah permintaan yang mungkin berguna. Misalnya, jika pemrosesan satu permintaan memerlukan penggunaan CPU 25 persen, artinya empat permintaan bersamaan dapat diakomodasi.

Pengukuran sangat penting, dan sebaiknya konfirmasi penggunaan sumber daya seiring meningkatnya permintaan.

Jika aplikasi Anda menerbitkan permintaan langsung ke Amazon S3 menggunakan REST API, sebaiknya gunakan kumpulan koneksi HTTP dan gunakan kembali setiap koneksi untuk serangkaian permintaan. Dengan menghindari pengaturan koneksi per-permintaan, Anda tidak perlu melakukan slow-start TCP dan handshake Lapisan Soket Aman (SSL) pada setiap permintaan. Untuk informasi tentang menggunakan REST API, lihat Pengenalan REST API Amazon S3.

Terakhir, perhatikan DNS dan periksa kembali apakah permintaan sudah disebar di seluruh kolam alamat IP Amazon S3. Kueri DNS untuk siklus Amazon S3 melalui daftar besar titik akhir IP. Namun resolver cache atau kode aplikasi yang menggunakan ulang satu alamat IP tidak mendapat manfaat dari keragaman alamat dan penyeimbangan beban yang menyertainya. Alat utilitas jaringan seperti alat baris perintah netstat dapat menunjukkan alamat IP yang digunakan untuk komunikasi dengan Amazon S3, dan kami menyediakan panduan untuk konfigurasi DNS. Untuk informasi lebih lanjut tentang panduan ini, lihat Perutean permintaan.