¿Debería utilizar una alternativa de S3 para el almacenamiento de objetos?

Shutterstock / Gorodenkoff

El Simple Storage Service (S3) de Amazon proporciona una interfaz muy útil para almacenar objetos en un almacenamiento en la nube redundante, donde no tiene que preocuparse por el hardware subyacente. Además de ser un servicio ofrecido por Amazon, también es una API estándar de la industria y hay muchos servicios compatibles con ella.

¿Qué es compatible con S3?

En muchos casos, si cambia a otro proveedor de la nube, tendrá que volver a trabajar una gran parte de su aplicación. Sin embargo, si usa S3 como su backend de almacenamiento de objetos, podrá cambiar sin problemas a muchos otros servicios.

Esto se debe a que S3 es un estándar API abierto. AWS Simple Storage Service es solo una implementación de este estándar; es nativo y obviamente tendrá el mejor soporte, pero hay otros servicios que ofrecerán un rendimiento y estabilidad aceptables, a menudo a un costo menor.

Cambiar a estos servicios es fácil: simplemente necesita cambiar el extremo de la URL que usa su aplicación y, por lo general, es bueno realizar algunos pequeños cambios en la administración de claves. Tendrá que migrar sus datos con rclone, pero no es un proceso difícil, solo es largo en algunos casos.

No es ningún secreto que AWS es caro. S3 no es diferente, y aunque para almacenar archivo es muy barato, en realidad acceder a esos archivos no lo es. En una carga de trabajo pesada típica de lectura / escritura que ofrece archivos en vivo a los usuarios, el almacenamiento de archivos es generalmente económico; los costos más altos son en realidad los cargos por transferencia de datos de AWS y los cargos por solicitud de S3:

Al ver un análisis de Explorador de costos como este, puede tener la tentación de considerar un servicio de terceros que será más económico en costos de transferencia de datos para su carga de trabajo.

Los dos principales competidores de AWS S3 provienen de Google y Microsoft. Google tiene su nombre no creativo "Cloud Storage" y Microsoft Azure tiene Azure Blob Storage. El almacenamiento de Google es compatible con S3 y también es relativamente fácil de migrar. Azure, por otro lado, no es compatible con S3, aunque existen herramientas como S3Proxy que pueden parchearlos.

Sin embargo, todos los servicios de almacenamiento de los tres grandes proveedores de la nube le cobrarán tarifas elevadas por los datos. Están diseñados para clientes corporativos, y si usted es una pequeña empresa que busca minimizar los costos, debería buscar en otra parte. Hay otros proveedores de nube alternativos como Digital Ocean y Vultr que ofrecen modelos de precios más ajustados con un servicio de calidad similar.

Océano digital

Digital Ocean es un proveedor en la nube diseñado para ser simple. Si bien no ofrece tantas funciones como los principales proveedores como AWS, generalmente funciona bien gracias a los servicios que ofrece. Uno de esos servicios es el almacenamiento de objetos, con depósitos llamados Spaces, y eso es lo que le recomendaremos si está buscando alejarse de AWS.

Los espacios son bastante sencillos. La tarifa base es de $ 5 por mes e incluye 250 GB de almacenamiento junto con un TB completo de transferencia de datos salientes. Este es un trato increíblemente bueno: el mismo uso costaría más de $ 90 en el AWS S3.

El almacenamiento de datos adicional cuesta $ 0.02 por GB, bastante estándar en comparación con S3 (aunque más alto si planea usar un almacenamiento de archivo más barato), y los datos adicionales tienen un precio razonable de $ 0.01 por GB transferido, que es un 90% menos que el precio de AWS.

Por supuesto, esto tiene algunas limitaciones y, desafortunadamente, hay muchas más desventajas y limitaciones asociadas a esta gran oferta.

  • 750 solicitudes, por dirección IP, a todos sus espacios.
  • 150 operaciones combinadas por segundo para cualquier espacio, excluidas las solicitudes GET.
  • 240 transacciones en total, incluidas las solicitudes GET.
  • 5 solicitudes PUT o COPY cada 5 minutos a cualquier objeto individual en un espacio

Si bien no es bueno tener estos límites de velocidad, los límites son bastante generosos y probablemente no los alcanzará. Si vas a ir más allá, puedes minimizar el efecto de las mismas disponiendo de más espacios. Si no está seguro, puede habilitar las métricas de depósito en S3 para verificar el uso actual.

RELACIONADO: Cómo habilitar y ver métricas de solicitud para un bucket de AWS S3 en CloudWatch

Además, los espacios con más de 3 millones de objetos o 1,5 millones con versiones habilitadas pueden requerir "períodos de mantenimiento intermitentes" para garantizar un rendimiento constante. Sin embargo, personalmente tengo un depósito con más de 2 millones de objetos versionados que no parece haber experimentado un tiempo de inactividad significativo en 6 meses, por lo que esto puede no ser una ocurrencia común.

Un gran inconveniente de Spaces sobre S3 es la interfaz. Spaces es simple y si solo está buscando cargar el contenido de su sitio web o almacenar algunos archivos básicos, la interfaz web le permitirá cargar, descargar y cambiar la mayoría de las configuraciones. Sin embargo, si está archivando muchos archivos o necesita alguna configuración avanzada, francamente es bastante malo y tendrá que trabajar en él principalmente en la API S3.

Por ejemplo: Spaces ni siquiera tiene un editor web para seleccionar la configuración del ciclo de vida, que administra el almacenamiento de versiones antiguas de los objetos utilizados como respaldo en caso de eliminación del usuario. Esto también significa que no puede acceder o eliminar objetos versionados sin enumerar las versiones a través de la API y acceder a ellas directamente a través del ID de versión.

Tampoco tienen mucha documentación. Para habilitar el control de versiones, por ejemplo, tuvimos que consultar la documentación de S3 para usar el punto final PutBucketVersioning, en su mayoría ignorado, que afortunadamente es compatible con Spaces a pesar de ser ignorado en los documentos DO. Deberá habilitarlo a través de este punto final:

PUT ?versioning

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>

Y luego habilite el vencimiento de la versión:

PUT ?lifecycle

<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Rule>
    <ID>Bucket</ID>
    <Prefix>*</Prefix>
    <Status>Enabled</Status>
    <NoncurrentVersionExpiration>
      <NoncurrentDays>90</NoncurrentDays>
    </NoncurrentVersionExpiration>
  </Rule>
</LifecycleConfiguration>

Las claves API también son muy simples. No tendrá control granular sobre depósitos, objetos o cualquier otra cosa que venga con AWS IAM. Esto puede ser un problema si planea entregar las llaves a un tercero.


En general, la experiencia de Digital Ocean no se acerca a lo bueno que es el AWS S3. Pero si está de acuerdo con las limitaciones y no le importa usar la API para ciertas tareas, definitivamente puede ahorrarle mucho dinero en costos de ancho de banda.

Auto anfitrión

Dado que S3 es un estándar abierto, también es algo que puede alojar por su cuenta, lo que será preferible para muchas personas. Hay muchas herramientas para hacer esto, pero una de las mejores es MinIO, que se ejecuta en Kubernetes (K8s).

Estar en K8 significa que puede ejecutarlo en cualquier nube pública, incluida la ejecución a través de servicios K8 sin servidor como AWS EKS. Pero en este caso, aún estaría sujeto a costos de ancho de banda.

Donde realmente brilla MinIO es con servidores dedicados, soluciones de nube híbrida y ejecución en centros de datos locales. Si está pagando por una conexión de red dedicada a un servidor, no se verá afectado si satura esa conexión. Esto puede hacer que el almacenamiento autohospedado sea muy rentable si planea entregar una gran cantidad de datos a los usuarios finales.

Además, ejecutar en su propio hardware no está sujeto a las mismas limitaciones que servicios como S3. Puede alojar MinIO en servidores ultrarrápidos y obtener un mejor rendimiento en cargas de trabajo de lectura / escritura pesadas (y no se le cobrará por las solicitudes). Por supuesto, se le pedirá que pague los costos de hardware para este servicio.

Donde falla es en la redundancia: debido a que el S3 almacena sus datos en tantos lugares diferentes, básicamente está garantizado que siempre funcionará y nunca perderá sus datos, excepto por un meteoro gigante. MinIO, por otro lado, se puede alojar en un solo servidor o mediante una distribución distribuida. Si está alojando en un solo servidor, se arruinará si su instancia falla. Es la opción más barata, pero recomendamos encarecidamente varios servidores en un clúster o al menos hacer algún tipo de copia de seguridad en S3.

MinIO es libre de alojar bajo la licencia GNU AGPL, pero no recibirá ningún soporte. Las licencias empresariales comienzan en $ 1000 por mes y brindan soporte las 24 horas del día, los 7 días de la semana, así como un "botón de pánico", que tendrá sus propios ingenieros de recuperación de datos listos para ayudarlo a solucionar los principales fallos del servidor.

¿Qué te ha parecido?
Subir