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 ambienteJOB_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 ambienteJOB_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
- Criação de log
- Enfileirando
- retries
- Executando tarefas em lote
- Ajuste de escala
- Status
- Enviando tarefas em lote semelhantes
- Acionamento de tarefas em lote com eventos
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:
- Execute uma imagem de contêiner existente. Crie uma tarefa e forneça uma referência para sua imagem usar ao enviar a tarefa. Para obter um exemplo, consulte Criar e executar uma tarefa
- Inicie com o código fonte. Se você estiver iniciando com o código-fonte que está localizado em um repositório Git ou em sua estação de trabalho local, será possível apontar para o local de sua origem e o Code Engine se encarregará de construir a imagem para você. Consulte Criar uma tarefa do código-fonte do repositório e Criar uma tarefa do código-fonte local.
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