Eventing Simple Yet Powerful:

Eventos permite que pequenos scripts superem problemas difíceis de resolver.

Se você já conhece o Couchbase e o Eventing, fique à vontade para pular a breve visão geral e passar para a seção exemplos.

Visão geral:

Em primeiro lugar, vamos dar uma olhada no básico Ciclo de vida de eventos.

Eventing Life Cycle 6.5

As etapas abaixo mostram como é fácil escrever e usar uma Eventing Function

  • Adicionar (ou importar) uma Eventing Function por meio da interface do usuário do Couchbase Server.
  • Atribua uma fonte de dados, um bucket de bloco de notas e algumas associações para manipular documentos ou se comunicar com o mundo externo.
  • Implemente algum código JavaScript para processar a mutação recebida.
  • Salve sua nova função e clique em "Deploy" (Implementar)

É isso, agora você tem uma função distribuída que responde a mutações em seu conjunto de dados em tempo real em todo o cluster.

O serviço Eventing oferece uma plataforma sem infraestrutura que pode escalonar suas Eventing Functions à medida que sua empresa cresce, seja um pico único ou um aumento mensal nos armazenamentos de dados ou nos clientes atendidos, sem se preocupar com o fato de que suas funções Eventing baseadas em JavaScript estão sendo executadas de forma distribuída paralela robusta e confiável. Para saber mais sobre o Couchbase Eventing, consulte a seção Visão geral de eventos em nossa documentação.

Os exemplos deste artigo mostram que, em alguns casos, o Eventing pode agir como uma gota de óleo para "liberar" as partes móveis de seus aplicativos.

O Couchbase é um banco de dados que você constrói sob encomenda:

Gosto de pensar em um cluster do Couchbase como um conjunto de "microsserviços" escalonáveis e interoperáveis. Esses serviços podem ser conectados e dimensionados para atender a um conjunto específico de necessidades operacionais e comerciais.

O Couchbase oferece escalonamento multidimensional, ou MDS, em seis serviços principais com interferência mínima de recursos entre eles. Além disso, cada serviço do Couchbase pode ser dimensionado de forma independente, bastando adicionar mais nós. Isso permite que os clientes criem o cluster ideal de vários nós com o menor TCO possível para a(s) tarefa(s) em questão.

  • Os nós de dados são facilmente dimensionados para fornecer operações KV com reconhecimento de JSON em escala para pesquisas de registros únicos e múltiplos, o que é extremamente rápido. Eu acabei de mencionar que "para pesquisas de registros únicos e múltiplos, é extremamente rápido", sim, eu fiz, mas realmente quero enfatizar isso.
  • Os nós de consulta são facilmente dimensionados para fornecer índices e também N1QL, um aprimoramento de SQL que funciona nativamente com documentos JSON, o que permite que os programadores comecem a trabalhar rapidamente sem precisar aprender uma nova maneira de pensar.
  • Os nós de índice são facilmente dimensionados para fornecer índices flexíveis para acelerar algumas ou todas as consultas N1QL.
  • Os nós de pesquisa são facilmente dimensionados para fornecer pesquisa de texto completo para consultas em linguagem natural, com: pesquisa com reconhecimento de idioma, pontuação de resultados e índices rápidos baseados em FTS,
  • O nó Analytics é facilmente dimensionado para o recurso de gerenciamento de dados paralelos para executar com eficiência consultas complexas: grandes operações ad hoc de junção, conjunto, agregação e agrupamento em grandes conjuntos de dados.
  • O serviço Eventing é facilmente dimensionado para fornecer um paradigma de computação que os desenvolvedores podem usar para lidar com alterações (ou mutações) de dados e reagir a elas em tempo real.

Como em todas as linhas de produtos, os serviços mais recentes do Couchbase Query, Search, Eventing e Analytics têm alguns defeitos, mas, no conjunto, a cesta completa oferece um pacote unificado ou um balcão único para resolver uma infinidade de problemas. Falando sério, se você não se importa com um produto unificado e tudo o que vai fazer é usar o FTS, talvez considere usar o Elasticsearch, mas quando precisar integrar os resultados do FTS com o N1QL (SQL para JSON), talvez tenha sido muito melhor começar com o Couchbase.

Hoje, utilizaremos apenas dois serviços: 1) o serviço KV principal fornecido pelos nós de dados; 2) o Eventing Service. Destacarei, por meio de algumas pequenas funções JavaScript, como você pode superar alguns problemas difíceis de escala aproveitando o Eventing Service.

Pré-requisitos / Aprendendo sobre Eventing:

Neste artigo, usaremos a versão mais recente do GA, ou seja, a versão 6.5.1 do Couchbase

No entanto, 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.5.1 funcional de acordo com as instruções em Comece aqui!
  • Entenda como implantar uma função básica de Eventing de acordo com as instruções do Enriquecimento de dados exemplo, especificamente o "Caso 2", em que usaremos apenas um compartimento, o compartimento de "origem".

Enriquecimento de dados por meio de eventos:

Um problema típico do cliente

Um sistema de produção ativo armazenou bilhões de documentos. Surgiu uma nova necessidade comercial em que os dados existentes precisam ser enriquecidos. Essa necessidade de dados adicionais afeta o conjunto completo de documentos. O impacto operacional abrange dados antigos ou históricos e também dados novos ou mutantes. A empresa precisa manter o sistema de produção em funcionamento ininterrupto e responder continuamente a novos dados em tempo real.

Considere um aplicativo de exemplo um tanto forçado, um serviço de pesquisa GeoIP. Esse utilitário precisa de um conjunto de dados para permitir a pesquisa de países por intervalos de endereços IPV4. A implementação inicial armazenava registros da seguinte forma:

Meses ou mais tarde, novos requisitos comerciais mudam. A engenharia precisava que os documentos JSON fossem enriquecidos com novos campos. O requisito era incluir as representações numéricas dos dois endereços IPV4 existentes.

Eventing para o resgate

Uma simples função de evento de 14 linhas JavaScript (2 das quais são comentários) pode ser escrita e implementada para resolver o problema com o mínimo de recursos.

Ao implantar a função acima com um "Limite de feed" definido como "Tudo", todos os documentos do tipo: "ip_country_map" são processados e enriquecidos.

A Eventing Function é deixada "implantada", reagindo a todas as novas inserções ou atualizações (ou mutações) em tempo real, enriquecendo novos itens e também atualizando itens existentes em alterações de "ip_start_num" ou "ip_end_num" para as representações "numéricas" adequadas.

Como os documentos são enriquecidos (os campos antigos ainda estão presentes), os aplicativos de produção existentes continuarão funcionando. Todos os dados novos ou alterados são atualizados em tempo real para o novo esquema. Os componentes do aplicativo GeoIP são desacoplados por meio dessa função de evento simples, de modo que podem ser atualizados um de cada vez.

Quando todos os componentes de produção tiverem sido atualizados, a Eventing Function poderá ser desimplantada e desativada.

Eliminação de dados obsoletos por meio de eventos:

Um problema típico do cliente

Um sistema de produção ativo armazenou mais de 7 bilhões de documentos. Todos os documentos têm uma expiração automática (ou TTL para tempo de vida). O ambiente de produção recebe constantemente novos dados e expira constantemente os dados antigos.

Foi cometido um erro operacional que resultou na criação de 2 bilhões de documentos sem validade.

O cliente não tinha os recursos (nem desejava pagar pelos recursos) para criar um índice grande para utilizar o N1QL para identificar, selecionar e eliminar os dados que não tinham um TTL ativo (diferente de zero) quando não fossem mais úteis.

Eventing para o resgate

Uma simples função de evento JavaScript de seis (6) linhas (2 das quais são comentários) foi implementada e resolveu o problema com o mínimo de recursos.

Ao implementar a função acima com um "Limite de alimentação" definido como "Tudo", todo o conjunto de documentos no bucket de origem foi digitalizado. Todos os documentos com um TTL diferente de zero (o que significa que eles não tinham expiração) foram ignorados. Somente os documentos correspondentes com um TTL maior que zero são excluídos.

Depois que o bucket de origem foi limpo, a Eventing Function não foi implantada, pois era usada como uma ferramenta administrativa.

Observe que poderíamos substituir o teste de expiração !== 0 em nosso JavaScript para filtrar os dados para qualquer finalidade necessária.

É muito fácil adivinhar o que estamos fazendo abaixo:

Na verdade, poderíamos facilmente atualizar o que foi dito acima para executar um arquivamento em cascata e excluir não apenas o cliente, mas qualquer outra informação relacionada, como pedidos, devoluções e endereços de entrega. Consulte o exemplo Cascade Delete na documentação de Eventing.

Remoção de dados confidenciais via Eventing:

Um problema típico do cliente

Uma empresa que executa o Couchbase no local em produção precisava compartilhar informações de perfil de clientes (150 milhões e em crescimento). Seu parceiro de negócios também está executando o Couchbase, mas em um provedor de nuvem, o AWS.

Dado um registro de perfil típico como o seguinte:


Eles não podiam simplesmente compartilhar todo o perfil, pois ele continha dados confidenciais sobre as preferências do usuário e os métodos de pagamento. Eles só precisavam compartilhar um subconjunto limitado, como o seguinte:

O cliente queria substituir a solução SPARK de uso intermediário, que exigia horas de falha para inicializar e fornecia apenas um processo em lote lento (horas para refletir as atualizações) e sincronizar as informações do perfil em tempo real.

Eventing para o resgate

Uma simples função de eventos de nove (9) linhas JavaScript (3 das quais são comentários) foi implementada e resolveu o problema com recursos mínimos.

Ao implementar a função acima com um "Limite de alimentação" definido como "Tudo", todo o conjunto de documentos no bucket de origem foi digitalizado e todos os documentos do tipo: "master_profile" foram processados e apenas um subdocumento de cada perfil sem as informações confidenciais foi copiado para o bucket de destino compartilhado.

A Eventing Function é sempre implantada, reagindo a todas as alterações (ou mutações) de perfil de usuário em tempo real e encaminhando cada mutação para o bucket de destino do AWS.

Nesse caso de uso, uma sincronização final de balde para balde é realizada por meio do Couchbase XCDR em nenhum momento os dados confidenciais deixam o cluster local e nunca são transmitidos para o AWS.

Recursos

Referências

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.

Deixar uma resposta