Jika Anda menggunakan S3 untuk menyimpan data dari unggahan pengguna, terutama di lingkungan terdistribusi, satu pertimbangan besar adalah kenyataan bahwa S3 'konsisten pada akhirnya' (walaupun, beberapa wilayah konsisten baca-tulis-tulis). Konsekuensi dari ini adalah bahwa Anda mungkin berhasil mengunggah file, tetapi jika Anda memeriksa keberadaannya segera setelah itu, mungkin menemukannya tidak ada. Masalah ini lebih jelas untuk skenario seperti pembaruan atau penghapusan, di mana bahkan konsistensi baca-setelah-menulis tidak akan membantu.
Hal di atas akan berlaku untuk unggahan Anda ke S3 terlepas dari pendekatan yang Anda lakukan. Bahkan, ini berlaku untuk sebagian besar masalah yang mungkin diharapkan dari S3 - ini bukan pendekatan yang digunakan untuk menyimpan data karena keterbatasan S3 yang kemungkinan akan menjadi yang paling bermasalah.
S3fs menggunakan S3 API - seperti halnya PHP (atau SDK lainnya). Selain itu, S3 dirancang untuk menangani tingkat konkurensi yang cukup tinggi - jadi (selain masalah konsistensi) seharusnya tidak ada masalah untuk memasangnya pada beberapa contoh (mengingat ini bukan sistem file tradisional - masalah seperti mengunci, dll ditangani di sisi S3).
Karena itu, ada beberapa potensi keuntungan dan kerugian dari setiap implementasi:
S3fs:
- Tidak ada dukungan untuk unduhan parsial / terpotong-potong (sejauh yang saya tahu) - jadi Anda harus mengunduh file lengkap untuk membaca bagian mana pun dari itu - mungkin bukan masalah jika Anda hanya menggunakannya untuk menyimpan (dan menyajikan) unggahan.
- Ditulis dalam C ++ kemungkinan peningkatan kinerja
- Aplikasi Anda mendapat manfaat dari setiap pembaruan untuk s3fs
- Menerapkan caching (baik file lengkap dan informasi file) - memiliki potensi untuk meningkatkan kecepatan sedikit, dan mengurangi biaya
- Terbatas pada fungsi yang terpapar sekering
SDK:
- Paparan set lengkap fitur yang ditawarkan S3 - tergantung pada kasus penggunaan Anda, ini mungkin cukup untuk pantas menggunakan SDK
- Integrasi yang mungkin lebih ketat dengan aplikasi Anda - kesalahan yang dikembalikan, dll dapat memungkinkan aplikasi Anda untuk membuat pilihan yang lebih baik (dan karena itu lebih tepat)
- Setiap keuntungan yang mungkin perlu dikodekan untuk - aplikasi Anda harus mengambil keuntungan dari mereka dan tetap up to date dengan perubahan di masa depan untuk S3
- Lebih banyak kerumitan dan overhead pada kode Anda
Dalam hal 'keselamatan', Anda dapat berarti 'mencegah korupsi data' atau 'mencegah akses tidak sah'. Berkenaan dengan yang pertama, SDK mungkin membantu sedikit untuk berurusan dengan konsistensi akhirnya (dalam bentuk kesalahan yang lebih banyak), tetapi penyimpanan yang mendasarinya sama, dan saya berharap perbedaannya kecil. Berkenaan dengan kontrol akses - Anda dapat menggunakan IAM untuk membuat akun terbatas, tetapi akun itu masih akan membutuhkan akses baca / tulis ke file S3 Anda. Keduanya harus cukup aman, dalam kedua kasus, sistem Anda perlu dikompromikan untuk mendapatkan akses ke bucket S3 Anda - namun saya menyarankan, bahwa dengan S3fs (karena kredensial biasanya disimpan di luar akar web, dan tidak dapat diakses sama sekali melalui PHP) ada keamanan yang sedikit lebih baik.
Pendapat pribadi: Saya mendukung s3fs untuk kasus di mana ada direktori unggahan tunggal (mis. Satu situs memanfaatkannya) dan di mana aksesnya akan cukup sederhana (hanya perlu mengunggah file dan sesekali memperbarui / menghapus). Jika Anda akan memerlukan akses yang lebih kompleks (mis. Unduhan parsial, banyak ember, dll) atau akan menggunakan S3 SDK untuk tujuan lain, maka saya akan tetap menggunakan SDK untuk unggahan juga.