M. David Allen é um engenheiro de software full-stack e empresário que, há mais de uma década, trabalha com praticamente todas as linguagens de programação e sistemas de banco de dados diferentes que pode usar. David trabalhou anteriormente em vários setores, incluindo finanças, saúde e governo, concentrando-se normalmente em desafios de integração de dados em grande escala, transição de pesquisa aplicada e inovação tecnológica. Ele tem mestrado pela Virginia Commonwealth University, mas desde que deixou a educação formal continua sendo um estudante permanente de tecnologia.

A história de tudo do Couchbase: DCP

Escondido atrás de um acrônimo DCP (protocolo de alteração de banco de dados), o Couchbase tem um superpoder secreto. A maioria das pessoas pensa em bancos de dados como locais de armazenamento de dados em um determinado momento. Mas com o Protocolo de alteração de banco de dados (DCP)Em um cluster do Couchbase, um cluster do Couchbase pode ser visto como um fluxo contínuo de alterações.

Essencialmente, o Couchbase pode "retroceder a história" e reproduzir tudo o que aconteceu com o banco de dados desde o início. Ao fazer isso, ele pode resolver qualquer estado interno desde então. Neste artigo, abordaremos o motivo pelo qual alguém gostaria de fazer uma coisa tão maluca em primeiro lugar e como podemos explorar esse superpoder para fazer coisas muito legais com nossos documentos.

O que é DCP?

Como um banco de dados em cluster, o Couchbase aborda uma série de problemas especializados que a arquitetura do banco de dados precisa resolver. Ele precisa manter vários nós em sincronia uns com os outros, mesmo que um deles apresente problemas temporários ou que haja uma interrupção de rede entre eles. Ele também precisa ser rápido - rápido o suficiente para receber grandes volumes de novos documentos e também lidar com consultas à medida que elas surgem.

Parte do projeto subjacente do Couchbase e como isso é possível é por meio de alterações de fluxo em um abordagem somente de anexos[1]. Isso significa que, quando você altera um documento, o Couchbase não vai procurar o documento e modificá-lo no local em disco. Em vez disso, ele simplesmente acrescenta a um registro de chaves e valores qualquer que seja o resultado da sua mutação e continua. Dessa forma, as gravações podem ser feitas muito rapidamente e é mais fácil coordenar vários nós.

Se você estiver familiarizado com bancos de dados relacionais, a abordagem do DCP é um pouco semelhante à do registro de gravação antecipada que você vê em outros softwares.

Por que se preocupar com a forma como o Couchbase faz isso internamente?

Em algum nível, você quer que seu banco de dados se preocupe com os seguintes aspectos para para que você não precise fazer isso. Mas, no caso do DCP, nós nos preocupamos com isso porque podemos aproveitar esse fluxo de eventos e fazer todo tipo de coisa legal com ele, por exemplo:

Replicação de dados em bancos de dados completamente diferentes. O Couchbase já tem várias opções disponíveis conectorescomo o Elasticsearch. Você pode configurar um cluster separado do Elasticsearch e fazer com que ele contenha uma cópia de todos os dados do Couchbase, expondo todos os seus dados aos recursos que o outro banco de dados pode oferecer a você. Manter esses dois clusters normalmente seria um problema de sincronização bastante complicado, mas como os conectores são alimentados principalmente pelo DCP, podemos pensar nas mensagens do DCP como um fluxo de "git commits" que mantém continuamente o outro banco de dados atualizado.

Uso de abordagens baseadas em filas e integração com outros microsserviços. Se você puder escrever um trecho de código para escutar esse fluxo DCP, também poderá filtrá-lo apenas para as mensagens de seu interesse. Talvez seja apenas quando algo é excluído ou apenas atualizações de um determinado tipo de documento. Em ambos os casos, você pode usar um cliente DCP para filtrar esse fluxo de mensagens e publicar as mensagens extras em uma fila do RabbitMQ, um tópico do Kafkaou o que você precisar. Isso pode ser muito útil para implementar outras lógicas comerciais complexas. Por exemplo, imagine uma companhia de seguros que, dependendo do estado do cliente, precisa acionar alguma lógica adicional relacionada à conformidade. Ouça as mutações nos documentos do cliente, filtre por estado, publique na fila certa e deixe que outro serviço se preocupe com a diferença entre o que deve ser feito para os clientes da Virgínia e os de Maryland.

Análise de séries temporais/revisões. Cada valor em seu banco de dados muda com o tempo. Alguns são escritos uma vez e esquecidos. Outros podem ser atualizados com frequência. Para aqueles que são atualizados com frequência, o DCP permite que você trate cada item como um séries temporais. Você sabe qual era o valor anterior, quando foi alterado e para que foi alterado. Isso permite famílias inteiras de análises de dados downstream interessantes. Você acha que as pessoas fazem mais avaliações de cervejas em seu site nas noites de sexta-feira e sábado, ou nas manhãs de terça-feira?

Essencialmente, o DCP pode ser usado como uma espécie de cola arquitetônica; uma forma de obter dados do Couchbase para outros sistemas, o que torna o Couchbase mais fácil e mais flexível para integração com outros sistemas.

Por fim, é preciso dizer que o recurso padrão de replicação entre datacenters (XDCR) do Couchbase, que permite replicar para outro cluster do Couchbase para backup e recuperação de desastres pode usar o DCP da mesma forma. Portanto, essencialmente, o DCP não é apenas um "recurso extra agradável de se ter", ele está realmente incorporado ao núcleo, desde os fundamentos de como a arquitetura de armazenamento funciona, até o fornecimento de uma base para outros recursos do Couchbase, como o XDCR.

E se eu quisesse fazer ?

Você precisará de um cliente DCP, que é apenas um módulo de software que permite aceitar mensagens DCP e processá-las. No momento em que escrevo, há um bom módulo pronto para Javae um para Python também, embora ele possa estar desatualizado.

Alguns detalhes do DCP ...

O DCP pode ser considerado basicamente como um fluxo de mensagens de mutação e exclusão. Uma mutação ocorre sempre que uma chave ou o conteúdo por trás dela é alterado de alguma forma. Uma exclusão é exatamente o que parece. Há outros tipos de mensagens DCPmas, por enquanto, vamos nos limitar a exclusões e mutações.

O que há em uma mensagem DCP? Dois itens importantes incluem:

  • Um identificador do vBucket. Nos bastidores, o Couchbase é apenas um grande armazenamento de chave/valor. Como sabemos que se trata de um banco de dados distribuído, o Couchbase divide todas as chaves do banco de dados e as atribui a diferentes "partições", chamadas vBuckets. O identificador do vBucket apenas informa ao banco de dados qual segmento do espaço de chaves está mudando. Há muito mais informações disponíveis sobre esse tópico se você quiser se aprofundar, mas há muita configurabilidade no Couchbase em torno dos vBuckets. Nesta imagem, podemos ver que 9 vBuckets estão sendo distribuídos em 3 servidores, sem redundância.
  • Um número crescente. O valor do número não é muito importante, mas o que é importante é que ele sempre aumenta. É assim que o Couchbase pode ordenar todas as mensagens DCP no tempo, o que é muito importante.

vbuckets

Fonte da imagem: http://static.couchbaseinc.hosting.ca.onehippo.com/images/server/3.x/20170420-170703/vbuckets.png

Nosso caso de uso simples

Vamos pegar o amostra de cerveja como um exemplo. Os usuários podem classificar as cervejas; quando a classificação agregada de uma cerveja atinge um determinado limite, o pessoal de marketing quer saber. Eles provavelmente ligarão para o fabricante da cerveja e perguntarão se ele quer anunciar em nosso site de cervejas. Ou, melhor ainda, talvez se alguma cerveja atingir 5 estrelas, eles farão um estoque para a próxima reunião da empresa. De qualquer forma, eles querem saber sobre as cervejas 5 estrelas.

O problema é que o pessoal de marketing tem um sistema de leads separado. Podemos notificá-los fazendo uma simples postagem HTTP em seu sistema. Quando uma cerveja atinge 5 estrelas, notificamos o sistema de leads deles para que verifiquem a Foo Brew.

Código

O código abaixo foi adaptado do tutorial sobre o Cliente Java DCP. Depois de entender o que está acontecendo, é muito simples adaptá-lo às suas necessidades.

O que está acontecendo nesse código?

  • Conectar-se a uma instância de cliente (e a um determinado bucket)
  • Informe ao cliente em qual intervalo de tempo de mensagens estamos interessados. Estamos buscando o histórico completo do cluster, mas podemos escolher qualquer período de tempo que desejarmos: StreamFrom.BEGINNING, StreamTo.INFINITY
  • Informe ao cliente como processar uma mensagem individual; esse é o código dataEventHandler.
  • No nosso caso, estamos analisando o JSON do documento subjacente e verificando a classificação da cerveja.
  • Nesse caso, nosso processo é executado para sempre, recebendo continuamente novas mensagens à medida que elas ocorrem.

Pontos a serem considerados

Em nosso exemplo simplificado, o que estamos armazenando no Couchbase é sempre um documento JSON. Mas esse não precisa ser o caso. Portanto, em seu aplicativo, você provavelmente precisará incorporar mais alguns recursos inteligentes para filtrar com base nas chaves de seu interesse e não tentar analisar tudo como JSON. O conteúdo do evento DCP é um buffer de bytes, não é uma cadeia de caracteres ou um documento JSON. Isso é fiel à forma do que o Couchbase está realmente armazenando sob o capô.

O DCP também informa as mutações em pontos únicos no tempo. Um detalhe que deixamos passar um pouco é que, embora as classificações de determinadas cervejas possam ficar acima de 4, isso não é uma garantia de que a cerveja seja classificada dessa forma agora mesmo, apenas uma garantia de que era uma vez que sofreu mutação para esse estado. Uma construção mais sofisticada pode levar isso em conta.

Por fim, lembre-se de que isso realmente pode ser longo, dependendo do tamanho e da velocidade de mutação do cluster. Portanto, talvez seja melhor dar uma olhada em técnicas de controle de fluxo para que seu cliente possa acompanhar o fluxo de eventos.

Qual é o próximo passo?

Agora que você já está familiarizado com os DCPs, talvez queira dar uma olhada em Conectores disponíveis do Couchbaseque, em sua maioria, já dependem do DCP e oferecem a você uma maneira de aproveitar tudo isso sem nenhuma codificação.

Outro tópico a ser analisado é sistemas de dados de streaminge os tipos de análises que podem ser feitas "on the fly" em fluxos de dados em vez de em dados no local. A maioria dos provedores de computação em nuvem, como AWS, Google Compute Engine e outros, está fazendo coisas notáveis nesse espaço e, com o DCP, você pode colocar tudo o que tiver em seu cluster do Couchbase em um fluxo de dados que pode ser conectado a qualquer uma dessas poderosas ferramentas downstream.

[1] É um pouco mais complicado, mas estou simplificando e vinculando a arquitetura de armazenamento para que você possa se aprofundar no aprendizado desse tópico.

Esta postagem faz parte do Programa de Redação da Comunidade Couchbase

Autor

Postado por Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase

Laura Czajkowski é a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela é responsável pelo nosso boletim informativo mensal para desenvolvedores.

Deixar uma resposta