Operações da aplicação em fila
APIs de CICD que devem obter a atualização bloqueio/mutex de toda a instância para executar as operações solicitadas são enfileiradas em vez de serem rejeitadas quando a atualização bloqueio/mutex de toda a instância está ocupado pelas outras operações.
A partir de Tokyo, As APIs do CICD que exigem a obtenção da atualização bloqueio/mutex de toda a instância para executar as operações solicitadas serão enfileiradas em vez de serem rejeitadas quando a atualização bloqueio/mutex de toda a instância está ocupado pelas outras operações. Quando uma solicitação de CICD é recebida, o serviço de CICD correspondente constrói uma operação de aplicação NowMQ (Fila de mensagens do Now) e insira a mensagem na fila usando APIs do NowMQ. As mensagens enfileiradas são pesquisadas pelo trabalho agendado e tratadas uma a uma ou em paralelo se o processamento paralelo estiver habilitado e a operação atender aos critérios necessários.
Operação da aplicação NowMQ Mensagem
As mensagens Operation NowMQ da aplicação têm um assunto comum que é "sys.applifecycle.operation". O corpo da mensagem Operation NowMQ da aplicação contém um objeto JSON que inclui o sys_id do rastreador de execução (também consulte como o ID de andamento retornado na resposta da API CICD), o tipo de operação que pode ser um dos seguintes: App_install, plug-in_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 da aplicação.
Rastreador de execução para operação da aplicação
Quando a mensagem de operação da aplicação NowMQ é construída e inserida, o registro do rastreador de execução da 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 de CICD. Sua coluna "Mensagem" contém as informações sobre a posição na fila. Quando a fila é pausada, a mensagem é prefixada com "[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.
Rastreadores de execução de operação da aplicação de amostra quando a fila está pausada.
Gerenciar fila de operações da aplicação
Enquanto a instalação manual de produtos de todas as aplicações está em fila, a instalação manual de uma aplicação da IU, como Todas as aplicações ou o Gerenciador de aplicações, não está em fila.
Às vezes, a instância pode estar recebendo, enfileirando e manipulando muitas solicitações de CICD, o que pode fazer com que a instalação manual da IU fique faminta por atualização bloqueio/mutex de toda a instância . Quando isso acontece, o administrador pode pausar temporariamente a fila de operação da aplicação.
O administrador pode gerenciar a fila de operação da aplicação por meio da página de IU Diagnóstico do sistema->Fila de operação da aplicação. 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 eventualmente removerá a mensagem correspondente na fila do NowMQ pelo trabalho Monitor de integridade da fila de operação do app.
Página de IU da fila de operação da aplicação
Exemplo de página de IU da fila de operação da aplicação. O administrador pode clicar no botão em "Status da fila de operação" para pausar ou retomar a fila.
Clique no item de lista "Rastreadores de execução de operações da aplicação", ele abre 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 de CICD não poderá ser cancelada.
Janela de upgrade e fila de operação da aplicação
Por padrão, 2 horas (pode ser personalizado por meio da propriedade sys "com.glide.update_operation.queue_upgrade_window") antes do upgrade agendado, a Fila de operações da aplicação interrompe o processamento de mensagens em fila.
O status da Fila de operações da aplicação é alterado para "Upgrade pausado". Durante esta janela de upgrade, novas solicitações de CICD continuam a ser enfileiradas.
Quando o upgrade é concluído, a Fila de operações da aplicação retoma o processamento das mensagens enfileiradas automaticamente.
Impacto no pipeline de CICD
Os contratos de solicitação/resposta existentes para as APIs do CICD não são alterados. A falha na operação devido à atualização bloqueio/mutex de toda a instância Os conflitos observados em uma versão pré-Tóquio não serão vistos. A solicitação é enfileirada e atendida uma a uma ou em paralelo, dependendo do tipo de trabalho.
CICD com suporte para enfileiramento
- 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/batch/install
- api/sn_cicd/sc/import
- api/sn_cicd/plug-in/plug-in/activate
- api/sn_cicd/plug-in//rollback
Paralelize instalações de aplicações e ativações de plug-in
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/plug-in/plug-in/activate
Todo o processamento de fila requer um bloqueio/mutex de toda a instância e mantém este mutex até que qualquer operação em fila seja concluída. Este bloqueio é chamado AtualizaçãoMutex e seu status pode ser exibido em sys_mutex tabela. Durante esse tempo, as operações que têm o mesmo bloqueio (instalações de apps, ativações de plug-in, operações de controle de origem) não são executadas por meio da IU. A fila ainda pode ser pausada por meio de Fila de operações da aplicação página 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_enabled e todas as operações serão executadas sequencialmente a partir da fila, como nas versões anteriores.
Limites na Paralelização
O processador de fila determina se um trabalho enfileirado pode ser executado. Se um trabalho puder ser executado, ele será agendado para ser coletado por um nó de instância na primeira disponibilidade. Caso contrário, ele será retornado para a 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, que o padrão é 2. Esta propriedade pode ser alternada por 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 que o aumento da paralelização requer memória adicional que pode tornar a instância mais lenta para usuários ativos.
Obtendo bloqueios de recursos
- 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 de 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 é atualizado para refletir se a operação está aguardando a obtenção de bloqueios de recursos apropriados. Uma operação em execução mantém uma lista de 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 bloqueios necessários nos recursos, ele será colocado em um resfriamento para permitir que outras mensagens sejam processadas. O período de resfriamento pode ser modificado com a propriedade com.glide.update_operation.job_cancel_timeout_minutes . O trabalho ainda está na fila e está visível no Fila de operações da aplicação página.
com.glide.update_operation.max_failure_count propriedade.