Necesita ayuda para decidir entre EBS vs S3 en Amazon Web Services

Estoy trabajando en un proyecto que incorpora el almacenamiento de archivos y funciones de compartir y después de meses de investigación, el mejor método para aprovechar AWS todavía estoy un poco preocupada.

Básicamente mi decisión es entre el uso de almacenamiento de EBS a la casa de los archivos de usuario o S3. El sistema incorporará on-the-fly archivo zip cuando el usuario quiere descargar un montón de archivos. Además, cuando los usuarios descargar cualquier tipo de archivos no quiero que la URL a los archivos expuestos.

Las dos mejores opciones que he encontrado son:

  1. Tener una instancia de EC2 que tiene un número de volúmenes de EBS montado para almacenar los archivos de usuario.

    • pros: parece mucho más rápido que el S3, y la compresión de archivos del volumen de EBS es sencillo.
    • contras: creo que Amazon tapas cuánto almacenamiento de EBS puede utilizar y no es tan redundante como S3.
  2. Después de cargar los archivos y procesados, el sistema empuja a los archivos a un depósito de S3 para el almacenamiento a largo plazo. Cuando los archivos se solicitó voy a recuperar los archivos de la S3 y salida de vuelta al cliente.

    • pros: la Redundancia, sin límites de almacenamiento de archivos
    • contras: me parece muy LENTO, no hay manera de montar un depósito de S3 como un volumen en el sistema de ficheros, sirviendo archivos comprimidos significaría transferir cada archivo a la instancia de EC2, la calma, y, finalmente, el envío de la salida (de nuevo, lento!)

Son ninguno de mis supuestos defectos? ¿Alguien puede pensar en una mejor manera de manejar cantidades masivas de almacenamiento de archivos?

  • Usted puede montar un depósito de S3 como un volumen. Echa un vistazo s3fs. Lo he utilizado para cargar un enorme (5GB) archivo zip para S3, montado en mi cubo de volumen, a continuación, extrayendo de ella. Él trabajó como un encanto.
InformationsquelleAutor andrewvnice | 2012-08-10

4 Kommentare

  1. 21

    Si el servicio va a ser utilizado por un número indeterminado de usuarios, es importante tener en cuenta que escalabilidad siempre será una preocupación, independientemente de la opción adoptada, será necesario aumentar la escala de los servicios para satisfacer la demanda, por lo que sería conveniente asumir que el servicio se ejecuta en un Grupo de Auto Scaling con un grupo de instancias de EC2 y no una sola instancia.

    Respecto a la protección de la URL para permitir que sólo los usuarios autorizados de descarga de los archivos, hay muchas maneras de hacer esto sin necesidad de su servicio a actuar como un intermediario, entonces usted tendrá que lidiar con al menos dos cuestiones:

    1. Nombre de archivo previsibilidad: para evitar la URL de la previsibilidad, se podrían nombrar el archivo cargado como un hash y almacenar los nombres de archivo originales y propiedad en una base de datos como SimpleDB, opcionalmente puede establecer un encabezado como «Content-Disposition: filename=original_file_name.ext» para asesorar a los usuarios del navegador a nombre de el archivo descargado en consecuencia.

    2. autorización: cuando el usuario pide descargar un archivo determinado su servicio, emitir una autorización temporal utilizando Cadena De Consulta De Autenticación o Las Credenciales De Seguridad Temporales para ese usuario específico dar acceso de lectura al archivo por un período de tiempo, a continuación, su servicio redirige a la de S3 URL para descarga directa. Esto en gran medida puede descargar el EC2 de la piscina de los casos, haciendo entonces disponible para procesar las solicitudes de otros más rápidamente.

    Para reducir el espacio y el tráfico de S3 (recuerde que usted paga por cada GB almacenados y transferidos), también recomendaría la compresión de cada archivo individual mediante un algoritmo estándar como gzip antes de subir a S3 y establecer el encabezado «Content-Encoding: gzip» con el fin de hacer automático uncompression de trabajo con los usuarios del navegador. Si el lenguaje de programación elegido es Java, sugiero tomar un vistazo al plugin de código webcache-s3-maven-plugin que he creado para subir recursos estáticos de proyectos web.

    Sobre el tiempo de procesamiento en la compresión de una carpeta, puede con frecuencia ser incapaz de asegurar que las carpetas van a ser comprimido en corto tiempo, con el fin de permitir al usuario descargar de inmediato, ya que eventualmente podría ser enorme carpetas que podría durar minutos o incluso horas para ser comprimido. Para ello le sugerimos que utilice la SQS y SNS de los servicios con el fin de permitir asincrónica compresión de procesamiento de, funcionaría de la siguiente manera:

    1. las solicitudes de usuario de la carpeta de compresión
    2. el frontend de la instancia de EC2 crea una compresión de la solicitud en una cola SQS
    3. un backend instancia de EC2, consume la compresión de la solicitud de la cola SQS
    4. la instancia de back-end de las descargas de los archivos de S3 a un EBS unidad, ya que los archivos generados serán temporales sugiero que elija para utilizar al menos m1.las instancias pequeñas con efímero tipo de discos, que son locales a la máquina virtual con el fin de reducir la latencia de e/S y el tiempo de procesamiento.
    5. después de que el archivo comprimido se genera, el servicio de carga el archivo en el S3, opcionalmente fijar el Objeto De Vencimiento propiedades, que le dirá S3 para eliminar el archivo de forma automática después de un cierto período de tiempo (de nuevo, para reducir los costes de almacenamiento), y publica una notificación de que el archivo está listo para ser descargado en un tema de SNS.
    6. si el usuario está en línea, lea la notificación del tema, y notificar al usuario de que el archivo zip está listo para ser descargado, si después de un tiempo, esta notificación no llega, usted puede decirle al usuario que la compresión está tomando más tiempo de lo esperado y el servicio se le comunicará por e-mail tan pronto como el archivo está listo para ser descargado.

    En este escenario podría tener dos Grupos de Auto Scaling, respectivamente frontend y backend, que pueden tener diferentes escalabilidad restricciones.

    • Parece una gran solución, pero funciona si él quiere compartir el contenido sobre la marcha? Creo que este motor de carga/descarga proceso podría consumir el tiempo y los usuarios que desea ser capaz de descargar un grupo de archivos se rendiría.
    • En caso de que uno necesita para descargar un puñado conjunto de archivos que el servidor EC2, en lugar de redirigir podría recuperar cada archivo de S3 y transmitir el archivo zip. No creo que esto sería un gran problema, ya que el tiempo de procesamiento y la latencia entre el S3 y EC2 instancias son generalmente más rápido que el usuario usuario enlace.
  2. 5

    Si se insiste en el servicio de los archivos zip directamente desde su instancia de EC2 con S3 solo será más complicado que los almacena localmente. Pero el S3 es mucho más durable que cualquier EC2 volúmenes de almacenamiento, por lo que me gustaría recomendar el uso de todas maneras si los archivos deben mantenerse mucho tiempo.

    Usted dice que usted no quiere exponer a las direcciones Url de archivos directamente. Si eso es sólo porque usted no quiere que la gente sea capaz de marcar a ellos y a pasar por alto su servicio de autenticación en el futuro, S3 tiene una gran solución:

    1 – Almacenar los archivos que desea servir (con cremallera hasta si se quiere de esa manera) en un privado S3.

    2 – Cuando un usuario solicita un archivo, la autenticación de la solicitud y, a continuación, redirigir las solicitudes válidas para un firmado, temporal S3 URL del archivo. Hay un montón de bibliotecas en una variedad de idiomas que puede crear las URLs.

    3 – el usuario se descarga El archivo directamente desde el S3, sin tener que pasar a través de la instancia de EC2. Que le ahorra ancho de banda y el tiempo, y probablemente le da la descarga más rápida posible para el usuario.

    Esto no exponer a una dirección URL, pero eso es probablemente correcto. No hay ningún problema si el usuario guarda la URL, porque no va a funcionar después de la fecha de caducidad se establece en él. Para mi el servicio me puse ese tiempo para 5 minutos. Ya está firmado digitalmente, el usuario no puede cambiar el tiempo de expiración de la URL sin invalidar la firma.

  3. 2

    Utilizando S3 es una mejor opción.este caso de uso. Las escalas mejor y ser más simple. ¿Por qué está usted preocupado acerca de ser lento? Traslados entre EC2 y S3 son bastante ágil.

  4. 0

    Algunas consideraciones:

    1. Volumen de EBS costos es varias veces mayor que la de S3.
    2. Volumen de EBS límites de tamaño de 16 TB, por lo que no debería ser un problema. Sin embargo, los volúmenes de que tamaño son muy caro.
    3. Asegúrese de que el cubo se encuentra en la misma región como sus instancias de EC2.
    4. Uso VPC extremos para comunicarse con el S3. Esto es mucho más rápido.
    5. Asegúrese de que la instancia de EC2 tipo tiene el ancho de banda de red que usted necesita. La CPU y la velocidad de la Red aumenta con el tamaño de la instancia.

    Me gustaría mantener todo en S3, descargar los archivos necesarios para zip en un paquete. A continuación, subir el zip a S3 y entregar al usuario un S3 Firmado URL para descargar de S3.

    Usted podría permitir que el usuario los descargue de la instancia de EC2, pero muchos usuarios tienen problemas de errores, vuelva a intentar problemas, lento ancho de banda, etc. Si los archivos zip son pequeños (menos de 100 MB) entregar localmente, de lo contrario, subir a S3 y dejar S3 trato con el usuario problemas con la descarga.

    Otra opción sería crear una función Lambda que crea el archivo zip y lo almacena en S3. Ahora usted no tiene que preocuparse acerca de ancho de banda de red o de escala. La función Lambda podría regresar a la URL de S3, que se entregue al navegador, o Lambda podría enviar al cliente un enlace. Buscar en SES para esto. Nota: La Lambda sistema de archivos sólo tiene 512 MB de espacio de memoria se pueden asignar hasta 1,5 GB. Si usted está generando archivos zip más grande que este, Lambda no funciona (en este momento). Sin embargo, usted puede crear varios archivos zip (part1, part2, …)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea