Directrices de rendimiento y patrones de diseño para S3 Express One Zone - Amazon Simple Storage Service

Directrices de rendimiento y patrones de diseño para S3 Express One Zone

Al crear aplicaciones que cargan y recuperan objetos de Amazon S3 Express One Zone, siga las directrices de nuestras prácticas recomendadas para optimizar el rendimiento. Para usar la clase de almacenamiento S3 Express One Zone, debe crear un bucket de directorio de S3. La clase de almacenamiento S3 Express One Zone no se admite para su uso con los buckets de uso general de S3.

Para ver las directrices de rendimiento para el resto de clases de almacenamiento de Amazon S3 y los buckets de uso general de S3, consulte Prácticas recomendadas para patrones de diseño: optimizar el rendimiento de Amazon S3.

Para obtener el mejor rendimiento para su aplicación al utilizar la clase de almacenamiento S3 Express One Zone y los buckets de directorio, recomendamos las siguientes directrices y patrones de diseño.

Coubique el almacenamiento S3 Express One Zone con sus recursos informáticos de AWS

Cada bucket de directorio se almacena en una única zona de disponibilidad que seleccione al crear el bucket. Para empezar, puede crear un nuevo bucket de directorio en una zona de disponibilidad local para sus cargas de trabajo o recursos informáticos. A continuación, puede iniciar de inmediato lecturas y escrituras de muy baja latencia. Los buckets de directorio son los primeros buckets de S3 en los que puede elegir la zona de disponibilidad en una Región de AWS para reducir la latencia entre la computación y el almacenamiento.

Si accede a los buckets de directorio de todas las zonas de disponibilidad, la latencia aumentará. Para optimizar el rendimiento, le recomendamos que acceda a un bucket de directorio desde instancias de Amazon Elastic Container Service, Amazon Elastic Kubernetes Service y Amazon Elastic Compute Cloud que estén ubicadas en la misma zona de disponibilidad siempre que sea posible.

Buckets de directorio

Cada bucket de directorio puede admitir cientos de miles de transacciones por segundo (TPS). A diferencia de los buckets de uso general, los buckets de directorio organizan las claves jerárquicamente en directorios en lugar de prefijos. Un prefijo es una cadena de caracteres al principio del nombre de la clave de objeto. Puede considerar los prefijos como una forma de organizar los datos similar a los directorios. No obstante, los prefijos no son directorios.

Los prefijos organizan los datos en un espacio de nombres plano dentro de buckets de uso general y no hay límites en cuanto al número de prefijos dentro de un bucket de este tipo. Cada prefijo puede recibir al menos 3500 solicitudes PUT/POST/DELETE o 5500 solicitudes GET/HEAD por segundo. También puede paralelizar las solicitudes entre varios prefijos para escalar el rendimiento. Sin embargo, este escalado, en el caso de las operaciones de lectura y escritura, se produce gradualmente y no es instantánea. A medida que los buckets de uso general escalan según la nueva tasa de solicitudes más elevada, es posible que aparezcan algunos errores de código de estado HTTP 503 (servicio no disponible).

Con un espacio de nombres jerárquico, el delimitador de la clave del objeto es importante. El único delimitador admitido es una barra inclinada (/). Los directorios se determinan mediante los límites de los delimitadores. Por ejemplo, la clave del objeto dir1/dir2/file1.txt hace que los directorios dir1/ y dir2/ se creen automáticamente y que el objeto file1.txt se añada al directorio /dir2 de la ruta dir1/dir2/file1.txt.

Los directorios que se crean cuando los objetos se cargan en los buckets de directorio no tienen límites de TPS por prefijo y se ajustan automáticamente a una escala previa para reducir la posibilidad de que se produzcan errores HTTP 503 (servicio no disponible). Este escalado automático permite a sus aplicaciones paralelizar las solicitudes de lectura y escritura dentro de los directorios y entre ellos, según sea necesario.

Uso en paralelo de solicitudes de escalado horizontal del bucket de directorio

Puede lograr el mejor rendimiento emitiendo varias solicitudes simultáneas a los buckets de directorio para distribuir las solicitudes en conexiones independientes y maximizar así el ancho de banda accesible. S3 Express One Zone no tiene límites en cuanto al número de conexiones que se realizan en su bucket de directorio. Los directorios individuales pueden escalar el rendimiento de forma horizontal y automática cuando se realizan grandes cantidades de escrituras simultáneas en el mismo directorio.

Cuando se crea inicialmente una clave de objeto y su nombre de clave incluye un directorio, el directorio se crea automáticamente para el objeto. Las cargas de objetos posteriores a ese mismo directorio no requieren que se cree el directorio, lo que reduce la latencia de las cargas de objetos a los directorios existentes.

Aunque se admiten estructuras de directorios superficiales y exhaustivas para almacenar objetos dentro de un bucket de directorio, los buckets de directorio se escalan automáticamente de forma horizontal, con una latencia más baja en cargas simultáneas en el mismo directorio o en elementos secundarios del directorio paralelo.

Uso de la autenticación basada en sesiones

S3 Express One Zone y los buckets de directorio admiten un nuevo mecanismo de autorización basado en sesiones para autenticar y autorizar las solicitudes a un bucket de directorio. Con la autenticación basada en sesiones, los SDK de AWS utilizan automáticamente la operación de la API CreateSession para crear un token de sesión temporal que se puede utilizar para una autorización de baja latencia de las solicitudes de datos a un bucket de directorio.

Los SDK de AWS utilizan la operación de la API CreateSession para solicitar credenciales temporales y, a continuación, crean y actualizan automáticamente los tokens en su nombre cada 5 minutos. Para aprovechar los beneficios de rendimiento de la clase de almacenamiento S3 Express One Zone, le recomendamos que utilice los SDK de AWS para iniciar y administrar la solicitud de la API CreateSession. Para obtener más información acerca de este modelo basado en sesiones, consulte Autorización de operaciones de la API de puntos de conexión zonales con CreateSession.

Prácticas recomendadas adicionales para la suma de comprobación de S3

S3 Express One Zone le ofrece la opción de elegir el algoritmo de suma de comprobación que se utiliza para validar los datos durante la carga o descarga. Puede seleccionar uno de los siguientes algoritmos de comprobación de integridad de datos Secure Hash Algoritms (SHA) o Cyclic Redundancy Check (CRC): CRC32, CRC32C, SHA-1 y SHA-256. Las sumas de comprobación basadas en MD5 no son compatibles con la clase de almacenamiento S3 Express One Zone.

CRC32 es la suma de comprobación predeterminada que utilizan los SDK de AWS al transmitir datos hacia o desde S3 Express One Zone. Recomendamos utilizar CRC32 y CRC32C para obtener el mejor rendimiento con la clase de almacenamiento S3 Express One Zone.

Utilice la versión más reciente de los SDK de AWS y de las bibliotecas de tiempo de ejecución comunes

Varios de los SDK de AWS también incluyen las bibliotecas de AWS Common Runtime (CRT) para acelerar aún más el rendimiento en los clientes de S3. Estos SDK incluyen el AWS SDK for Java 2.x, el AWS SDK for C++ y el AWS SDK for Python (Boto3). El cliente S3 basado en CRT transfiere objetos desde y hacia S3 Express One Zone con una mejora del rendimiento y la fiabilidad, ya que utiliza automáticamente la operación de la API de carga multiparte y las búsquedas por rango de bytes para automatizar el escalado horizontal de conexiones.

Para lograr el máximo rendimiento con la clase de almacenamiento S3 Express One Zone, recomendamos el uso de la versión más reciente de los SDK de AWS que incluyen las bibliotecas CRT o el uso de AWS Command Line Interface (AWS CLI).

Soluciones de problemas de rendimiento

Reintento de solicitudes de aplicaciones sensibles a la latencia

S3 Express One Zone está diseñado específicamente para ofrecer niveles uniformes de alto rendimiento sin realizar ajustes adicionales. Sin embargo, establecer valores de tiempo de espera y reintentos agresivos puede ayudar aún más a lograr una latencia y un rendimiento uniformes. 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.

Emparejamiento de bibliotecas de AWS Common Runtime (CRT) y tipos de instancias de Amazon EC2

Las aplicaciones que realizan un gran número de operaciones de lectura y escritura probablemente necesitan más memoria o capacidad de computación que las aplicaciones que no. Al lanzar sus instancias de Amazon Elastic Compute Cloud (Amazon EC2) para su carga de trabajo de rendimiento exigente, seleccione los tipos de instancia que tengan la cantidad de estos recursos que necesita su aplicación. El almacenamiento de alto rendimiento S3 Express One Zone se empareja de forma ideal con tipos de instancias más grandes y más nuevos, con una mayor cantidad de memoria del sistema y CPU y GPU más potentes que pueden aprovechar el almacenamiento de mayor rendimiento. También recomendamos utilizar las versiones más recientes de los SDK de AWS habilitados para CRT, que pueden acelerar mejor las solicitudes de lectura y escritura en paralelo.

Uso de la autenticación basada en sesiones en los SDK de AWS en lugar de las API de REST de HTTP

Con Amazon S3, también es posible optimizar el rendimiento cuando se utilizan solicitudes de API de REST de HTTP siguiendo las mismas prácticas recomendadas que forman parte de los SDK de AWS. Sin embargo, con el mecanismo de autorización y autenticación basado en sesiones que utiliza S3 Express One Zone, le recomendamos fehacientemente que utilice los SDK de AWS para administrar CreateSession y su token de sesión administrada. Los SDK de AWS crean y actualizan automáticamente los tokens en su nombre mediante la operación de la API CreateSession. El uso de CreateSession ahorra la latencia de ida y vuelta por solicitud al AWS Identity and Access Management (IAM) para autorizar cada solicitud.