in

AWS Fargate permite un inicio de contenedor más rápido mediante Seekable OCI | Servicios web de Amazon

Si bien el desarrollo con contenedores se está convirtiendo en una forma cada vez más popular de implementar y escalar aplicaciones, todavía hay áreas en las que se pueden realizar mejoras. Uno de los principales problemas con el escalado de aplicaciones en contenedores es el largo tiempo de inicio, especialmente durante el escalado cuando es necesario agregar instancias más nuevas. Este problema puede tener un impacto negativo en la experiencia del cliente, por ejemplo, cuando un sitio web necesita escalar para atender tráfico adicional.

A trabajo de investigación muestra que las descargas de imágenes del contenedor representan el 76 por ciento del tiempo de inicio del contenedor, pero en promedio solo se necesita el 6,4 por ciento de los datos para que el contenedor comience a realizar un trabajo útil. Iniciar y escalar aplicaciones en contenedores requiere descargar imágenes de contenedor desde un registro de contenedor remoto. Esto puede introducir una latencia no trivial, ya que se debe descargar y descomprimir la imagen completa antes de que se puedan iniciar las aplicaciones.

Una solución a este problema es la carga diferida (también conocida como carga asíncrona) de imágenes de contenedor. Este enfoque descarga datos del registro del contenedor en paralelo con el inicio de la aplicación, como stargz-snapshotterun proyecto que tiene como objetivo mejorar el tiempo de inicio general del contenedor.

El año pasado, presentamos Seekable OCI (SOCI), una tecnología de código abierto de Amazon Web Services (AWS) que permite que los tiempos de ejecución del contenedor implementen la carga diferida de la imagen del contenedor para iniciar las aplicaciones más rápido sin modificar las imágenes del contenedor. Como parte de ese esfuerzo, abrimos Instantánea SOCIun complemento de instantáneas que permite la carga diferida con SOCI en containerd.

Soporte de AWS Fargate para SOCI
Hoy, me complace compartir que AWS Fargate ahora es compatible con Seekable OCI (SOCI), lo que ayuda a que las aplicaciones se implementen y escalen más rápido al permitir que los contenedores se inicien sin esperar a descargar la imagen completa del contenedor. En el momento del lanzamiento, esta nueva capacidad está disponible para las aplicaciones de Amazon Elastic Container Service (Amazon ECS) que se ejecutan en AWS Fargate.

Aquí hay un vistazo rápido para mostrar cómo funciona el soporte de AWS Fargate para SOCI:

SOCI funciona creando un índice (índice SOCI) de los archivos dentro de una imagen de contenedor existente. Este índice es un habilitador clave para lanzar contenedores más rápido, brindando la capacidad de extraer un archivo individual de una imagen de contenedor sin tener que descargar la imagen completa. Sus aplicaciones ya no necesitan esperar para completar la extracción y el desempaquetado de una imagen de contenedor antes de que sus aplicaciones comiencen a ejecutarse. Esto le permite implementar y escalar aplicaciones más rápidamente y reducir el tiempo de implementación para las actualizaciones de aplicaciones.

Se genera un índice SOCI y se almacena por separado de las imágenes del contenedor. Esto significa que las imágenes de su contenedor no necesitan convertirse para usar SOCI, por lo tanto, no se rompe la seguridad basada en el algoritmo hash seguro (SHA), como la firma de imágenes del contenedor. Luego, el índice se almacena en el registro junto con la imagen del contenedor. En el lanzamiento, el soporte de AWS Fargate para SOCI funciona con Amazon Elastic Container Registry (Amazon ECR).

Cuando utiliza Amazon ECS con AWS Fargate para ejecutar sus imágenes en contenedores indexadas con SOCI, AWS Fargate detecta automáticamente si existe un índice SOCI para la imagen e inicia el contenedor sin esperar a que se extraiga la imagen completa. Esto también significa que AWS Fargate seguirá ejecutando imágenes de contenedores que no tienen índices SOCI.

Empecemos
Hay dos formas de crear índices SOCI para imágenes de contenedores.

  • Utilice el generador de índices SOCI de AWSGenerador de índices SOCI de AWS es una solución sin servidor para indexar imágenes de contenedores en la nube de AWS. Esta pila de AWS CloudFormation implementa una regla de Amazon EventBridge para identificar eventos de acción de Amazon ECR e invoca una función de AWS Lambda para que coincida con el filtro definido. Luego, otra función de AWS Lambda genera y envía índices SOCI a repositorios en el registro de Amazon ECR.
  • Crear índices SOCI manualmente – Este enfoque brinda más flexibilidad sobre cómo se crean los índices SOCI, incluso para las imágenes de contenedores existentes en los repositorios de Amazon ECR. Para crear índices SOCI, puede utilizar el soci CLI proporcionado por el soci-instantánea proyecto.

El Generador de índices SOCI de AWS le proporciona un proceso automatizado para comenzar y crear índices SOCI para las imágenes de su contenedor. El sociCLI le brinda más flexibilidad en torno a la generación de índices y la capacidad de integrar de forma nativa la generación de índices en sus canalizaciones de CI/CD.

En este artículo, genero manualmente índices SOCI usando el soci CLI de la soci-snapshotter proyecto.

Crear un repositorio y enviar imágenes de contenedores
Primero, creo un repositorio de Amazon ECR llamado pytorch-socipara mi imagen de contenedor usando AWS CLI.

$ aws ecr create-repository --region us-east-1 --repository-name pytorch-soci

Mantengo el resultado del URI de Amazon ECR y lo defino como una variable para que me sea más fácil referirme al repositorio en el siguiente paso.

$ ECRSOCIURI=xyz.dkr.ecr.us-east-1.amazonaws.com/pytorch-soci:latest

Para la aplicación de muestra, utilizo una imagen de contenedor de entrenamiento de PyTorch (basada en CPU) de AWS Deep Learning Containers. Yo uso el nerdctl CLI para extraer la imagen del contenedor porque, de forma predeterminada, el motor de Docker almacena la imagen del contenedor en el almacén de imágenes del motor de Docker, no en el almacén de imágenes del contenedor.

$ SAMPLE_IMAGE="763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04" 
$ aws ecr get-login-password --region us-east-1 | sudo nerdctl login --username AWS --password-stdin xyz.dkr.ecr.ap-southeast-1.amazonaws.com
$ sudo nerdctl pull --platform linux/amd64 $SAMPLE_IMAGE

Luego, etiqueto la imagen del contenedor para el repositorio que creé en el paso anterior.

$ sudo nerdctl tag $SAMPLE_IMAGE $ECRSOCIURI

A continuación, debo insertar la imagen del contenedor en el repositorio de ECR.

$ sudo nerdctl push $ECRSOCIURI

En este punto, la imagen de mi contenedor ya está en mi repositorio de Amazon ECR.

Crear índices SOCI
A continuación, necesito crear el índice SOCI.

Un índice SOCI es un artefacto que permite la carga diferida de imágenes de contenedores. Un índice SOCI consta de 1) un manifiesto de índice SOCI y 2) un conjunto de zTOC. La siguiente imagen ilustra los componentes en un manifiesto de índice SOCI y cómo se refiere a un manifiesto de imagen de contenedor.

El manifiesto del índice SOCI contiene la lista de zTOC y una referencia a la imagen para la que se generó el manifiesto. Un zTOC, o tabla de contenido para datos comprimidos, consta de dos partes:

  1. TOC, una tabla de contenido que contiene los metadatos del archivo y el desplazamiento correspondiente en el archivo TAR descomprimido.
  2. zInfo, una colección de puntos de control que representan el estado del motor de compresión en varios puntos de la capa.

Para obtener más información sobre el concepto y el término, visite soci-snapshotter Terminología página.

Antes de poder crear índices SOCI, necesito instalar el sociCLI. Para obtener más información sobre cómo instalar el socivisita Primeros pasos con soci-snapshotter.

Para crear índices SOCI, utilizo el soci create dominio.

$ sudo soci create $ECRSOCIURI
layer sha256:4c6ec688ebe374ea7d89ce967576d221a177ebd2c02ca9f053197f954102e30b -> ztoc skipped
layer sha256:ab09082b308205f9bf973c4b887132374f34ec64b923deef7e2f7ea1a34c1dad -> ztoc skipped
layer sha256:cd413555f0d1643e96fe0d4da7f5ed5e8dc9c6004b0731a0a810acab381d8c61 -> ztoc skipped
layer sha256:eee85b8a173b8fde0e319d42ae4adb7990ed2a0ce97ca5563cf85f529879a301 -> ztoc skipped
layer sha256:3a1b659108d7aaa52a58355c7f5704fcd6ab1b348ec9b61da925f3c3affa7efc -> ztoc skipped
layer sha256:d8f520dcac6d926130409c7b3a8f77aea639642ba1347359aaf81a8b43ce1f99 -> ztoc skipped
layer sha256:d75d26599d366ecd2aa1bfa72926948ce821815f89604b6a0a49cfca100570a0 -> ztoc skipped
layer sha256:a429d26ed72a85a6588f4b2af0049ae75761dac1bb8ba8017b8830878fb51124 -> ztoc skipped
layer sha256:5bebf55933a382e053394e285accaecb1dec9e215a5c7da0b9962a2d09a579bc -> ztoc skipped
layer sha256:5dfa26c6b9c9d1ccbcb1eaa65befa376805d9324174ac580ca76fdedc3575f54 -> ztoc skipped
layer sha256:0ba7bf18aa406cb7dc372ac732de222b04d1c824ff1705d8900831c3d1361ff5 -> ztoc skipped
layer sha256:4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888 -> ztoc sha256:0b4d78c856b7e9e3d507ac6ba64e2e2468997639608ef43c088637f379bb47e4
layer sha256:089632f60d8cfe243c5bc355a77401c9a8d2f415d730f00f6f91d44bb96c251b -> ztoc sha256:f6a16d3d07326fe3bddbdb1aab5fbd4e924ec357b4292a6933158cc7cc33605b
layer sha256:f18dd99041c3095ade3d5013a61a00eeab8b878ba9be8545c2eabfbca3f3a7f3 -> ztoc sha256:95d7966c964dabb54cb110a1a8373d7b88cfc479336d473f6ba0f275afa629dd
layer sha256:69e1edcfbd217582677d4636de8be2a25a24775469d677664c8714ed64f557c3 -> ztoc sha256:ac0e18bd39d398917942c4b87ac75b90240df1e5cb13999869158877b400b865

De la salida anterior, puedo ver que sociCLI creó zTOC para cuatro capas, lo que significa que solo estas cuatro capas se extraerán de forma perezosa y las otras capas de imagen del contenedor se descargarán por completo antes de que comience la imagen del contenedor. Esto se debe a que hay menos impacto en el tiempo de lanzamiento en capas de imagen de contenedor muy pequeñas de carga diferida. Sin embargo, puede configurar este comportamiento utilizando el --min-layer-size marca cuando corres soci create.

Verificar y enviar índices SOCI
El soci CLI también proporciona varios comandos que pueden ayudarlo a revisar los índices SOCI que se han generado.

Para ver una lista de todos los manifiestos de índice, puedo ejecutar el siguiente comando.

$ sudo soci index list

DIGEST                                                                     SIZE    IMAGE REF                                                                                   PLATFORM       MEDIA TYPE                                    CREATED
sha256:ea5c3489622d4e97d4ad5e300c8482c3d30b2be44a12c68779776014b15c5822    1931    xyz.dkr.ecr.us-east-1.amazonaws.com/pytorch-soci:latest                                     linux/amd64    application/vnd.oci.image.manifest.v1+json    10m4s ago
sha256:ea5c3489622d4e97d4ad5e300c8482c3d30b2be44a12c68779776014b15c5822    1931    763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04    linux/amd64    application/vnd.oci.image.manifest.v1+json    10m4s ago

Si bien es opcional, si necesito ver la lista de zTOC, puedo usar el siguiente comando.

$ sudo soci ztoc list
DIGEST                                                                     SIZE        LAYER DIGEST
sha256:0b4d78c856b7e9e3d507ac6ba64e2e2468997639608ef43c088637f379bb47e4    2038072     sha256:4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
sha256:95d7966c964dabb54cb110a1a8373d7b88cfc479336d473f6ba0f275afa629dd    11442416    sha256:f18dd99041c3095ade3d5013a61a00eeab8b878ba9be8545c2eabfbca3f3a7f3
sha256:ac0e18bd39d398917942c4b87ac75b90240df1e5cb13999869158877b400b865    36277264    sha256:69e1edcfbd217582677d4636de8be2a25a24775469d677664c8714ed64f557c3
sha256:f6a16d3d07326fe3bddbdb1aab5fbd4e924ec357b4292a6933158cc7cc33605b    10152696    sha256:089632f60d8cfe243c5bc355a77401c9a8d2f415d730f00f6f91d44bb96c251b

Esta serie de zTOC contiene toda la información que SOCI necesita para encontrar un archivo determinado en una capa. Para revisar el zTOC para cada capa, puedo usar una de las sumas resumidas del resultado anterior y usar el siguiente comando.

$ sudo soci ztoc info sha256:0b4d78c856b7e9e3d507ac6ba64e2e2468997639608ef43c088637f379bb47e4 { "versión": "0.9", "build_tool": "AWS SOCI CLI v0.1", "tamaño": 2038072, "span_size" : 4194304, "num_spans": 33, "num_files ": 5552, "num_multi_span_files": 26, "archivos": [
    {
      "filename": "bin/",
      "offset": 512,
      "size": 0,
      "type": "dir",
      "start_span": 0,
      "end_span": 0
    },
    {
      "filename": "bin/bash",
      "offset": 1024,
      "size": 1037528,
      "type": "reg",
      "start_span": 0,
      "end_span": 0
    }

---Trimmed for brevity---

Now, I need to use the following command to push all SOCI-related artifacts into the Amazon ECR.

$ PASSWORD=$(aws ecr get-login-password --region us-east-1)
$ sudo soci push --user AWS:$PASSWORD $ECRSOCIURI

If I go to my Amazon ECR repository, I can verify the index is created. Here, I can see that two additional objects are listed alongside my container image: a SOCI Index and an Image index. The image index allows AWS Fargate to look up SOCI indexes associated with my container image.

Understanding SOCI Performance
The main objective of SOCI is to minimize the required time to start containerized applications. To measure the performance of AWS Fargate lazy loading container images using SOCI, I need to understand how long it takes for my container images to start with SOCI and without SOCI.

To understand the duration needed for each container image to start, I can use metrics available from the DescribeTasks API on Amazon ECS. The first metric is createdAt, the timestamp for the time when the task was created and entered the PENDING state. The second metric is startedAt, the time when the task transitioned from the PENDING state to the RUNNING state.

For this, I have created another Amazon ECR repository using the same container image but without generating a SOCI index, called pytorch-without-soci. If I compare these container images, I have two additional objects in pytorch-soci(an image index and a SOCI index) that don’t exist in pytorch-without-soci.

Deploy and Run Applications
To run the applications, I have created an Amazon ECS cluster called demo-pytorch-soci-cluster, a VPC and the required ECS task execution role. If you’re new to Amazon ECS, you can follow Getting started with Amazon ECS to be more familiar with how to deploy and run your containerized applications.

Now, let’s deploy and run both the container images with FARGATE as the launch type. I define five tasks for each pytorch-sociand pytorch-without-soci.

$ aws ecs \ 
    --region us-east-1 \ 
    run-task \ 
    --count 5 \ 
    --launch-type FARGATE \ 
    --task-definition arn:aws:ecs:us-east-1:XYZ:task-definition/pytorch-soci \ 
    --cluster socidemo 

$ aws ecs \ 
    --region us-east-1 \ 
    run-task \ 
    --count 5 \ 
    --launch-type FARGATE \ 
    --task-definition arn:aws:ecs:us-east-1:XYZ:task-definition/pytorch-without-soci \ 
    --cluster socidemo

After a few minutes, there are 10 running tasks on my ECS cluster.

After verifying that all my tasks are running, I run the following script to get two metrics: createdAt and startedAt.

#!/bin/bash
CLUSTER=<CLUSTER_NAME>
TASKDEF=<TASK_DEFINITION>
REGION="us-east-1"
TASKS=$(aws ecs list-tasks \
    --cluster $CLUSTER \
    --family $TASKDEF \
    --region $REGION \
    --query 'taskArns[*]' \ --texto de salida) aws ecs describe-tasks \ --tasks $TAREAS \ --región $REGIÓN \ --cluster $CLUSTER \ --query "tareas[] |  inversa(ordenar_por(@, &creadoen)) | [].[{startedAt: startedAt, createdAt: createdAt, taskArn: taskArn}]" \ --tabla de salida

Ejecutando el comando anterior para la imagen del contenedor sin índices SOCI: pytorch-without-soci– produce la siguiente salida:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                   DescribeTasks                                                                                   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+
|             createdAt            |             startedAt             |                                                  taskArn                                                   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+
|  2023-07-07T17:43:59.233000+00:00|  2023-07-07T17:46:09.856000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/dcdf19b6e66444aeb3bc607a3114fae0   |
|  2023-07-07T17:43:59.233000+00:00|  2023-07-07T17:46:09.459000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/9178b75c98ee4c4e8d9c681ddb26f2ca   |
|  2023-07-07T17:43:59.233000+00:00|  2023-07-07T17:46:21.645000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/7da51e036c414cbab7690409ce08cc99   |
|  2023-07-07T17:43:59.233000+00:00|  2023-07-07T17:46:00.606000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/5ee8f48194874e6dbba75a5ef753cad2   |
|  2023-07-07T17:43:59.233000+00:00|  2023-07-07T17:46:02.461000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/58531a9e94ed44deb5377fa997caec36   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+

Del tiempo delta promedio agregado (entre startedAt y createdAt) para cada tarea, el pytorch-without-soci (sin índices SOCI) se ejecutó correctamente después de 129 segundos.

A continuación, estoy ejecutando el mismo comando pero para pytorch-socique viene con índices SOCI.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                   DescribeTasks                                                                                   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+
|             createdAt            |             startedAt             |                                                  taskArn                                                   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+
|  2023-07-07T17:43:53.318000+00:00|  2023-07-07T17:44:51.076000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/c57d8cff6033494b97f6fd0e1b797b8f   |
|  2023-07-07T17:43:53.318000+00:00|  2023-07-07T17:44:52.212000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/6d168f9e99324a59bd6e28de36289456   |
|  2023-07-07T17:43:53.318000+00:00|  2023-07-07T17:45:05.443000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/4bdc43b4c1f84f8d9d40dbd1a41645da   |
|  2023-07-07T17:43:53.318000+00:00|  2023-07-07T17:44:50.618000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/43ea53ea84154d5aa90f8fdd7414c6df   |
|  2023-07-07T17:43:53.318000+00:00|  2023-07-07T17:44:50.777000+00:00 |  arn:aws:ecs:ap-southeast-1:xyz:task/demo-pytorch-soci-cluster/0731bea30d42449e9006a5d8902756d5   |
+----------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------+

Aquí, veo la imagen de mi contenedor con SOCI habilitado: pytorch-soci — se inició 60 segundos después de haber sido creado.

Esto significa que ejecutar mi aplicación de muestra con índices SOCI en AWS Fargate es aproximadamente un 50 % más rápido que ejecutarla sin índices SOCI.

Se recomienda comparar el tiempo de inicio y escalamiento horizontal de su aplicación con y sin SOCI. Esto lo ayuda a comprender mejor cómo se comporta su aplicación y si sus aplicaciones se benefician del soporte de AWS Fargate para SOCI.

Voces de los clientes
Durante el período de vista previa privada, escuchamos muchos comentarios de nuestros clientes sobre el soporte de AWS Fargate para SOCI. Esto es lo que dicen nuestros clientes:

autodesk proporciona soluciones de software críticas de diseño, fabricación y operación en las industrias de arquitectura, ingeniería, construcción, fabricación, medios y entretenimiento. “SOCI nos ha brindado una mejora del 50 % en el rendimiento de inicio para nuestras cargas de trabajo de simulación sensibles al tiempo que se ejecutan en Amazon ECS con AWS Fargate. Esto permite que nuestra aplicación se escale más rápido, lo que nos permite satisfacer rápidamente la mayor demanda de los usuarios y ahorrar costos al reducir la capacidad de cómputo inactiva. La solución de socios de AWS para crear el índice SOCI es fácil de configurar e implementar”. – Boaz Brudner, director de ingeniería, IA y arquitectura de Innovyze SaaS, Autodesk.

Alambre de volar es una empresa global de software y habilitación de pagos, con la misión de ofrecer los pagos más importantes y complejos del mundo. “Ejecutamos canalizaciones de implementación de varios pasos en Amazon ECS con AWS Fargate, que pueden tardar varios minutos en completarse. Con SOCI, la duración total de la canalización se reduce en más del 50 % sin realizar ningún cambio en nuestras aplicaciones o en el proceso de implementación. Esto nos permitió reducir drásticamente el tiempo de implementación de las actualizaciones de nuestras aplicaciones. Para algunas de nuestras imágenes más grandes de más de 750 MB, SOCI mejoró el tiempo de inicio de la tarea en más del 60 %”, Samuel Burgos, ingeniero sénior de seguridad en la nube, Flywire.

Virtuoso es una corporación de software líder que fabrica UI funcional y software de prueba de extremo a extremo. “SOCI nos ha ayudado a reducir el retraso entre la demanda y la disponibilidad de cómputo. Tenemos cargas de trabajo muy explosivas que nuestros clientes esperan que comiencen lo más rápido posible. SOCI ayuda a que nuestras tareas de ECS se ejecuten un 40 % más rápido, lo que nos permite escalar rápidamente nuestra aplicación y reducir el grupo de capacidad de cómputo inactiva, lo que nos permite entregar valor de manera más eficiente. Configurar SOCI fue muy fácil. Optamos por utilizar la solución de socio de AWS de inicio rápido con la que podríamos dejar intactas nuestras canalizaciones de desarrollo e implementación”, Mathew Hall, jefe de ingeniería de confiabilidad del sitio, Virtuoso.

Cosas que saber
Disponibilidad — El soporte de AWS Fargate para SOCI está disponible en todas las regiones de AWS donde están disponibles Amazon ECS, AWS Fargate y Amazon ECR.

Precios — El soporte de AWS Fargate para SOCI está disponible sin costo adicional y solo se le cobrará por almacenar los índices SOCI en Amazon ECR.

Empezar — Obtenga más información sobre los beneficios y cómo comenzar en la página de AWS Fargate Support para SOCI.

Edificio feliz.
Donnie

Fuente

Apple y Goldman Sachs acreditan a algunos clientes que tuvieron largas esperas para solicitar retiros de ahorros

Investigadores descubren riesgos de privacidad en teléfonos celulares comprados en subastas policiales