Directrices de rendimiento para Amazon S3
Al crear aplicaciones que cargan y recuperan objetos de Amazon S3, siga las directrices de nuestras prácticas recomendadas para optimizar el rendimiento. También ofrecemos con más detall Patrones de diseño de rendimiento para Amazon S3 .
Para obtener el mejor rendimiento para su aplicación en Amazon S3, recomendamos las siguientes directrices.
Temas
- Mida el rendimiento
- Escalado horizontal de las conexiones de almacenamiento
- Uso de recuperaciones de rango de byte
- Reintento de solicitudes de aplicaciones sensibles a la latencia
- Combinación de Amazon S3 (almacenamiento) y Amazon EC2 (cómputo) en la misma Región de AWS
- Uso de Amazon S3 Transfer Acceleration para minimizar la latencia generada por la distancia
- Uso de la versión más reciente de los AWS SDK
Mida el rendimiento
Al optimizar el rendimiento, fíjese en los requisitos de rendimiento de red, CPU y DRAM. Dependiendo de la combinación de demandas de estos otros recursos, es posible que merezca la pena evaluar otros tipos de instancias Amazon EC2. Para obtener más información acerca de los tipos de instancias, consulte Instance types en la Guía del usuario de Amazon EC2.
También es útil fijarse en el tiempo de búsqueda de DNS, la latencia y la velocidad de transferencia de datos mediante herramientas de análisis HTTP al medir el rendimiento.
Para comprender los requisitos de rendimiento y optimizar el rendimiento de la aplicación, también puede supervisar las respuestas de error 503 que recibe. La monitorización de ciertas métricas de rendimiento puede generar gastos adicionales. Para obtener más información, consulte Precios de Amazon S3
Monitorizar el número de respuestas de error de estado 503 (ralentización)
Para monitorizar el número de respuestas de error de estado 503 que recibe, puede utilizar una de las siguientes opciones:
Use las métricas de solicitud de Amazon CloudWatch para Amazon S3. Las métricas de solicitud de CloudWatch incluyen una métrica para las respuestas de estado 5xx. Para obtener más información acerca de las métricas de solicitud de CloudWatch, consulte Monitorización de métricas con Amazon CloudWatch.
Utilice el recuento de errores 503 (servicio no disponible) disponible en la sección de métricas avanzadas de Lente de almacenamiento de Amazon S3. Para obtener más información, consulte Uso de métricas de Lente de almacenamiento de S3 para mejorar el rendimiento.
Use el registro de acceso al servidor de Amazon S3. Con el registro de acceso al servidor, puede filtrar y revisar todas las solicitudes que reciben respuestas 503 (error interno). También puede usar Amazon Athena para analizar los registros. Para obtener más información sobre el registro de acceso del servidor, consulte Registro de solicitudes con registro de acceso al servidor.
Al monitorizar la cantidad de códigos de error de estado HTTP 503, puede obtener información valiosa sobre qué prefijos, claves o buckets reciben la mayor cantidad de solicitudes de limitación.
Escalado horizontal de las conexiones de almacenamiento
La distribución de las solicitudes entre muchas conexiones es un patrón de diseño habitual para escalar horizontalmente el rendimiento. Al crear aplicaciones de alto rendimiento, piense en Amazon S3 como un sistema distribuido muy grande, no como un punto de enlace de una sola red como un servidor de almacenamiento tradicional. Puede lograr el mejor rendimiento emitiendo varias solicitudes simultáneas a Amazon S3. Distribuya estas solicitudes a través de conexiones separadas para maximizar el ancho de banda accesible desde Amazon S3. Amazon S3 no tiene límites en cuanto al número de conexiones que se realizan en su bucket.
Uso de recuperaciones de rango de byte
Al usar el encabezado HTTP Range
en una solicitud GET Object, puede recuperar un rango de byte de un objeto, transfiriendo solo la parte especificada. Puede usar conexiones simultáneas a Amazon S3 para recuperar otros rangos de byte desde dentro del mismo objeto. Esto le ayuda a lograr un rendimiento total mayor frente a una sola solicitud de todo el objeto. La recuperación de rangos más pequeños de un objeto grande también permite que su aplicación mejore los tiempos de reintento al interrumpirse las solicitudes. Para obtener más información, consulte Descarga de objetos.
Los tamaños típicos para las solicitudes de rango de byte son 8 MB o 16 MB. Si los objetos aplican PUT mediante una carga multiparte, aplicarles GET en los mismos tamaños de parte (o al menos alinearlos con los límites de parte) es una buena práctica para lograr el mejor rendimiento. Las solicitudes GET pueden ocuparse directamente de partes individuales; por ejemplo, GET ?partNumber=N.
Reintento de solicitudes de aplicaciones sensibles a la latencia
Los reintentos y tiempos de espera agresivos contribuyen a potenciar una latencia coherente. Teniendo en cuenta la gran escala de Amazon S3, si la primera solicitud es lenta, es probable que una solicitud que se ha intentado de nuevo tome otra ruta y se realice correctamente. Los SDK de AWS cuentan con un tiempo de espera configurable y valores de reintento que puede ajustar a las tolerancias de su aplicación específica.
Combinación de Amazon S3 (almacenamiento) y Amazon EC2 (cómputo) en la misma Región de AWS
Aunque los nombres del bucket de S3 son únicos a nivel global, cada uno de ellos se almacena en una región que se selecciona al crearlos. Para obtener más información sobre las pautas de nomenclatura de los buckets, consulte Descripción general de los buckets y Reglas de nomenclatura de buckets. Para optimizar el rendimiento, recomendamos que acceda al bucket desde las instancias de Amazon EC2 en la misma Región de AWS cuando sea posible. Esto ayuda a reducir los costos de la transferencia de datos y la latencia de red.
Para obtener más información acerca de los costes de las transferencias de datos, consulte Precios de Amazon S3
Uso de Amazon S3 Transfer Acceleration para minimizar la latencia generada por la distancia
Configuración de transferencias de archivos rápidas y seguras con Amazon S3 Transfer Acceleration administra transferencias de archivos rápidas, fáciles y seguras a través de grandes distancias geográficas entre el cliente y un bucket de S3. Transfer Acceleration aprovecha las ubicaciones de borde distribuidas globalmente en Amazon CloudFront. A medida que los datos llegan a una ubicación de borde, se redirigen a Amazon S3 a través de una ruta de red optimizada. Transfer Acceleration es ideal para transferir desde gigabytes hasta terabytes de datos con frecuencia entre continentes. También resulta útil para los clientes que cargan en un bucket centralizado desde todo el mundo.
Puede utilizar la herramienta de comparación de velocidad de Amazon S3 Transfer Acceleration
Uso de la versión más reciente de los AWS SDK
Los SDK de AWS ofrecen compatibilidad integrada con muchas de las directrices recomendadas para optimizar el rendimiento de Amazon S3. Asimismo, proporcionan una API más sencilla para aprovechar Amazon S3 desde dentro de una aplicación y se actualizan con frecuencia para seguir las prácticas recomendadas más recientes. Por ejemplo, los SDK incluyen lógica para reintentar solicitudes automáticamente en errores HTTP 503 e invierten en código para responder a las conexiones lentas y adaptarse a ellas.
Los SDK también ofrecen un gestor de transferencias, que automatiza el escalado horizontal de conexiones para lograr miles de solicitudes por segundo, empleando solicitudes de rango de byte si procede. Es importante usar la versión más reciente de los SDK de AWS para obtener las características de optimización de rendimiento más recientes.
También puede optimizar el rendimiento al usar solicitudes de la API de REST de HTTP. Al usar la API de REST, debe seguir las mismas prácticas recomendadas que forman parte de los SDK. Permita los tiempos de espera y los reintentos en las solicitudes lentas y varias conexiones para que la recuperación de datos de objeto en paralelo sea posible. Para obtener información sobre el uso de la API de REST, consulte la referencia de la API de Amazon Simple Storage Service.