seperti judul pertanyaan saya katakan, saya ingin tahu apakah ini praktik yang baik atau tidak,
Saya tahu saya bisa memasangnya dalam instance EC2 tapi saya bertanya-tanya apakah, karena saya akan menambahkan lebih banyak instance untuk mengukur aplikasi saya, ini dapat menyebabkan beberapa masalah; apakah Anda memiliki pengalaman dengan ini?
Saya menggunakan S3 untuk memungkinkan unggahan file melalui skrip PHP, jadi pada dasarnya pertanyaannya adalah:
Apakah ini praktik yang baik untuk menggunakan mouting atau adakah cara yang lebih baik untuk menangani unggahan file pengguna?
Terima kasih sebelumnya
php
amazon-ec2
amazon-s3
Enrico Tuttobene
sumber
sumber
Jawaban:
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:
SDK:
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.
sumber
Saya lebih suka mengunggah ke S3 melalui lib PHP. Lebih mudah daripada memasang S3 di setiap server.
Lihat contoh ini: http://aws.amazon.com/code/126
Untuk salah satu proyek saya, saya menggunakan lib ini: http://undesigned.org.za/2007/10/22/amazon-s3-php-class . Bekerja sangat baik untuk saya.
sumber
Anda dapat mengizinkan pengguna untuk mengunggah langsung ke s3 dari browser tanpa mengunggah ke server Anda (dan kemudian mengunggah ke s3.)
Berikut adalah tips yang bagus untuk ini: https://leonid.shevtsov.me/post/demystifying-s3-browser-upload/
setelah file diunggah, jika Anda perlu memproses file (zip, transcode, dll) Anda bisa menggunakan S3fs
sumber