Operações de aplicações em fila

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 6 min. de leitura
  • As APIs CICD que devem obter o bloqueio/mutex de toda a instância de atualização para executar as operações solicitadas são enfileiradas em vez de serem rejeitadas quando o bloqueio/mutex de toda a instância de atualização é ocupado por outras operações.

    A partir de Tóquio, as APIs CICD que exigem a obtenção do bloqueio/mutex de toda a instância de atualização para executar as operações solicitadas serão enfileiradas em vez de serem rejeitadas quando o bloqueio/mutex de toda a instância de atualização for ocupado por outras operações. Quando uma solicitação CICD é recebida, o serviço CICD correspondente constrói uma mensagem NowMQ de operação de aplicação (Now Message Queue) e insere a mensagem na fila usando APIs NowMQ. As mensagens enfileiradas são pesquisadas pelo trabalho programado e tratadas uma a uma ou em paralelo se o processamento paralelo estiver habilitado e a operação atender aos critérios necessários.

    Mensagem do NowMQ da operação da aplicação

    As mensagens do NowMQ de operação da aplicação têm um assunto comum que é "sys.applifecycle.operation". O corpo da mensagem da operação da aplicação NowMQ contém um objeto JSON que inclui o sys_id do Rastreador de execução (também conhecido como o ID de andamento retornado na resposta da API CICD), o tipo de operação que pode ser um dos seguintes: app_install, plugin_activation, batch_install, rollback, import_app e apply_changes. Ele também contém informações como ID do plug-in para ativação do plug-in, ID do app ou escopo para instalação do aplicativo.

    Rastreador de execução para operação da aplicação

    Quando a mensagem do NowMQ de operação da aplicação é construída e inserida, o registro do rastreador de execução para a solicitação CICD correspondente é criado e seu sys_id é adicionado ao corpo da mensagem do NowMQ. O Rastreador de execução está no estado Pendente inicialmente. A coluna "Detalhes" do rastreador de execução contém as informações sobre o tipo de operação e os parâmetros de entrada importantes para a solicitação CICD. Sua coluna "Mensagem" contém as informações sobre a posição da fila. Quando a fila é pausada, a mensagem é prefixada com "[A fila de operação da aplicação está pausada]".

    Rastreadores de execução de operações da aplicação de amostra quando a fila está em execução. Fila de operação da aplicação de amostra em execução.

    Rastreadores de execução de operação da aplicação de amostra quando a fila está pausada.Rastreadores de execução de operações da aplicação de amostra quando a fila é pausada.

    Nota:
    As operações que estão em estado pendente não serão exibidas no histórico recente.
    Histórico recente de Rastreadores de execução de aplicações de amostra. O histórico recente exibe as operações históricas que foram enfileiradas e processadas nas últimas 24 horas.

    Gerenciar fila de operações da aplicação

    Embora a instalação manual de produtos de Todos os aplicativos seja enfileirada, a instalação manual de um aplicativo da IU como Todos os Aplicativos ou Gerenciador de aplicativos não é enfileirada.

    Às vezes, a instância pode estar recebendo, enfileirando e manipulando muitas solicitações CICD, o que pode fazer com que a instalação manual da IU esteja faminta para atualizar o bloqueio/mutex em toda a instância. Quando isso acontece, o administrador pode pausar temporariamente a Fila de operações da aplicação.

    O administrador pode gerenciar a Fila de operação da aplicação por meio da página de IU da Fila de operação da aplicação Diagnóstico do sistema->. No painel "Status da fila de operação", o administrador pode pausar ou retomar a fila. O administrador também pode cancelar o rastreador de execução pendente. Isso removerá a mensagem enfileirada correspondente do NowMQ pelo trabalho do App Operation Queue Health Monitor.

    Página de IU da Fila de operações da aplicação

    Página de IU de fila de operação da aplicação de amostra. O administrador pode clicar no botão em "Status da fila de operação" para pausar ou retomar a fila.Página de IU da fila de operações da aplicação.

    Clique no item da lista "Rastreadores de execução de operações de aplicações" para abrir o formulário Rastreador de execução. Se a mensagem enfileirada estiver pendente na fila, atualize o estado do rastreador de execução para "Cancelado" e salvar a mudança cancelará a solicitação CICD enfileirada correspondente. Observação: se o estado do rastreador de execução for "Em execução", a solicitação CICD não poderá ser cancelada.Formulário de rastreador de execução.

    Fila de operações da aplicação e janela de atualização

    Por padrão, 2 horas (pode ser personalizado por meio da propriedade do sistema "com.glide.update_operation.queue_upgrade_window") antes da atualização programada, a Fila de operações da aplicação para de processar mensagens enfileiradas.

    O status da Fila de operações da aplicação é alterado para "Atualização pausada". Durante essa janela de atualização, novas solicitações de CICD continuam na fila.Fila de operação da aplicação e janela de atualização.

    Quando a atualização for concluída, a Fila de operação da aplicação retomará o processamento das mensagens enfileiradas automaticamente.

    Impacto no pipeline de CICD

    Os contratos de solicitação/resposta existentes para as APIs CICD não são alterados. A falha na operação devido à atualização de conflitos de bloqueio/mutex em toda a instância que são observados em uma versão anterior à Tokyo não será vista. A solicitação é enfileirada e atendida uma a uma ou em paralelo, dependendo do tipo de trabalho.

    APIs CICD que oferecem suporte ao enfileiramento

    As APIs CICD a seguir são enfileiradas para processamento.
    • api/sn_cicd/app_repo/install
    • api/sn_cicd/v1/app_repo/install
    • api/sn_cicd/v2/app_repo/install
    • api/sn_cicd/app_repo/rollback
    • api/sn_cicd/v1/app_repo/install
    • api/sn_cicd/v2/app_repo/rollback
    • api/sn_cicd/sc/apply_changes
    • api/sn_cicd/v1/sc/apply_changes
    • api/sn_cicd/v2/sc/apply_changes
    • api/sn_cicd/app/lote/instalação
    • api/sn_cicd/sc/importar
    • api/sn_cicd/plugin/{plugin_id}/ativar
    • api/sn_cicd/plug-in/{plug-in_id}/rollback

    Paralelizar instalações de aplicações e ativações de plug-in

    Iniciando em Tokyo, as operações a seguir podem ser executadas em paralelo com outras operações.
    • api/sn_cicd/app_repo/install
    • api/sn_cicd/v1/app_repo/install
    • api/sn_cicd/v2/app_repo/install
    • api/sn_cicd/plugin/{plugin_id}/ativar

    Todo o processamento de fila usa um bloqueio/mutex de toda a instância e mantém esse mutex até que qualquer operação na fila seja concluída. Esse bloqueio é chamado UpdateMutexe seu status pode ser exibido na tabela sys_mutex. Durante esse tempo, as operações que usam esse mesmo bloqueio (instalações de app, ativações de plug-in, operações de controle de código-fonte) não podem ser executadas por meio da IU. A fila ainda pode ser pausada por meio da página Fila de operação da aplicação para liberar o bloqueio após a conclusão dos trabalhos em execução no momento.

    A paralelização está habilitada por padrão. Ele pode ser desativado usando a propriedade com.glide.update_operation.parallel_operation_enablede todas as operações serão executadas sequencialmente na fila, como nas versões anteriores.

    Limites na paralelização

    O processador da fila determina se um trabalho enfileirado pode ser executado. Se um trabalho puder ser executado, ele será programado para ser selecionado por um nó de instância na primeira disponibilidade. Caso contrário, ele será retornado à fila e o processador avaliará o próximo trabalho na fila para processamento.

    Há um limite para o número máximo de trabalhos que podem ser executados em paralelo, cujo padrão é 2. Esta propriedade pode ser alternada em glide.update.app_operation_queue.parallel.max, mas lembre-se de que há um limite superior de threads disponíveis para executar a instalação e o aumento da paralelização consome memória adicional que pode tornar a instância mais lenta para usuários ativos.

    Obtenção de Bloqueios de Recursos

    Os plug-ins e aplicações a seguir não podem ser instalados em paralelo.
    • Quaisquer duas operações que compartilham o mesmo escopo, incluindo personalizações.
    • Quaisquer duas operações que causam mudanças de esquema.
    • Quaisquer duas operações que contenham scripts de correção.

    O processamento da fila determina se esses critérios são atendidos para operações enfileiradas e adia trabalhos não processáveis, se necessário. O ID de andamento do trabalho será atualizado para refletir se a operação estiver aguardando a obtenção dos bloqueios de recursos apropriados. Uma operação em execução mantém uma lista dos recursos (escopos, esquema, scripts de correção presentes) na tabela sys_padlock, e a inserção e a liberação desses bloqueios podem ser observadas nesta tabela pelo ID de andamento. Se um trabalho enfileirado for adiado devido à incapacidade de obter os bloqueios necessários nos recursos, ele será colocado em um esfriamento para permitir o processamento de outras mensagens. O período de esfriamento pode ser modificado com a propriedade com.glide.update_operation.job_cancel_timeout_minutes. O trabalho ainda está na fila e visível na página Fila de operação da aplicação.

    Se a fila não puder baixar um pacote de aplicações ou encontrar um plug-in para verificar os recursos necessários para obter, ela registrará um erro nessa operação na fila. Se a operação falhar ao visualizar seus recursos um determinado número de vezes, o rastreador falhará e o trabalho será removido da fila. O número máximo de vezes é padrão 3 e pode ser modificado pela propriedade com.glide.update_operation.max_failure_count.
    Nota:
    A falha em obter os bloqueios necessários não conta como uma tentativa de falha. Somente erros encontrados, como falha ao baixar um pacote de aplicações da contagem do AppRepo.