Tayeb Chlyah é um arquiteto líder em Java com sólida experiência em aplicativos de desempenho em larga escala, microsserviços e bancos de dados NoSQL. Ele desenvolveu algumas bibliotecas Java de código aberto para o Couchbase.

 

Introdução

Todo desenvolvedor bem-sucedido precisa se manter atualizado com as novas tecnologias de ponta e as tendências emergentes, experimentando-as, brincando com elas, verificando se elas podem se encaixar em um projeto e como podem melhorá-las.

Mas como é possível conseguir isso em um mundo em rápida mudança, onde novas tecnologias e estruturas surgem diariamente?

Se você é um desenvolvedor Java full-stack, tem muita sorte: o JHipster é a solução para aprender rapidamente novas tecnologias da melhor maneira. Ele é um Gerador YeomanO Spring Boot é um sistema de andaimes que ajuda você a gerar aplicativos completos combinando uma das melhores estruturas de desenvolvimento da Web: back-end Spring Boot e front-end Angular ou React.

É claro que você pode usar Inicialização do SpringNo entanto, implementar essas combinações com sucesso não é nada trivial. Você precisa dedicar muito tempo ao estudo de cada conceito e, em seguida, tentar colar tudo, sem esquecer os testes, o que pode ser muito caro e propenso a erros. E, acima de tudo, isso pode desencorajá-lo ou, na melhor das hipóteses, obrigá-lo a se concentrar em uma das estruturas.

O JHipster cria aplicativos totalmente testados de forma rápida e fácil, usando práticas recomendadas, metodologias e estratégias. Ele propõe várias opções (Arquitetura - monólito ou microsserviços; banco de dados - SQL ou NoSQL; segurança - autenticação por sessão, JWT ou OAuth2; Outros - WebSocket, caches, Docker, Kubernetes...), que podem ajudá-lo a experimentar as melhores tecnologias disponíveis e escolher as combinações mais adequadas para o seu caso de uso.

Hoje, vamos nos concentrar em alguns dos novos conceitos de arquitetura mais importantes: microsserviços e NoSQL com o Couchbase.

Por que o Couchbase?

O Couchbase é um banco de dados NoSQL orientado a documentos. Com os bancos de dados de documentos, você tem um design sem esquema que permite alterar seus dados de forma livre e fácil. Também é possível armazenar toda a estrutura em um único documento, evitando muitas junções desnecessárias, o que significa operações de leitura e gravação naturalmente mais rápidas.

O Couchbase expõe um rápido armazenamento de valores-chave e um mecanismo de consulta avançado, juntamente com indexadores integrados para consultar dados com N1QL, uma linguagem semelhante a SQL para documentos JSON. Com sua arquitetura distribuída sem mestre, ele é muito fácil de dimensionar. Ele pode fornecer milhões de operações por segundo sem a necessidade de um cache de terceiros para executar. O Couchbase também vem com pesquisa de texto completo integrada, um mecanismo de análise e uma solução móvel completa.

Por que microsserviços?

A arquitetura de microsserviços é um padrão de desenvolvimento de sistemas de software que se concentra na criação de aplicativos como um conjunto de serviços pequenos, modulares e fracamente acoplados, permitindo uma entrega contínua mais fácil, melhor testabilidade, escalabilidade e melhor isolamento de falhas. Cada serviço pode ser escrito em diferentes linguagens e pode usar diferentes técnicas de armazenamento de dados, o que permite a capacidade de organizar o desenvolvimento em várias equipes de recursos.

Mas os microsserviços trazem alguns desafios: a decomposição do aplicativo em serviços pode ser muito complicada e é uma arte. Os desenvolvedores também precisam lidar com a complexidade adicional de um sistema distribuído.

O JHipster lida com a maioria das complexidades dos microsserviços: Descoberta e configuração de serviços com o Cônsul ou Registro JHipster (Netflix Eureka, Servidor de configuração do Spring Cloude painel de monitoramento), balanceamento de carga com Fita da Netflixtolerância a falhas com Netflix Hystrixe registro e monitoramento centralizados com jhipster-console (pilha personalizada Elasticsearch, Logstash e Kibana) e muito mais.

Criação de um microsserviço de cervejaria

Pré-requisitos:

yarn global add generator-jhipster

Gerar um gateway de API

Para acessar nossos diferentes serviços em uma arquitetura de microsserviço, precisaremos de um Gateway de API. É a entrada para seus microsserviços. Ele fornece roteamento HTTP (Netflix Zuul) e balanceamento de carga (Fita da Netflix), qualidade dos serviços (Netflix Hystrix), segurança (Segurança do Spring) e a documentação da API (Swagger) para todos os microevices.

Em uma janela de terminal:

O JHipster pergunta sobre o tipo de aplicativo que você deseja criar e quais recursos deseja incluir. Você pode encontrar todos os detalhes sobre as opções disponíveis em Site da JHipsterUse as respostas a seguir para gerar um gateway com suporte ao Couchbase.

Gerar um aplicativo de microsserviço de cervejaria

Em couchbase-jhipster-microservices-example, crie um cervejaria e, em seguida, execute o jhipster para gerar um microsserviço com o banco de dados Couchbase com as seguintes respostas:

Gerar entidades de cervejaria

Criar um arquivo cervejaria.jh em couchbase-jhipster-microservices-example com o seguinte JDL (Linguagem de domínio do JHipster):

paginar Cerveja com paginador
Paginar a Brewery com rolagem infinita

Em uma janela de terminal, execute os seguintes comandos:

Quando solicitado a substituir arquivos, sempre responda a.

Executar a arquitetura de microsserviço

Para executar nossa arquitetura, precisamos iniciar o seguinte:

  1. Registro JHipster
  2. Chaveiro: uma solução de gerenciamento de identidade e acesso de código aberto
  3. Servidor Couchbase
  4. Microsserviço de cervejaria
  5. Gateway

Felizmente, o JHipster tem uma Subgerador do docker-compose que iniciará todos os serviços necessários sem dor de cabeça. Mas, primeiro, precisamos criar nossos aplicativos. Em couchbase-jhipster-microservices-example:

Agora, podemos gerar docker-compose.yml usando o comando e as respostas a seguir:

Para que nosso aplicativo funcione com um keycloak local, precisamos adicionar ao seu arquivo hosts (Windows: C:\Windows\System32\drivers\etc\hosts, Mac/Linux: /etc/hosts) a seguinte linha:

Antes de iniciar tudo, verifique se você configurou o Docker com memória e CPUs suficientes e, em seguida, execute:

Quando tudo terminar de iniciar, abra um navegador para Gateway (http://localhost:8080/), clique em conta e, em seguida, faça login.

Você deve ser redirecionado para keycloakFaça login usando administrador para usuário e senha.

Você retornará ao gateway, onde poderá ver as interfaces de administração, alterar o idioma, visualizar e editar suas entidades...

 

 

Registro do JHipster

Agora, abra seu navegador para http://localhost:8761/. Você será automaticamente conectado, pois já fez isso no keycloak, que é a mágica da autenticação oauth2.

Além de ser a espinha dorsal de seu aplicativo de microsserviço, como é um servidor de descoberta com Eureka que lida com roteamento, balanceamento de carga e escalabilidade, e um servidor de configuração com Servidor de configuração do Spring Cloud que fornece a configuração do tempo de execução de seus aplicativos, Registro JHipster também é um servidor de administração, onde é possível visualizar as instâncias, a integridade, as métricas e os registros do aplicativo.

Como isso funciona?

Acesso ao banco de dados

Primeiro, você precisa acessar a instância do brewery-couchbase. Para isso, atualize docker-compose/docker-compose.yml para publicar sua porta de interface de administração com o seguinte:

Vamos aplicar nossas alterações, em docker-compose diretório:

Quando tudo estiver pronto, abra a interface de administração do Couchbase em http://localhost:8091/e, em seguida, faça login usando Administrador como usuário e senha como senha. Abrir documentos de balde da cervejaria.

Couchmove
Como você pode ver, seu bucket já está preenchido com alguns documentos: O JHipster preenche os documentos de bootstrap usando Couchmoveuma biblioteca de migração de dados Java para o Couchbase, amplamente inspirada em Flywaypois favorece muito mais a simplicidade e a convenção do que a configuração.

Você pode dar uma olhada nos arquivos changelog em

  • V0.1__initial_setup diretório: contém documentos de usuário e de autoridade, usados por Segurança do Spring para autenticar usuários.
  • V0__create_indexes.n1qlcria os índices necessários.

Como Flyway ou liquibase para bancos de dados SQL, Couchmove mantém changelog documentos, mantendo o controle dos registros de alterações executados.

Spring Boot e Spring Data Couchbase

O JHipster gera um Spring Boot 2 aplicativo e usos Dados do Spring para acessar bancos de dados relacionais e não relacionais. No nosso caso, ele está usando Dados do Spring Couchbase para fornecer integração com o banco de dados do Couchbase Server. Mas ele vai muito além, personalizando o seu funcionamento:

Por padrão, o Spring Data Couchbase usa N1qlCouchbaseRepository.java que utiliza o N1QL apenas para paginação ou classificação findAll operações. Todas as outras operações estão usando visualizações como você pode ver na implementação do SimpleCouchbaseRepository.java. Como os índices de visualização são sempre acessados do disco, eles não são tão eficaz.

Vamos ver como o JHipster melhora esse comportamento:

DatabaseConfiguration configura e inicia as migrações do Couchmove e também ativa os repositórios do Couchbase, mas com uma classe base personalizada: CustomN1qlCouchbaseRepository

Essa classe estende o repositório padrão para gerar automaticamente o ID do documento antes de salvá-lo e permite o uso do N1QL para todas as operações implementando CustomN1qlRespository interface:

Os IDs são gerados automaticamente usando Valor Gerado com um prefixo usando IdPrefix que, por padrão, é o nome da classe, separado por __ delimitador.

Testes

Dissemos anteriormente que os aplicativos gerados pelo JHipster são totalmente testados com testes unitários e testes de integraçãomas como isso funciona para os de integração?

Para o Couchbase, ele usa Contêineres de teste do Couchbaseque é um módulo que estende contêineres de testeuma biblioteca Java que facilita o lançamento de qualquer contêiner Docker durante os testes JUnit, para iniciar automaticamente uma instância do Couchbase Server e configurá-lo com os serviços, usuários, buckets e índices necessários.

Para executar os testes, execute o seguinte comando em uma janela de terminal:

Preencher alguns dados

Para preencher alguns dados, aproveitaremos as vantagens do Baldes de amostra do Couchbase. Abrir Configurações guia, Baldes de amostrae, em seguida, selecione beer-sample (amostra de cerveja) e clique em Carregar dados de amostra.

Você precisa modelar os dados em Dados do Spring Couchbase formato de serialização. Para isso, abra a guia Query (Consulta) e execute as seguintes consultas:

Aqui está um exemplo de um documento de cerveja inserido:

Agora vamos ver como o JHipster lida com documentos recém-inseridos. Navegue até Gateway, Entidadese, em seguida, abra Cervejaria. O JHipster carrega primeiro 20 cervejarias e, se você rolar a tela para baixo, ele carrega mais! Ele propõe a navegação na página para Cerveja porque escolhemos esse comportamento ao gerar entidades com cervejaria.jh JDL.

Código-fonte

O código-fonte dos aplicativos gerados está disponível em tchlyah/couchbase-jhipster-microservices-example.

O que vem a seguir?

O JHipster, com a ajuda do Elasticsearch, propõe uma opção que adiciona recursos de pesquisa sobre o banco de dados. Mas o Couchbase tem um recurso pronto para uso Pesquisa de texto completo que oferece amplos recursos para consultas em linguagem natural. Por que não implementar esse suporte no JHipster? Se você puder ajudar, não hesite em contribuir!

Se você tiver alguma dúvida, envie-me um tweet para @tchlyah ou deixe um comentário abaixo.

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