Otimização do tempo de inicialização da tarefa do Amazon ECS
Para acelerar a execução das tarefas, considere as recomendações a seguir.
-
Cache de imagens de contêiner e instâncias de BinPack
Caso use o tipo de execução do EC2, você pode configurar o comportamento de pull do agente de contêiner do Amazon ECS para
ECS_IMAGE_PULL_BEHAVIOR
:prefer-cached
. O pull da imagem será feito remotamente se não houver uma imagem armazenada em cache. Caso contrário, a imagem armazenada em cache na instância será usada. A limpeza automática de imagens é desativada no contêiner para garantir que a imagem armazenada em cache não seja removida. Isso reduz o tempo de pull da imagem para execuções subsequentes. O efeito do armazenamento em cache é ainda maior quando há uma alta densidade de tarefas nas instâncias de contêiner, que você pode configurar usando a estratégia de posicionamento debinpack
. O armazenamento em cache de imagens de contêiner é especialmente benéfico para workloads baseadas em Windows, que costumam ter grandes tamanhos de imagem de contêiner (dezenas de GBs). Ao usar a estratégia de posicionamento debinpack
, você também pode considerar o uso do truncamento da interface de rede elástica (ENI) para posicionar mais tarefas com o modo de redeawsvpc
em cada instância de contêiner. O truncamento de ENI aumenta o número de tarefas que você pode executar no modoawsvpc
. Por exemplo, uma instância c5.large que oferece suporte à execução simultânea de apenas duas tarefas pode executar até dez tarefas com o truncamento de ENI. -
Escolha um modo de rede ideal
Embora existam muitos casos em que o modo de rede
awsvpc
é ideal, esse modo de rede pode aumentar inerentemente a latência de execução das tarefas. Isso ocorre porque, para cada tarefa no modoawsvpc
, os fluxos de trabalho do Amazon ECS precisam provisionar e anexar uma ENI invocando as APIs do Amazon EC2, o que adiciona uma sobrecarga de vários segundos às execuções das tarefas. Por outro lado, uma vantagem importante de usar o modo de redeawsvpc
é que cada tarefa tem um grupo de segurança para permitir ou negar tráfego. Isso significa que você tem maior flexibilidade para controlar as comunicações entre tarefas e serviços em um nível mais granular. Se a velocidade de implantação for sua prioridade, considere usar o modobridge
para acelerar a execução de tarefas. Para ter mais informações, consulte Alocar uma interface de rede para uma tarefa do Amazon ECS. -
Acompanhe o ciclo de vida da execução de tarefas para encontrar oportunidades de otimização
Muitas vezes, é difícil saber quanto tempo é necessário para a inicialização da aplicação. Iniciar a imagem de contêiner, executar scripts de inicialização e outras configurações durante a inicialização da aplicação pode levar bastante tempo. Você pode usar o endpoint de metadados da tarefa para publicar métricas a fim de monitorar o tempo de inicialização da aplicação de
ContainerStartTime
até o momento em que a aplicação estiver pronta para atender ao tráfego. Com esses dados, você entende como a aplicação está contribuindo para o tempo total de execução e encontra áreas onde é possível reduzir a sobrecarga desnecessária específica da aplicação e otimizar as imagens de contêiner. Para ter mais informações, consulte Otimização da capacidade e da disponibilidade do Amazon ECS. -
Escolha um tipo de instância ideal (para o tipo de inicialização do EC2)
Escolher o tipo de instância correto baseia-se na reserva de recursos (por exemplo, CPU, memória) que você configura na tarefa. Portanto, ao dimensionar a instância, você pode calcular quantas tarefas podem ser posicionadas em uma única instância. Um exemplo simples de uma tarefa bem posicionada é hospedar quatro tarefas que exigem 0,5 vCPU e 2 GB de reservas de memória em uma instância m5.large (com suporte para 2 vCPUs e 8 GB de memória). As reservas dessa definição de tarefa aproveitam ao máximo os recursos da instância.