Melhores práticas - Acelerando o lançamento de tarefas - Amazon Elastic Container Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Melhores práticas - Acelerando o lançamento de tarefas

Há várias melhorias que você pode fazer para reduzir o tempo necessário para o Amazon ECS iniciar suas tarefas.

Fluxo de trabalho de lançamento de tarefas do Amazon ECS

Entender como o Amazon ECS provisiona suas tarefas é útil para raciocinar sobre otimizações para acelerar o lançamento de suas tarefas. Quando você inicia tarefas do Amazon ECS (tarefas autônomas ou por serviços do Amazon ECS), uma tarefa é criada e inicialmente colocada no PROVISIONING estado antes de ser lançada com sucesso (para obter detalhes, consulte Ciclo de vida da tarefa no Amazon ECS Developer Guide). RUNNING No PROVISIONING estado, nem a tarefa nem os contêineres existem, pois o Amazon ECS precisa encontrar capacidade computacional para colocar a tarefa.

O Amazon ECS seleciona a capacidade computacional apropriada para a tarefa com base no tipo de execução ou na configuração do provedor de capacidade. Os tipos de lançamento são AWS Fargate (Fargate) Amazon EC2 ativado AWS e o EXTERNAL tipo usado com o Amazon ECS Anywhere. Provedores de capacidade e estratégias de provedores de capacidade podem ser usados com os tipos de lançamento do Fargate e do Amazon EC2. Com o Fargate, você não precisa pensar em provisionar, configurar e escalar a capacidade do cluster. O Fargate cuida de todo o gerenciamento da infraestrutura das tarefas. Para o Amazon ECS com o Amazon EC2, você pode gerenciar sua capacidade de cluster registrando instâncias do Amazon EC2 em seu cluster ou pode usar o Amazon ECS Cluster Auto Scaling (CAS) para simplificar o gerenciamento de sua capacidade computacional. O CAS se encarrega de escalar dinamicamente a capacidade do seu cluster, para que você possa se concentrar apenas na execução de tarefas. O Amazon ECS determina onde posicionar a tarefa, com base nos requisitos especificados na definição de tarefa, como CPU e memória, bem como nas restrições e estratégias de posicionamento. Para obter mais detalhes sobre posicionamento de tarefas, consulte Posicionamento de tarefas do Amazon ECS.

Depois de encontrar a capacidade de colocar sua tarefa, o Amazon ECS provisiona os anexos necessários (por exemplo, Elastic Network Interfaces (ENIs) para tarefas em awsvpc modo) e usa o agente de contêineres do Amazon ECS para extrair suas imagens de contêiner e iniciar seus contêineres. Depois que tudo isso for concluído e os contêineres relevantes forem lançados, o Amazon ECS transferirá a tarefa para RUNNING o estado.

Fluxo de trabalho do Amazon ECS Service Scheduler

O Amazon ECS fornece um agendador de serviços para gerenciar o estado dos seus serviços. O agendador de serviços garante que a estratégia de agendamento especificada seja seguida e reagenda as tarefas que falham. Por exemplo, se a infraestrutura subjacente apresentar falha, o programador de serviços poderá reprogramar as tarefas. Uma das principais responsabilidades do agendador de serviços é garantir que seu aplicativo esteja sempre executando o número desejado de tarefas — com base na contagem desejada que você especifica na configuração do serviço ou na contagem de tarefas com escala automática com base na carga do aplicativo, se você usar o escalonamento automático do serviço. O agendador de serviços usa fluxos de trabalho assíncronos para iniciar tarefas em lotes. Para entender como o agendador de serviços funciona, imagine que você crie um serviço Amazon ECS para uma grande API da web que recebe tráfego intenso. Você espera que esse serviço atenda a uma grande quantidade de tráfego da web e determine que a contagem desejada apropriada para o serviço é de 1.000 tarefas. Quando você implanta esse serviço, o agendador de serviços do Amazon ECS não iniciará todas as 1.000 tarefas de uma vez. Em vez disso, ele começará a executar ciclos de fluxo de trabalho para levar o estado atual (0 tarefas) ao estado desejado (1.000 tarefas), com cada ciclo de fluxo de trabalho lançando um lote de novas tarefas. O agendador de serviços pode provisionar até 500 tarefas para os tipos de lançamento Fargate, Amazon EC2 e externo por serviço por minuto. Para obter mais informações sobre as taxas e cotas permitidas no Amazon ECS, consulte Cotas de serviço do Amazon ECS.

Agora que você tem uma compreensão do fluxo de trabalho de lançamento de tarefas do Amazon ECS, vamos discutir como você pode usar parte desse conhecimento para acelerar seus lançamentos de tarefas.

Recomendações para acelerar o lançamento de tarefas

Conforme discutido na seção anterior, o tempo gasto entre o acionamento do lançamento da tarefa (por meio das APIs do Amazon ECS ou do agendador de serviços) e a inicialização bem-sucedida de seus contêineres é afetado por vários fatores no Amazon ECS, em suas configurações e no próprio contêiner. Para acelerar a execução das tarefas, considere as recomendações a seguir.

  • Armazene em cache imagens de contêineres e instâncias de binpack.

    Se você estiver executando o Amazon ECS no Amazon EC2, você pode configurar o agente de contêiner do Amazon ECS para armazenar imagens de contêiner usadas anteriormente para reduzir o tempo de extração de imagens para lançamentos subsequentes. O efeito do armazenamento em cache é ainda maior quando você tem uma alta densidade de tarefas em suas instâncias de contêiner, que você pode configurar usando a estratégia de binpack posicionamento. 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 binpack posicionamento, você também pode considerar usar o entroncamento da Elastic Network Interface (ENI) para colocar mais tarefas com o modo de awsvpc rede em cada instância do contêiner. O truncamento de ENI aumenta o número de tarefas que você pode executar no modo awsvpc. 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 awsvpc rede é ideal, esse modo de rede pode aumentar inerentemente a latência de lançamento de tarefas. Para cada tarefa em awsvpc modo, 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 inicializações de tarefas. Por outro lado, uma vantagem importante de usar o modo de rede awsvpc é 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 os benefícios da velocidade de implantação superarem os benefícios do awsvpc modo, você pode considerar o uso do bridge modo para acelerar o lançamento de tarefas. Para ler mais sobre as vantagens relativas de cada modo de rede, consulte AWSVPC modo Modo de ponte e.

  • Acompanhe seu ciclo de vida de lançamento de tarefas para encontrar oportunidades de otimização.

    Muitas vezes, é difícil perceber quanto tempo leva para que seu aplicativo seja inicializado. 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 do agente ECS para publicar métricas para rastrear o tempo de inicialização do aplicativo até o momento em que seu aplicativo está pronto ContainerStartTime 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.

  • Escolha um tipo de instância ideal (ao usar o Amazon ECS no Amazon EC2).

    A escolha do tipo de instância correto é baseada na reserva de recursos (ou seja, CPU, memória, ENI, GPU) que você configura em sua tarefa. Portanto, ao dimensionar a instância, você pode calcular quantas tarefas podem ser colocadas em uma única instância. Um exemplo simples de uma tarefa bem posicionada seria hospedar 4 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.

  • Use o agendador de serviços do Amazon ECS para iniciar serviços simultaneamente.

    Conforme discutido na seção anterior, o agendador de serviços pode iniciar simultaneamente tarefas para vários serviços usando fluxos de trabalho assíncronos. Assim, você pode obter uma velocidade de implantação mais rápida projetando seus aplicativos como serviços menores com menos tarefas, em vez de um serviço grande com um grande número de tarefas. Por exemplo, em vez de ter um único serviço com 1.000 tarefas, ter 10 serviços cada um com 100 tarefas resultará em uma velocidade de implantação muito mais rápida, já que o agendador de serviços iniciará o provisionamento de tarefas para todos os serviços em paralelo.