Servidor Couchbase

Aprimoramentos em eventos: Cronômetros, manipuladores e estatísticas

Com o lançamento do Couchbase 6.6, o Eventing Service apresenta grandes aprimoramentos de funcionalidade.

Introduzimos novos temporizadores de eventos que podem ser cancelados usando a função cancelTimer() ou criando um novo temporizador com o mesmo identificador de referência de um temporizador existente. Os temporizadores recorrentes também são totalmente compatíveis e podem ser facilmente usados para criar lógica repetitiva usando um retorno de chamada do temporizador para criar novos temporizadores. O agendamento de temporizadores permite que eles sejam criados para dias, semanas ou anos no futuro, sem impacto adverso no desempenho. O manipulador OnDelete agora indica se um documento foi excluído ou expirou usando o novo parâmetro "options". As principais estatísticas de eventos na interface do usuário agora estão co-localizadas com cada controle de ciclo de vida do Functions.

Juntos, esses aprimoramentos simplificam o esforço e o código necessários para criar uma lógica comercial robusta.

Pré-requisitos

Neste artigo, apresentaremos os principais Eventos melhorias adicionadas à versão mais recente do GA, ou seja, a versão 6.6.0 do Couchbase, e para cada item fornecemos um exemplo básico funcional.  No entanto, entenda que nenhuma das Eventing Functions fornecidas neste artigo funcionará "como está" em versões anteriores do servidor Couchbase sem alterações significativas e soluções complexas.

Se você não estiver familiarizado com o Couchbase ou com o serviço Eventing, consulte o GET STARTED e um exemplo de Eventing, especificamente o seguinte:

  • Configure um servidor Couchbase 6.6.0 funcional de acordo com as instruções em Comece aqui!
  • Compreender os conceitos básicos de Eventing e como implantar uma função básica de Eventing de acordo com as instruções do Arquivamento de documentos exemplo.

Os cronômetros de eventos agora podem ser cancelados

Com a adição da função cancelTimer() ou com a criação de um novo Eventing Timer com o mesmo identificador de referência de um timer existente, os timers ativos que ainda não foram acionados podem ser cancelados. Esse aprimoramento simplifica o código necessário para criar uma lógica comercial robusta.

Os desenvolvedores não são mais obrigados a adicionar campos e lógica e a fazer verificações adicionais para garantir que um Timer que está sendo disparado não seja "obsoleto" e substituído por um Timer mais recente.

Exemplo:

  • Crie um compartimento de "origem" e um compartimento de "metadados" para Eventing.
  • Implemente essa função (código abaixo).
  • Crie um documento no bucket de origem com:
  • Inspecione os registros após um minuto.
  • Exclua o documento com a chave "user_scoreboard::1".
  • Inspecione os registros após um minuto.
  • Cancelar a implantação dessa função.

Os temporizadores de eventos recorrentes agora são totalmente compatíveis

Os temporizadores recorrentes são totalmente compatíveis, ou seja, uma função invocada por uma chamada de retorno de temporizador pode criar novos temporizadores de forma confiável. Essa atualização permite que uma única Eventing Function implemente de forma confiável eventos recorrentes complexos, criando novos timers a partir da chamada de retorno de outro timer.

Anteriormente, era necessária uma cofunção para criar de forma confiável uma série recorrente de temporizadores (imagem à esquerda). A versão 6.6 simplifica o código necessário para implementar a lógica comercial recorrente (ou programada) (imagem à direita).

Eventing cron update

Exemplo:

  • Crie um compartimento de "origem" e um compartimento de "metadados" para Eventing.
  • Crie um alias de bucket na configuração da função como "src_bkt" para o bucket de origem no modo leitura+gravação.
  • Implemente essa função (código abaixo).
  • Crie um documento no bucket de origem com:
  • Inspecione os registros após um minuto.
  • Inspecione as toras após alguns minutos.
  • Altere o documento com a chave "recurring_timer::1" e mude o campo "active" para false da seguinte forma:
  • Inspecione os registros após um minuto.
  • Cancelar a implantação dessa função.

Os cronômetros podem ser criados para dias/semanas/anos futuros

Um ou um milhão de temporizadores podem ser criados sem impacto adverso no desempenho de um sistema Eventing que, de outra forma, estaria ocioso. Essa capacidade abre casos de uso para notificações de longo prazo e programas de reengajamento de clientes.

Nas versões 6.5.X, a criação de alguns milhares de temporizadores no futuro (como em uma hora ou mais) em um sistema ocioso resultava em um número crescente de operações de bucket de metadados que afetavam o desempenho e podiam eventualmente bloquear mutações para uma determinada Eventing Function.[1]

Observe que, em uma operação cancelTimer() ou ao substituir um Timer existente por referência, haverá documentos temporários no compartimento de "metadados" do Eventing.[2]

Exemplo:

Demonstrar a criação de vários Eventing Timers (neste caso, 50.000) e programá-los para um futuro distante (96 horas) e, em seguida, cancelar todo o conjunto (ou permitir que todos disparem a rotina de retorno de chamada) Retorno do cronômetro).

  • Crie um compartimento de "origem" e um compartimento de "metadados" para Eventing.
  • Implemente essa função (código abaixo).
  • Crie um documento no bucket de origem com quaisquer DADOS, como veremos apenas.
  • Inspecione as toras após um ou dois minutos.
  • Exclua o documento com a chave "spawn_50k_timers::1".
  • Inspecione as toras após um ou dois minutos.
  • Cancelar a implantação dessa função.

Para ver os 50K Eventing Timers sendo criados e disparados (em vez de serem cancelados):

  • Edite a função e altere delayMinutes para 1 (você não quer esperar 4 dias).
  • Implemente a função modificada (código abaixo).
  • Crie um documento no bucket de origem com quaisquer DADOS, já que só analisamos a CHAVE.
  • Inspecione os registros após dois minutos.
  • Exclua o documento com a chave "spawn_50k_timers::1".
  • Inspecione as toras após um ou dois minutos.
  • Cancelar a implantação dessa função.

As estatísticas de eventos agora estão localizadas juntamente com os controles de ciclo de vida

Quatro (4) estatísticas importantes de Eventing na interface do usuário agora estão co-localizadas com cada controle de ciclo de vida das funções. Esses aprimoramentos simplificam o esforço, o código e o diagnóstico das Eventing Functions para criar rapidamente uma lógica comercial robusta.

O desenvolvedor ou administrador pode determinar imediatamente que uma função está se comportando mal sem precisar navegar para fora dos controles do ciclo de vida da função.

Exemplo:

  • Crie um compartimento de "origem" e um compartimento de "metadados" para Eventing.
  • Faça alguns documentos com qualquer KEY e qualquer DATA no bucket de origem.
  • Implemente a função modificada (código abaixo), que contém um erro de sintaxe, esquecendo-se de colocar var na frente de uma variável.

  • Quando a função Eventing é implementada, há um feedback imediato de que algo deu errado para o desenvolvedor.

  • O usuário responde ao feed back, ou seja, às falhas "vermelhas" e pode inspecionar a função para identificar a origem do erro.

  • Cancelar a implantação dessa função de eventos.
  • Corrija o erro nesse caso na linha 4: "var a=2;".
  • Implemente essa Eventing Function novamente.
  • Depois que o código for corrigido, o desenvolvedor poderá ver o comportamento e o progresso corretos à medida que o contador de sucesso for aumentando.

O manipulador OnDelete agora indica a exclusão ou a expiração

O manipulador OnDelete agora indica se um documento foi excluído ou expirou por meio de um novo parâmetro "options". Esse recurso frequentemente solicitado permite que diferentes lógicas sejam executadas, dependendo do tipo de remoção.

Exemplo:

  • Criar um bucket de "origem" e um bucket de "metadados" para Eventing
  • Implemente essa função (código abaixo)
  • Crie um documento no bucket de origem com quaisquer DADOS, pois só examinamos a CHAVE
  • Inspecione os registros após alguns segundos
  • Excluir o documento com a chave "doc_to_delete::1"
  • Inspecione os registros após um minuto
  • Cancelar a implantação dessa função

Explore os recursos do Couchbase Server 6.6

Blogs Documentos e tutoriais Páginas da web e webinars
O que há de novo no Couchbase Server 6.6 O que há de novo no Couchbase Server 6.6? Novos recursos no Couchbase Server 6.6: análise, backup, consulta e muito mais
Aprimoramentos de eventos (temporizadores, manipuladores e estatísticas) Notas de versão do Couchbase Server 6.6 Serviço de análise do Couchbase
Links remotos - Analise sua empresa com o Couchbase Analytics Experimente o serviço de consultoria de índice do Couchbase O que há de novo no Couchbase Server (página do produto)
Conjuntos de dados externos - Amplie seu alcance com o Couchbase Analytics Configurar links remotos e S3 do Analytics usando a API REST Comparar edições
Anunciando o Flex Index com o Couchbase Criar conjuntos de dados externos usando a linguagem de definição de dados (DDL)
Apresentando o backup no Object Store (S3) Configurar links remotos e S3 do Analytics usando a CLI
Importar documentos com o Web Admin Console

Referências

Gostaríamos muito de saber se você gostou dos recursos da versão 6.6 e como ela beneficiará seus negócios daqui para frente. Compartilhe seu feedback nos comentários ou na seção Couchbase fórum

Notas de rodapé

[1] A gravidade é determinada por: a) O número de vBuckets com um timer ativo. Portanto, se houver apenas alguns temporizadores no futuro, o problema pode não ser perceptível ou não se materializar. e b) Se um temporizador Eventing foi disparado recentemente em um vBucket (o que elimina o problema para o vBucket em questão com base em cada função). Portanto, os sistemas 6.5 com muita atividade de temporizador de curto prazo não terão esse problema, mesmo que os temporizadores estejam programados para um futuro distante. Isso não é um problema na versão 6.6.

[2] Em uma operação cancelTimer() ou sobrescrevendo um Timer existente por referência, haverá um documento temporário no compartimento de "metadados" do Eventing que será limpo: a) na programação inicial de disparo dos Timers cancelados (ou sobrescritos) ou b) em uma não implantação da função. Esse comportamento é diferente do disparo de um Timer no horário programado, no qual todos os metadados de Eventing associados são imediatamente limpos do compartimento de "metadados" de Eventing após o disparo de um Timer.

 

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Jon Strabala, gerente principal de produtos da Couchbase

Jon Strabala é gerente de produto principal, responsável pelo Couchbase Eventing Service. Antes de ingressar na Couchbase, ele passou mais de 20 anos criando produtos de software em vários domínios, começando com EDA no setor aeroespacial e depois fazendo a transição para a criação de software corporativo com foco no que hoje é chamado de "IoT" e "dados em escala". Jon trabalhou em várias pequenas empresas de consultoria de software até abrir e gerenciar sua própria empresa. Ele tem ampla experiência em NoSQL/NewSQL, tanto na contribuição quanto na comercialização de novas tecnologias, como bitmaps compactados e armazenamentos de colunas. Jon é bacharel em engenharia elétrica e mestre em engenharia da computação, ambos pela Universidade do Sul da Califórnia, e tem MBA pela Universidade da Califórnia em Irvine.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.