Ir para o conteúdo

Serviços em Segundo Plano

Visão Geral

O recurso Serviços em segundo plano do Vinyl permite que o Vinyl execute eventos de longa duração em uma fila de segundo plano acelerada. O serviço em si é hospedado pelo aplicativo Web Vinyl no IIS. Enquanto o site estiver em execução, o serviço em segundo plano estará em execução. Não requer nenhuma instalação ou configuração adicional.

Existem dois componentes envolvidos no serviço de fundo de Vinyl:

Fila em Segundo Plano

Muitas vezes, um desenvolvedor cria um Evento que executa diversas Ações, possivelmente abrangendo diversas fontes de dados, ou até mesmo chamadas REST para sistemas externos. A fila em segundo plano permite ao desenvolvedor especificar que o Evento deve ser executado em segundo plano em vez de em primeiro plano. Existem alguns benefícios em fazer isso:

  • Ao clicar em um botão para executar um Evento, o controle é imediatamente devolvido ao cliente. O cliente pode continuar seu trabalho enquanto o trabalho continua em execução no sistema hospedar.
  • A fila em segundo plano economiza recursos. Ao colocar eventos em segundo plano que, de outra forma, consumiriam recursos, o desenvolvedor permite que o Vinyl acelere a execução desses eventos. À medida que a carga no sistema aumenta, o nível de paralelismo da fila de trabalhos diminui. Isso permite que o servidor web opere com mais threads e mais acesso à CPU. Por exemplo, se 100 pessoas fizerem login no site e clicarem em um botão que executa um Evento, o IIS precisaria lidar com 100 execuções simultâneas desse Evento. Ao enviar o Evento para a fila de trabalhos, podemos reduzir a simultaneidade para executar apenas um pequeno número simultaneamente, o que libera recursos para o site.
  • A fila em segundo plano monitora eventos e armazena histórico. Pretendemos estender esta funcionalidade a todos os Eventos no futuro. Por enquanto, se você estiver interessado em manter um registro do histórico de execução de um Evento incluindo:

    • Quem organizou o evento
    • Quando eles executaram
    • Quanto tempo demorou para ser executado
    • Foi bem sucedido (se não, quais erros ocorreram)

Essas informações estão disponíveis na seção Monitoramento do IDE. Na página inicial você encontrará uma lista de serviços em execução e uma lista de agendas ou eventos em execução.

Nota

O serviço em segundo plano corta as tabelas de log todos os dias. Ele exclui todos os eventos bem-sucedidos com mais de 7 dias e todos os eventos com falha há mais de 30 dias.

Para especificar que um Evento deve ser executado em segundo plano, o desenvolvedor deve localizar o Evento, clicar duas vezes no Evento, editá-lo e selecionar um Tipo de Execução de Iniciar Agora (Background). A partir daí, o Vinyl colocará o Evento na fila para execução sempre que um usuário o executar.

Se o seu Evento tiver regras de validação e essas regras retornarem um erro, o Vinyl retornará os resultados imediatamente ao usuário junto com as mensagens de validação e cancelará a execução do Evento na fila. Aviso As validações não são suportadas ao executar o evento em segundo plano.

Se apropriado, considere alterar a mensagem de sucesso do evento para que ela transmita ao usuário final que a operação está sendo executada em segundo plano.

O Vinyl Job Queue fica suspenso indefinidamente, usando recursos mínimos até que um evento seja enfileirado. Ele não pesquisa a execução de trabalhos. Em vez disso, utiliza o padrão assíncrono baseado em tarefas da Microsoft, garantindo que os recursos do sistema sejam totalmente utilizados.

Agendador

O Vinyl suporta o agendamento da execução de eventos em vez de exigir a execução manual de eventos. O agendador, assim como a fila de tarefas, está em execução no serviço em segundo plano enquanto o aplicativo da web estiver em execução. Atualmente, o Vinyl suporta um modo de execução para um evento agendado, chamado execução de múltiplas linhas. Isso é diferente de um evento executado por meio de clique no botão. Quando um usuário executa um Evento em um objeto de negócios, ele é executado em uma única linha. Quando o agendador executa um Evento, ele é executado em todo o objeto de negócios. Isso significa que a fila percorre cada linha do objeto de negócios e executa o Evento agendado nessa linha. Isso é feito enfileirando cada linha para execução pela fila de trabalhos.

Como os eventos agendados são enviados para a fila de tarefas para execução, o Vinyl é capaz de aproveitar os benefícios de desempenho que acompanham a throttling da execução desses conjuntos de dados potencialmente grandes. Isso também fornece a mesma visibilidade para eventos agendados em relação ao monitoramento e registro. Haverá uma entrada no log para cada linha executada pelo Evento agendado. As informações de chave primária para cada linha serão incluídas no log para ajudar na localização e depuração de problemas.

Para agendar um Evento para execução, localize o Evento, clique duas vezes nele e defina o Tipo de Execução como Iniciar via Agendamento (Background). Isso permitirá que o Evento seja anexado a uma Programação.

Para criar uma programação, vá para a seção Monitoramento no IDE. Clique em Agendamentos e crie um novo agendamento.

A seguir estão os tipos de programações que o Vinyl suporta:

  • Execução Única - Escolha um dia e horário no futuro para o Evento ser executado. O Vinyl executará o Evento no horário agendado e em seguida desativará a programação.
  • Execução Periódica - Executa o Evento a cada X segundos/minutos/horas.
  • Execução Diária - Execute o Evento no horário exato a cada X dias. Isso pode ser configurado para ser executado todos os dias, a cada 3 dias, a cada 7 dias e assim por diante.
  • Execução Semanal - Execute o Evento em um horário exato, em um dia exato da semana, a cada X semanas. Neste cronograma o desenvolvedor pode escolher dias específicos da semana para realizar o Evento. Por exemplo, execute todos os domingos e quartas-feiras alternadas às 19h.
  • Execução acionada - Execute o evento em resposta a um sinal, como o login de um usuário no sistema.

Para adicionar um evento a uma programação, acesse a página Agendas e clique no ícone Eventos. Adicione o Evento ao agendamento, especificando uma simultaneidade máxima e o ID do usuário que executará o Evento. Se o objeto de negócios Event retornar diversas linhas, o Vinyl tentará executar o Evento em cada linha com a simultaneidade especificada. Por exemplo, se 100 linhas forem retornadas pelo objeto de negócio e a simultaneidade máxima for 3, o Vinyl tentará executar 3 instâncias de evento simultaneamente, até que o Evento tenha sido executado 100 vezes (uma para cada linha).

Nota

Consulte o seguinte artigo sobre Executar como usuário se você deseja executar um evento agendado como um usuário especificado.

Instâncias de Serviço

Esta página permite ao usuário parar/iniciar o serviço em segundo plano e monitorar os serviços ativos e trabalhos em execução.

  • Fornece a data de início do serviço e o tempo de atividade.
  • Existem botões Parar e Iniciar para interromper o serviço em segundo plano.

  • Stop drenará todos os trabalhos atualmente em execução para finalizar e cancelar quaisquer trabalhos existentes na fila. Ele também impedirá que quaisquer eventos agendados ou invocados sejam enfileirados.

  • Iniciar iniciará o backup do serviço em segundo plano, limpará a tabela de atividades e iniciará o agendamento e o suporte do evento em segundo plano
  • A página não atualiza constantemente seu estado na UI, portanto há um botão Atualizar. Clicar em Atualizar carregará as informações mais recentes para as instâncias de serviço e tarefas em execução sem exigir que o usuário atualize todo o navegador.

Página de Registros

  • Mostra mensagens da instância atual do serviço em execução.
  • Disponível na página Instâncias de serviço

Cancelamento de um Trabalho

A forma como o Vinyl cancela um trabalho é diferente dependendo do estado do trabalho e do tipo de trabalho que está sendo executado.

  • Estado pendente – O trabalho foi criado e colocado na fila, mas ainda não está em execução. Neste estado, o Vinyl cancela imediatamente o trabalho.
  • Running State - Se o trabalho estiver em execução, o Vinyl envia uma solicitação de cancelamento para o trabalho. Algumas operações demoram mais para serem canceladas do que outras e algumas operações não permitem interrupção. Quando o trabalho atingir um ponto que suporta cancelamento, ele cancelará e atualizará suas informações de atividade.
  • Trabalho agendado - Se o trabalho for um trabalho agendado e tiver criado n número de trabalhos para executar o evento agendado. O cancelamento do trabalho agendado também cancelará os trabalhos iniciados. Em outras palavras, cancela toda a execução do cronograma.