Operações de aplicações em fila
As APIs do 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 Tokyo, as APIs do CICD que exigem o 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 estiver ocupado por outras operações. Quando uma solicitação de CICD é recebida, o serviço de CICD correspondente constrói uma mensagem NowMQ de operação de aplicação (Now Message Queue) e insere a mensagem na fila usando as 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.
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 mensagem do NowMQ da operação da aplicação contém um objeto JSON que inclui o sys_id do Rastreador de execução (também chamado de 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 da aplicação ou escopo para instalação da aplicação.
Rastreador de execução para operação da aplicação
Quando a mensagem do NowMQ de operação da aplicação é criada e inserida, o registro do rastreador de execução para a solicitação do 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. A coluna "Mensagem" contém as informações sobre a posição na fila. Quando a fila está pausada, a mensagem é prefixada com "[A fila de operações 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
Embora a instalação manual de produtos de Todas as aplicações esteja na 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á na 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 a partir da IU faminta para atualização de 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ções da aplicação por meio da página de IU Diagnóstico do sistema->Fila de operações 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 removerá a mensagem enfileirada correspondente do NowMQ pelo trabalho do monitor de integridade da fila de operação da aplicação.
Página de IU da Fila de operações da aplicação
Página de IU da Fila de operações 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.
Clique no item de lista “Rastreadores de execução de Operações de aplicações” para abrir o formulário Rastreador de execução. Se a mensagem da fila estiver pendente na fila, atualize o estado do rastreador de execução para "Cancelado" e salvar a mudança cancelará a solicitação de CICD na fila correspondente. Observação: se o estado do rastreador de execução for "Em execução", a solicitação CICD não poderá ser cancelada.
Fila de operações da aplicação e janela de upgrade
Por padrão, 2 horas (pode ser personalizado por meio da propriedade do sistema “com.glide.update_operation.queue_upgrade_window”) antes do upgrade programado, 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 "Upgrade pausado". Durante esta janela de upgrade, as novas solicitações de CICD continuam enfileiradas.
Quando o upgrade é concluído, a Fila de operações da aplicação retoma o processamento das mensagens da fila 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 a Tóquio não será vista. A solicitação é enfileirada e atendida uma a uma ou em paralelo, dependendo do tipo de trabalho.
APIs do CICD que oferecem suporte ao 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/reversão
- 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/importar
- api/sn_cicd/plugin/{plugin_id}/ativar
- api/sn_cicd/plugin/{plugin_id}/reversão
Paralelizar 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/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. Este 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ções 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 de 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 por meio de 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 requer memória adicional, o que pode tornar a instância mais lenta para usuários ativos.
Obtenção de 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 será atualizado para refletir se a operação estiver aguardando a obtenção de 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 na fila for adiado devido à incapacidade de obter os bloqueios necessários nos recursos, ele será colocado em um esfriamento 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 visível na página Fila de operações da aplicação.
com.glide.update_operation.max_failure_count.