Tayeb Chlyah es un arquitecto principal de Java con una sólida experiencia en aplicaciones de rendimiento a gran escala, microservicios y bases de datos NoSQL. Ha desarrollado un par de bibliotecas Java de código abierto para Couchbase.

 

Introducción

Todo desarrollador de éxito necesita estar al día de las nuevas tecnologías punteras y las tendencias emergentes, probarlas, jugar con ellas, ver si pueden encajar en un proyecto y cómo puede mejorarlas.

Pero, ¿cómo lograrlo en un mundo en rápida evolución en el que cada día nacen nuevas tecnologías y marcos de trabajo?

Si eres un desarrollador Java full-stack, tienes mucha suerte: JHipster es la solución para aprehender rápidamente las nuevas tecnologías de la mejor manera. Es un Generador YeomanSpring Boot, un sistema de andamiaje, que te ayuda a generar aplicaciones completas combinando uno de los mejores frameworks en desarrollo web: Spring Boot backend y Angular o React frontend.

Por supuesto, puede utilizar Primavera Initialzro implementarlo todo por ti mismo, pero implementar con éxito esas combinaciones no es nada trivial. Hay que dedicar mucho tiempo a estudiar cada concepto, y luego intentar pegarlo todo, sin olvidar las pruebas, lo que puede ser muy costoso y propenso a errores. Y sobre todo, puede desanimarte o, en el mejor de los casos, obligarte a centrarte en uno de los frameworks.

JHipster construye aplicaciones totalmente probadas de forma rápida y sencilla, utilizando las mejores prácticas, metodologías y estrategias. Propone muchas opciones (Arquitectura - monolito o microservicios; Base de datos - SQL o NoSQL; Seguridad - autenticación de sesión, JWT u OAuth2; Otros - WebSocket, cachés, Docker, Kubernetes ...), que puede ayudarle a probar las mejores tecnologías que existen, y elegir las combinaciones más adecuadas para su caso de uso.

Hoy vamos a centrarnos en algunos de los nuevos conceptos arquitectónicos más importantes: microservicios y NoSQL con Couchbase.

¿Por qué Couchbase?

Couchbase es una base de datos NoSQL orientada a documentos. Con las bases de datos de documentos, tienes un diseño sin esquemas que te permite cambiar tus datos libre y fácilmente. También puedes almacenar toda la estructura en un único documento, evitando muchas uniones innecesarias, lo que se traduce en operaciones de lectura y escritura naturalmente más rápidas.

Couchbase expone un rápido almacén de claves y valores y un potente motor de consultas junto con indexadores integrados para consultar datos con N1QL, un lenguaje similar a SQL para documentos JSON. Gracias a su arquitectura distribuida sin maestros, es muy fácil de escalar. Puede realizar millones de operaciones por segundo sin necesidad de una caché de terceros. Couchbase también viene con búsqueda de texto completo integrada, un motor de análisis y una solución móvil completa.

¿Por qué microservicios?

La arquitectura de microservicios es un patrón de desarrollo de sistemas de software que se centra en la creación de aplicaciones como un conjunto de servicios pequeños, modulares y poco acoplados, lo que permite una entrega continua más sencilla, una mejor capacidad de prueba, escalabilidad y un mejor aislamiento de fallos. Cada servicio puede estar escrito en diferentes lenguajes y puede utilizar diferentes técnicas de almacenamiento de datos, lo que permite la capacidad de organizar el desarrollo en torno a múltiples equipos de características.

Pero los microservicios conllevan algunos retos: descomponer la aplicación en servicios puede ser muy complicado y es todo un arte. Los desarrolladores también tienen que lidiar con la complejidad adicional de un sistema distribuido.

JHipster gestiona la mayor parte de las complejidades de los microservicios: Descubrimiento y configuración de servicios con Cónsul o Registro JHipster (Netflix Eureka, Servidor de configuración de Spring Cloudy panel de control), equilibrio de carga con Cinta Netflixtolerancia a fallos con Netflix Hystrixy registro y supervisión centralizados con jhipster-consola (pila personalizada de Elasticsearch, Logstash y Kibana), y mucho más.

Creación de un microservicio de cervecería

Requisitos previos:

yarn global add generador-jhipster

Generar una pasarela API

Para poder acceder a nuestros diferentes servicios en una arquitectura de microservicios, vamos a necesitar un Pasarela API. Es la entrada a sus microservicios. Proporciona enrutamiento HTTP (Netflix Zuul) y el equilibrio de carga (Cinta Netflix), la calidad de los servicios (Netflix Hystrix), seguridad (Seguridad en primavera) y la documentación de la API (Swagger) para todos los microservicios.

En una ventana de terminal:

JHipster te pregunta sobre el tipo de aplicación que quieres crear y qué características quieres incluir. Puedes encontrar todos los detalles sobre las opciones disponibles en Sitio web de JHipsterUtilice las siguientes respuestas para generar una pasarela compatible con Couchbase.

Generar una aplicación de microservicio de cervecería

En couchbase-jhipster-microservicios-ejemplocrear un cervecería y ejecute jhipster para generar un microservicio con base de datos Couchbase con las siguientes respuestas:

Generar entidades cerveceras

Crear un archivo cervecería.jh en couchbase-jhipster-microservicios-ejemplo con lo siguiente JDL (Lenguaje de dominio JHipster):

paginar Beer con paginador
paginar Cervecería con infinite-scroll

En una ventana de terminal, ejecute los siguientes comandos:

Cuando se le pida que sobrescriba archivos, responda siempre a.

Ejecutar la arquitectura de microservicios

Para ejecutar nuestra arquitectura, necesitamos iniciar lo siguiente:

  1. Registro JHipster
  2. Keycloack: una solución de código abierto para la gestión de identidades y accesos
  3. Servidor Couchbase
  4. Microservicio de cervecería
  5. Pasarela

Afortunadamente, JHipster tiene un subgenerador docker-compose que iniciará todos los servicios necesarios sin quebraderos de cabeza. Pero primero, tenemos que construir nuestras aplicaciones. En couchbase-jhipster-microservicios-ejemplo:

Ahora, podemos generar docker-compose.yml utilizando el siguiente comando y respuestas:

Para que nuestra aplicación funcione con un keycloak local, tenemos que añadir a tu archivo hosts (Windows: C:\Windows\System32\drivers\etc\hostsMac/Linux: /etc/hosts) la línea siguiente:

Antes de iniciar todo, asegúrese de que ha configurado Docker con suficiente memoria y CPU, a continuación, ejecute:

Una vez que todo termine de arrancar, abre un navegador para Pasarela (http://localhost:8080/), haga clic en cuenta y, a continuación, inicie sesión.

Debería ser redirigido a keycloakInicie sesión con admin tanto para el usuario como para la contraseña.

Volverás a la pasarela, donde podrás ver las interfaces de administración, cambiar el idioma, ver y editar tus entidades...

 

 

Registro JHipster

Ahora abre tu navegador en http://localhost:8761/. Se iniciará sesión automáticamente puesto que ya lo has hecho en keycloak, que es la magia de la autenticación oauth2.

Además de ser la columna vertebral de su aplicación de microservicio, ya que es un servidor de descubrimiento con Eureka que se encarga del enrutamiento, el equilibrio de carga y la escalabilidad, y un servidor de configuración con Servidor de configuración de Spring Cloud que proporciona la configuración en tiempo de ejecución de sus aplicaciones, Registro JHipster es también un servidor de administración, donde puede visualizar las instancias de su aplicación, su estado, las métricas y los registros.

¿Cómo funciona?

Acceso a la base de datos

En primer lugar, necesita acceder a la instancia brewery-couchbase. Para ello, actualice docker-compose/docker-compose.yml para publicar su puerto de interfaz de administración con lo siguiente:

Apliquemos nuestros cambios, en docker-compose directorio:

Cuando todo esté listo, abra la interfaz de administración de Couchbase en http://localhost:8091/e inicie sesión con Administrador como usuario y contraseña como contraseña. Abrir cubo cervecero Documentos.

Couchmove
Como puedes ver, tu cubo ya está poblado con algunos documentos: JHipster rellena los documentos de arranque usando Couchmoveuna biblioteca Java de migración de datos para Couchbase, ampliamente inspirada en Ruta de vueloya que favorece la simplicidad y la convención frente a la configuración.

Puede consultar los archivos de registro de cambios en

  • V0.1__configuración_inicial directorio: contiene documentos de usuario y autoridad, utilizados por Seguridad en primavera para autenticar a los usuarios.
  • V0__create_indexes.n1qlcrea los índices necesarios.

Como Flyway o liquibase para bases de datos SQL, Couchmove mantiene registro de cambios documentos, haciendo un seguimiento de los registros de cambios ejecutados.

Spring Boot y Spring Data Couchbase

JHipster genera un Spring Boot 2 aplicación y usos Datos de primavera para acceder a bases de datos relacionales y no relacionales. En nuestro caso, se utiliza Spring Data Couchbase para proporcionar integración con la base de datos Couchbase Server. Pero va mucho más allá personalizando su funcionamiento:

Por defecto, Spring Data Couchbase utiliza N1qlCouchbaseRepository.java que aprovecha N1QL sólo para paginación u ordenación findAll operaciones. Todas las demás operaciones utilizan vistas como se puede ver en la implementación de SimpleCouchbaseRepository.java. Dado que siempre se accede a los índices de vistas desde el disco, no son tan performante.

Veamos cómo JHipster mejora este comportamiento:

Configuración de la base de datos configura e inicia las migraciones de Couchmove, y también habilita los repositorios de Couchbase pero con una clase base personalizada: CustomN1qlCouchbaseRepository

Esta clase extiende el repositorio por defecto para auto-generar el ID del documento antes de guardarlo, y habilita el uso de N1QL para todas las operaciones implementando CustomN1qlRespository interfaz:

Los identificadores se generan automáticamente mediante Valor generado con un prefijo IdPrefix que por defecto es el nombre de la clase, separado por __ delimitador.

Pruebas

Hemos dicho antes que las aplicaciones generadas por JHipster se prueban completamente con pruebas unitarias y de pruebas de integración¿pero cómo funciona para los de integración?

Para Couchbase, utiliza Couchbase testContainersque es un módulo que amplía contenedores de pruebauna librería Java que facilita el lanzamiento de cualquier contenedor Docker durante la duración de las pruebas JUnit, con el fin de iniciar automáticamente una instancia de Couchbase Server, y configurarlo con los servicios, usuarios, buckets e índices necesarios.

Para ejecutar las pruebas, ejecute el siguiente comando en una ventana de terminal:

Rellenar algunos datos

Para rellenar algunos datos, utilizaremos Couchbase Cubos de muestra. Abrir Ajustes ficha, Cubos de muestraa continuación, seleccione la muestra de cerveza y haga clic en Cargar datos de muestra.

Es necesario dar forma a los datos en Spring Data Couchbase formato de serialización. Para ello, abra la pestaña Consulta y ejecute las siguientes consultas:

He aquí un ejemplo de documento de cerveza insertado:

Ahora veamos cómo JHipster maneja los documentos recién insertados. Navegue a Pasarela, Entidadesa continuación, abra Cervecería. JHipster carga primero 20 cervecerías, y si te desplazas hacia abajo, ¡carga más! Propone navegación por páginas para Cerveza porque elegimos este comportamiento al generar entidades con cervecería.jh JDL.

Código fuente

El código fuente de las aplicaciones generadas está disponible en tchlyah/couchbase-jhipster-microservicios-ejemplo.

¿Y ahora qué?

JHipster, con la ayuda de Elasticsearch, propone una opción que añade funciones de búsqueda sobre la base de datos. Pero Couchbase tiene un out-of-the-box Búsqueda de texto completo que ofrece amplias posibilidades de consulta en lenguaje natural. ¿Por qué no implementar ese soporte en JHipster? Si puedes ayudarnos, no dudes en contribuir!

Si tienes alguna pregunta, envíame un tweet a @tchlyah o deje un comentario a continuación.

Autor

Publicado por Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase

Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro boletín mensual para desarrolladores.

Dejar una respuesta