Cargas de trabalho da tarefa em lote

IBM Cloud® Code Engine é uma plataforma sem servidor totalmente gerenciada que executa suas cargas de trabalho conteinerizadas, incluindo tarefas em lote ou cargas de trabalho de aplicativo. Saiba mais sobre a execução de trabalhos em lote em Code Engine.

O que são cargas de trabalho de tarefa em lote

Um trabalho em Code Engine executa uma ou mais instâncias de seu código executável. Ao contrário dos aplicativos, que lidam com solicitações HTTP, os trabalhos são projetados para serem executados uma única vez e encerrados, de modo que os recursos para executar a carga de trabalho do trabalho sejam liberados.

É possível escalar as tarefas em lote definindo várias instâncias Cargas de trabalho podem ser divididas em tarefas paralelas para reduzir o tempo de cálculo. É possível configurar a tarefa para ser executada com nova tentativa automática para endereçar cargas de trabalho com falha em uma instância da tarefa É possível acionar tarefas em lote manualmente, programaticamente e por eventos, como eventos Object Storage.

Ao criar um trabalho, você pode especificar as informações de configuração da carga de trabalho que são usadas sempre que o trabalho é executado.

As cargas de trabalho típicas de trabalhos em lote incluem:

  • Treinamento de modelo de máquina
  • Análise de arquivos, como análise de voz ou reconhecimento de imagens
  • Compressão ou descompressão de arquivos
  • Arquivamento de informações

Ao criar uma tarefa, é possível especificar informações de configuração de carga de trabalho que são usadas cada vez que a tarefa é executada.

O que é o ciclo de vida de uma tarefa em lote?

Ao enviar uma tarefa em lote, ela é executada até a conclusão. Geralmente, tarefas em lote recuperam dados de entrada, fazem trabalho computacional e armazenam os resultados em armazenamentos de dados persistentes. Quando a tarefa em lote é concluída, os recursos que são usados para executar a tarefa são removidos e nenhum custo é incorrido para quaisquer recursos em espera

O que são matrizes de trabalho e status de matriz de trabalho?

A especificação da matriz de trabalho faz parte da configuração do trabalho e da execução do trabalho. Uma matriz de trabalho tem duas funções:

  • Ele determina o número de instâncias simultâneas que são iniciadas para a execução do trabalho.
  • Ele permite que o código do usuário determine qual parte do trabalho cada instância deve executar com base no índice de matriz individual fornecido a ela.

Especifique uma matriz de trabalho pelo tamanho da matriz ou por um conjunto de índices de matriz:

  • Se você especificar um tamanho de matriz com um valor de valor n, o número de instâncias iniciadas para a execução do trabalho será n. Cada instância recebe um índice de matriz (0, 1, 2 e assim por diante, até n-1 ), usando a variável de ambiente JOB_INDEX. A variável de ambiente JOB_ARRAY_SIZE é definida como n, a menos que você especifique um valor específico para ela.

  • Se você especificar um conjunto de um ou mais índices de matriz, o número de instâncias iniciadas será o número de índices. Cada instância é fornecida com um dos índices especificados usando a variável de ambiente JOB_INDEX. A variável de ambiente JOB_ARRAY_SIZE é definida como o número de índices especificados, a menos que você especifique um valor específico para ela.

A variável de ambiente JOB_ARRAY_SIZE também está disponível para o código do usuário e, por padrão, é definida como o número de índices.

Se uma instância terminar com um código de retorno bem-sucedido, o status do índice do array associado será alterado para concluído. Caso contrário, Code Engine inicia uma nova instância para o mesmo índice, se o número configurado de tentativas ainda não tiver sido excedido. Se uma instância falhar e não forem permitidas mais tentativas, o índice do array associado mudará seu status para failed.

Quais são os principais recursos de trabalho com tarefas em lote do Code Engine ?

Revise os tópicos a seguir para saber mais sobre como trabalhar com tarefas em lote no Code Engine.

Isolamento

O Code Engine é um serviço regional multilocatário em que os locatários compartilham a mesma rede e infraestrutura de computação. Em particular, a infraestrutura de rede e de computação são recursos compartilhados e alguns componentes de gestão são comuns a todos os locatários. No entanto, os locatários e suas cargas de trabalho são isolados uns dos outros usando projetos Code Engine. Code Engine evita a comunicação entre projetos, fornecendo isolamento para seus aplicativos dentro de um ambiente de diversos locatários. Além disso, há controles de acesso que são executados em um nível de recurso para permitir que somente usuários autorizados executem determinadas operações em recursos do projeto, como aplicativos ou outras cargas de trabalho do Code Engine..

Para obter mais informações sobre isolamento de carga de trabalho, consulte Code Engine isolamento de carga de trabalho.

Criação de log

Quando você trabalha com trabalhos Code Engine no console com o registro ativado, os registros são encaminhados para uma instância de serviço IBM Cloud Logs que está associada ao seu projeto Code Engine. Na instância de serviço IBM Cloud Logs, os registros são indexados, permitindo a pesquisa de texto completo em todas as mensagens geradas e a consulta conveniente com base em campos específicos. Consulte Obtendo Logs para Tarefas

As informações de eventos do sistema também podem ser úteis para solucionar problemas quando você executa trabalhos. É possível visualizar informações do evento do sistema com a CLI. Consulte Obtendo informações de evento do sistema para tarefas

Para obter mais informações, consulte Visualizando logs .

Enfileirando

As tarefas em lote enviadas são automaticamente enfileiradas e estão em um estado pendente até o despacho. As tarefas em lote são executadas com base nos recursos de cálculo disponíveis, conforme definido pelo projeto Code Engine. Tarefas em lote que estão em um status pending podem ser removidas da fila. É possível monitorar tarefas em lote que estão pendentes, em execução ou concluídas usando o console ou a interface da linha de comandos do Code Engine.

Novas tentativas

Cada instância da tarefa é executada para conclusão. No entanto, o código da carga de trabalho pode encontrar um erro durante a execução da tarefa Quando uma instância da tarefa é concluída com um código de retorno diferente de zero, Code Engine reinicia a instância da tarefa. Com o Code Engine, é possível especificar o número de novas tentativas para evitar a reinicialização de instâncias de tarefas com falha.

Executando tarefas em lote

Não importa se o seu código existe como código-fonte em um arquivo local ou em um repositório Git, ou se o seu código é uma imagem de contêiner existente em um registro público ou privado, o Code Engine oferece uma maneira simplificada de executar seu código como um trabalho.

É possível criar e executar tarefas em lote no Code Engine das seguintes maneiras:

Para obter mais informações, consulte Trabalhando com tarefas

Ajuste de escala

Uma tarefa no Code Engine (tarefa em lote) consiste em uma ou mais instâncias de tarefa. Enquanto as instâncias da tarefa são executadas independentemente umas das outras, elas executam o mesmo código. Suponha que tenha um banco de dados com 100 registros para analisar. É possível executar sua tarefa de forma que cada instância da tarefa analise 10 registros cada. Por exemplo, a primeira instância da tarefa analisa registros de 0 a 9, a segunda instância da tarefa pode analisar registros de 10 a 19 e assim por diante. Neste exemplo, cada instância de tarefa recebe o parâmetro de entrada de tarefa fornecido pelo sistema JOB_INDEX como uma variável de ambiente que pode ser usada para calcular o intervalo de registros do banco de dados para analisar por cada instância de tarefa. O número de instâncias da tarefa é especificado quando a tarefa em lote é enviada

Ao executar uma tarefa em lote, durante o tempo de inicialização, as instâncias da tarefa podem permanecer em um estado pendente conforme as instâncias estão sendo iniciadas. Os tempos pendentes para instâncias de tarefa podem variar devido ao sistema e à infraestrutura de rede, pois o sistema se ajusta para atender às demandas de recursos relacionadas a essa execução da tarefa. Se a infraestrutura do sistema estiver respondendo a uma alta demanda de uso, o resultado poderá ser um atraso de vários minutos da inicialização para tarefas porque as instâncias da tarefa são provisionadas no momento exato.

Status

Uma tarefa em lote está no status Succeeded quando todas as instâncias de execução da tarefa são concluídas

Uma tarefa em lote está no status Failed depois que uma ou mais instâncias de execução da tarefa atingem o limite de novas tentativas Além disso, se uma tarefa levar muito tempo para ser concluída, a tarefa estará no status Failed sempre que o tempo máximo de execução for atingido Para obter mais informações, consulte status da tarefa..

Enviando tarefas em lote semelhantes

Ao criar uma tarefa, é possível especificar informações de configuração de carga de trabalho que são usadas cada vez que a tarefa é executada. Ao usar um conjunto comum de informações de configuração para tarefas em lote, com Code Engine, é possível especificar parâmetros adicionais com o envio de tarefa para sobrescrever os parâmetros de tarefa em lote para esse envio de tarefa específico..

Acionando tarefas em lote com eventos

Tarefas em lote podem ser enviadas automaticamente com base em eventos, como cronômetros periódicos, eventos Object Storage ou tópicos Kafka.

Suponha que você deseje acionar sua tarefa em lote automaticamente com base em uma assinatura para um depósito do IBM Cloud Object Storage que gere eventos sempre que um arquivo for mudado ou incluído no depósito do Object Storage. Revise a Code Engine cos-event-job amostra para obter informações sobre como criar eventos do Object Storage e usar os eventos para acionar tarefas em lote.

Para obter mais informações sobre o uso de eventos com tarefas Code Engine, consulte os tópicos a seguir: Trabalhando com o produtor de eventos Cron(cronômetro)periódico, Trabalhando com o produtor de eventos IBM Cloud Object Storage e Trabalhando com o produtor de eventos Kafka.

Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.

Como posso começar com tarefas em lote?

Para criar e executar um aplicativo de tarefa em lote simples Code Engine com a imagem de amostra icr.io/codeengine/firstjob, consulte Executando sua primeira tarefa Code Engine.

Além disso, é possível tentar um tutorial de tarefa em lote, consulte Executando e atualizando tarefas..

Para aprofundar o trabalho com as tarefas em lote, consulte Trabalhando com tarefas e execuções de tarefas