Engenharia

Integração do Couchbase com o Hyperledger Fabric: Um mergulho técnico profundo

O que é o Couchbase?

O Couchbase é um banco de dados de documentos NoSQL distribuído que oferece uma solução de gerenciamento de dados flexível, de alto desempenho e dimensionável. Ele combina os melhores recursos dos bancos de dados de documentos com armazenamentos de valores-chave, o que o torna adequado para o desenvolvimento de aplicativos modernos.

Os principais recursos do Couchbase incluem:

    1. Armazenamento orientado a documentos: O Couchbase armazena dados como documentos JSON, o que permite a criação de esquemas flexíveis.
    2. Arquitetura que prioriza a memória: A abordagem memory-first do Couchbase garante alto desempenho ao manter na memória os dados acessados com frequência.
    3. Dimensionamento multidimensional (MDS): O Couchbase MDS melhora o desempenho e reduz os custos, permitindo que você dimensione seus serviços de consulta, índice e dados separadamente.
    4. Camada de cache integrada: Os recursos de cache incorporados oferecem acesso rápido aos dados usados com frequência.
    5. Linguagem de consulta semelhante a SQL (SQL++): O Couchbase oferece uma linguagem de consulta compatível com SQL para facilitar a recuperação e a manipulação de dados.
    6. Indexação avançada: Várias opções de indexação, incluindo índices de pesquisa primária, secundária, espacial e de texto completo.
    7. Capella Columnar: Banco de dados analítico NoSQL nativo de JSON com recursos de GenAI. Use-o para reunir dados de várias fontes e executar consultas analíticas complexas para obter insights oportunos dos dados.

Por que Couchbase com Fabric?

Tecido Hyperledger já oferece suporte ao CouchDB como uma opção de banco de dados de estado além do LevelDB padrão. No entanto, a integração do Couchbase oferece várias vantagens:

    1. Escalabilidade aprimorada: A arquitetura distribuída do Couchbase permite um melhor dimensionamento horizontal do que o CouchDB, essencial para redes de blockchain empresariais com volumes de dados crescentes.
    2. Desempenho aprimorado: O design do Couchbase que prioriza a memória oferece melhor desempenho para redes de blockchain de alto rendimento. Isso é particularmente importante para consultas complexas e consultas ricas sobre o estado do mundo.
    3. Recursos empresariais: O Couchbase oferece recursos de nível empresarial, como:
      • Ferramentas avançadas de monitoramento e gerenciamento
      • Recuperação de desastres integrada
      • Replicação entre centros de dados (XDCR)
      • Índices otimizados para memória
      • Change Data Capture (CDC), registra e retém alterações no nível do documento para processamento em tempo real
    4. Suporte a consultas avançadas: O Couchbase oferece suporte a consultas avançadas sobre o estado do mundo, mas com melhores características de desempenho para consultas complexas.
    5. Melhor simultaneidade: O Couchbase lida com operações simultâneas de forma mais eficiente do que o CouchDB, o que é importante para redes de blockchain de alta transação.
    6. Integração com SDK nativo: O Couchbase fornece um SDK robusto em várias linguagens de programação, facilitando a integração com vários aplicativos e serviços.
    7. Análises: Execute análises em seus dados do Fabric usando o armazenamento colunar do Couchbase Enterprise Analytics para processamento mais rápido de grandes conjuntos de dados, permitindo insights em tempo real sobre transações de blockchain sem afetar o desempenho operacional.

Configuração rápida

Esta é uma configuração rápida apenas para fins de teste. Nesta configuração, usaremos amostras de tecido. Você também pode assistir a este Vídeo de demonstração 🔗

1. Configuração do servidor Couchbase

    • Instale o Couchbase Server, use as instruções aqui
    • Abra o Console da Web do Couchbase (geralmente em http://localhost:8091)
    • Configure as credenciais de administrador para o usuário: Administrador e senha: Senha@123
    • Crie dois buckets chamados tecido-1 e tecido-2 (a criação de um bucket criará Padrão em seu próprio escopo)

2. Configurações de tecido

  • Clone o repositório fabric-samples:

  • Baixe os binários adequados para seu computador e extraia-os do repositório fabric-samples: 
    • https://github.com/jaykumar-cb/fabric/releases 
    • https://github.com/hyperledger/fabric-ca/releases
  • Se você estiver no MacOS, execute o seguinte comando para remover os binários da quarentena:

  • Abra as amostras de tecido em seu editor de texto preferido
  • Crie esses arquivos:

  • Modifique seu arquivo network.sh para usar o novo arquivo docker-compose-couchbase.yaml:

  • Iniciar a rede de malha

  • Agora você pode implantar qualquer chaincode que quiser e fazer operações como de costume. Você precisará alterar as consultas e os índices para usar o SQL++ em vez das consultas do Mango. A próxima seção contém o guia para isso.

Alterações na consulta Chaincode

As consultas em seu chaincode serão alteradas para usar SQL++ em vez de Mango Queries. Exemplo:

Mudanças no índice

Haverá alterações semelhantes em seus índices. A estrutura da pasta permanecerá a mesma, apenas a parte da consulta será alterada.

Observação: o Couchbase oferece suporte a vários tipos de índices para diferentes padrões de consulta e cenários de otimização de desempenho. Ao integrar o Couchbase com o Hyperledger Fabric, essas opções flexíveis de indexação oferecem vantagens significativas de desempenho para consultas complexas no banco de dados de estado do blockchain.


Dica: Em um ambiente de produção, é recomendável que cada par tenha sua própria instância dedicada do Couchbase. Você deve criar uma instância para cada par.

Dica: Abaixo estão as opções de configuração que você pode colocar em seu core.yaml para cada par:


As interfaces implementadas no base de dados estatísticos pacote

O base de dados estatísticos O pacote Hyperledger implementa várias interfaces importantes que permitem que ele funcione como um banco de dados de estado baseado em Couchbase para o Hyperledger Fabric. Essas interfaces definem o contrato para operações de banco de dados de estado e fornecem a base para a funcionalidade de ledger do Fabric.

Interfaces do banco de dados principal

1. statedb.VersionedDBProvider

Implementado por: Provedor de banco de dados versionado

Essa interface serve como fábrica e gerenciador de ciclo de vida para bancos de dados de estado com controle de versão. Ela é responsável por criar, gerenciar e descartar instâncias de banco de dados para diferentes canais. O provedor atua como ponto de entrada para o subsistema de banco de dados de estado e lida com a coordenação entre vários bancos de dados de canais.

Objetivo:

    • Gerenciamento de instâncias de banco de dados em vários canais
    • Gerenciamento do ciclo de vida dos recursos
    • Recursos de importação/exportação de instantâneos
    • Configuração e limpeza no nível do provedor

2. statedb.VersionedDB

Implementado por: VersionedDB

Essa é a interface principal para operações de banco de dados de estado e representa a funcionalidade principal necessária para o gerenciamento de estado da Fabric. Ela fornece as operações essenciais de leitura/gravação necessárias para a execução de chaincode, validação de transações e confirmações de blocos.

Objetivo:

    • Acesso e manipulação de dados de estado central
    • Controle de versão para MVCC (Multi-Version Concurrency Control)
    • Processamento de transações em lote
    • Recursos de execução de consultas
    • Consistência do banco de dados e gerenciamento de pontos de salvamento

Interfaces de otimização de desempenho

3. statedb.BulkOptimizable

Implementado por: VersionedDB

Essa interface fornece otimizações de desempenho para operações em massa durante o processamento de blocos. Ela foi projetada para aumentar a eficiência das fases de validação e confirmação de transações, permitindo operações em lote e mecanismos de cache.

Objetivo:

    • Carregamento de versões em massa para validação de transações
    • Armazenamento em cache na memória de dados de versão acessados com frequência
    • Otimização do desempenho durante o processamento de blocos
    • Redução das idas e vindas ao banco de dados durante a validação

4. statedb.IndexCapable

Implementado por: VersionedDB

Essa interface permite recursos avançados de consulta por meio do suporte a índices de banco de dados personalizados. Ela permite que os chaincodes definam e usem consultas complexas que vão além de simples pesquisas de valores-chave, o que é particularmente importante para aplicativos comerciais que exigem uma rica funcionalidade de consulta.

Objetivo:

    • Criação e gerenciamento de índices personalizados
    • Suporte para consultas complexas de chaincode
    • Recursos de otimização específicos do banco de dados
    • Desempenho de consulta aprimorado para lógica comercial

Interfaces do iterador

5. Interação de resultados, Interlocutor de resultados de consulta, FullScanIterator

Implementado por: queryScanner, dbsScanner

Essas interfaces oferecem diferentes tipos de recursos de iteração no banco de dados de estado. Elas permitem a passagem eficiente de resultados de consultas, varreduras de intervalos e varreduras completas do banco de dados, ao mesmo tempo em que oferecem suporte a recursos como paginação e bookmarking.

Objetivo:

    • Iteração eficiente em grandes conjuntos de resultados
    • Processamento de dados com eficiência de memória
    • Suporte à paginação para consultas grandes
    • Geração de instantâneos e exportação de dados
    • Recursos de escaneamento de alcance

Composição e design de interface

O base de dados estatísticos demonstra uma implementação bem estruturada da arquitetura de banco de dados de estado do Fabric por meio da composição de interfaces. O pacote VersionedDB implementa várias interfaces simultaneamente, fornecendo:

    • Funcionalidade em camadas: Operações principais por meio de VersionedDBcom otimizações opcionais via BulkOptimizable e IndexCapable
    • Separação de preocupações: Operações no nível do provedor separadas das operações no nível do banco de dados
    • Extensibilidade: Recursos adicionais podem ser adicionados por meio de novas interfaces sem interromper a funcionalidade existente
    • Flexibilidade de desempenho: As interfaces de otimização opcionais permitem que as implementações ofereçam desempenho aprimorado quando suportadas

Esse design permite que a implementação do Couchbase ofereça uma funcionalidade avançada e, ao mesmo tempo, mantenha a compatibilidade com a camada de abstração de banco de dados da Fabric, permitindo a alternância perfeita entre diferentes implementações de banco de dados de estado com base nos requisitos de implantação.

Observação: Os pares que usam o Couchbase como StateDB são compatíveis com os pares que usam o CouchDB como StateDB


Conclusão

As implantações de blockchain corporativo da Hyperledger Fabric enfrentam um dilema crítico de banco de dados: o LevelDB oferece alto desempenho, mas elimina os recursos avançados de consulta essenciais para aplicativos modernos, enquanto o CouchDB fornece consultas JSON, mas apresenta limitações graves, incluindo consistência de dados eventual, gargalos de desempenho devido à sua arquitetura de armazenamento de documentos pura que limita a consulta e diminui o desempenho, além de suporte empresarial limitado como um projeto de código aberto com ambientes rígidos. 

O Couchbase Server aborda diretamente esses desafios, fornecendo consistência forte com transações ACID distribuídas que eliminam problemas de reconciliação, desempenho avançado de consulta por meio de SQL++ (também conhecido como N1QL) que supera a API de localização limitada do CouchDB, além de suporte empresarial abrangente com serviços profissionais, opções de implantação flexíveis e ferramentas de gerenciamento avançadas. 

As organizações que mudam para o Couchbase normalmente experimentam tempos de resposta inferiores a milissegundos, maior tempo de atividade do aplicativo e tecnologia superior de replicação entre datacenters, o que o torna a solução ideal para implantações de blockchain corporativo que exigem alta taxa de transferência de transações e recursos sofisticados de consulta sem forçar compromissos entre desempenho e funcionalidade.

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

Autor

Postado por Jay Kumar - Engenheiro de software, P&D

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.