Dise帽o de aplicaciones

Descubrimiento de servicios con Java y aplicaci贸n de base de datos en DC/OS

Este blog mostrar谩 c贸mo una simple aplicaci贸n Java puede hablar con una base de datos o base de datos como servicio (DBaaS) utilizando el descubrimiento de servicios en DC/OS.

DC/OS logo

驴Por qu茅 Service Discovery?

Una aplicaci贸n suele constar de varios componentes, como un servidor de aplicaciones, una base de datos, un servidor web, un servidor de almacenamiento en cach茅 y un servidor de mensajer铆a. Normalmente, se ejecutan varias r茅plicas de cada componente en funci贸n de las necesidades de la aplicaci贸n. Desplegar esta aplicaci贸n utilizando un marco de orquestaci贸n de contenedores significa que cada r茅plica se ejecutar铆a como un contenedor. Por lo tanto, una aplicaci贸n se despliega normalmente como una aplicaci贸n multicontenedor.

A cada contenedor se le asigna una direcci贸n IP 煤nica durante toda su vida. Pero los contenedores son ef铆meros y pueden terminar y ser reprogramados en un host diferente por el marco de orquestaci贸n. En ese caso, normalmente se asigna a un contenedor una direcci贸n IP diferente. Esto significa que una aplicaci贸n desplegada en un servidor de aplicaciones no puede confiar en la direcci贸n IP de la base de datos. Aqu铆 es donde se requiere el descubrimiento de servicios.

As铆, a varias r茅plicas de un componente se les asigna un nombre l贸gico. Por ejemplo, web para todos los contenedores del servidor de aplicaciones y db para todos los contenedores de base de datos. Ahora, una aplicaci贸n puede comunicarse con los contenedores de base de datos utilizando el nombre de servicio l贸gico. Esto permite reprogramar los contenedores de base de datos en cualquier parte del cl煤ster, y tambi茅n escalar hacia arriba y hacia abajo de forma din谩mica.

Veamos c贸mo se puede lograr esto en DC/OS con una sola instancia de servidor de aplicaciones y servidor de base de datos. Este blog utilizar谩 WildFly para el servidor de aplicaciones y Couchbase para la base de datos.

Cl煤ster Couchbase en Mesos con DC/OS proporcionan m谩s detalles sobre c贸mo configurar un Couchbase en DC/OS.

Este blog utilizar谩 los siguientes pasos principales:

  • Configuraci贸n del cl煤ster DC/OS
  • Definici贸n de la aplicaci贸n Marathon
  • Despliegue de la aplicaci贸n

El c贸digo fuente completo utilizado en este blog se encuentra en聽github.com/arun-gupta/dcos-java-database.

Muchas gracias a @unterstein por crear el plugin de Maven y ayudarme a entender el funcionamiento interno de DC/OS.

Configuraci贸n del cl煤ster DC/OS

El cl煤ster DC/OS puede crearse f谩cilmente mediante la aplicaci贸n Plantilla de CloudFormation. Las instrucciones detalladas, incluidos los requisitos del sistema y las capturas de pantalla y la configuraci贸n, est谩n disponibles en Instalar DC/OS en AWS.

La salida de CloudFormation se ve como se muestra:

DC/OS Cluster CloudFormation Output

Anote el valor indicado para las teclas Direcci贸nDns y PublicSlaveDnsAddress. El valor de la primera clave se puede utilizar para acceder a DC/OS GUI y tiene el siguiente aspecto:

DC/OS Cluster Console Default Output

Configure DC/OS CLI como se explica en CLI. En resumen, se utilizan los siguientes comandos:

  • dcos config set core.dcos_url https://${DnsAddress} Sustituir ${DnsAddress} con el valor correspondiente de la salida de CloudFormation.
  • dcos auth login
  • dcos config show core.dcos_acs_token. Si a煤n no lo ha hecho, clone el repositorio desde聽github.com/arun-gupta/dcos-java-database. Crear un nuevo archivo.dcos-token聽y copiar la salida del comando en este archivo.
  • dcos package install marathon-lb

Definici贸n de la aplicaci贸n Marathon

Marathon framework se utiliza para programar contenedores en DC/OS. Se puede definir una aplicaci贸n de marat贸n proporcionando una definici贸n de aplicaci贸n.

Como se mencion贸 anteriormente, este blog mostrar谩 c贸mo una simple aplicaci贸n Java puede hablar con una base de datos. Usaremos una aplicaci贸n Java EE desplegada en WildFly y usaremos Couchbase como base de datos. La definici贸n de la aplicaci贸n tiene el siguiente aspecto:

驴Cu谩les son los puntos clave en la definici贸n de esta aplicaci贸n?

  • La aplicaci贸n tiene dos contenedores: base de datos y web. El contenedor web depende del contenedor de base de datos definido mediante dependencias atributo.
  • base de datos usos del contenedor arungupta/couchbase:viaje聽Imagen Docker. Esta imagen se crea a partir de聽github.com/arun-gupta/couchbase-javaee/tree/master/couchbase. Utiliza la imagen base de Couchbase y utiliza聽API REST de Couchbase para preconfigurar la base de datos. Tambi茅n se carga un cubo de muestra en la base de datos.
  • web usos del contenedor arungupta/wildfly-couchbase-javaee:travel imagen. Esta imagen se crea a partir de github.com/arun-gupta/couchbase-javaee/blob/master/Dockerfile. Se trata de una aplicaci贸n Java EE 7 integrada en WildFly. La aplicaci贸n utiliza COUCHBASE_URI como variable de entorno para conectarse a la base de datos Couchbase. El valor de esta variable de entorno se configura para utilizar el descubrimiento de servicios DNS y se obtiene como se explica en Redes virtuales.

Aseg煤rese de cambiar el valor de HAPROXY_0_VHOST para que coincida con el valor de ${PublicSlaveDnsAddress} de la salida de CloudFormation. La etiqueta HAPROXY_0_VHOST indica a Marathon-LB que exponga el contenedor Docker, el servidor de aplicaciones WildFly en nuestro caso, en el equilibrador de carga externo con un host virtual. La direcci贸n 0 en la clave de la etiqueta corresponde al 铆ndice servicePort, comenzando por 0. Si tuvieras m煤ltiples definiciones servicePort, las iterar铆as como 0, 1, 2, y as铆 sucesivamente. Desplegar una aplicaci贸n con equilibrio de carga interno y externo con marathon-lb proporciona m谩s detalles sobre c贸mo configurar marathon-lb.

Descubrimiento de servicios y equilibrio de carga proporcionan m谩s detalles sobre el descubrimiento de servicios y el equilibrio de carga en DC/OS.

Despliegue de la aplicaci贸n con Maven

La aplicaci贸n puede desplegarse utilizando聽dcos-maven-plugin.

Plugin parece:

Los puntos principales de este fragmento son:

  • La versi贸n del plugin es 0.2. Esto indica que el plugin a煤n se encuentra en las primeras fases de desarrollo.
  • dcosUrl es el valor de ${DnsAddress} de la salida de CloudFormation. Esta direcci贸n se utiliza para el despliegue de la aplicaci贸n.
  • <deployable> permite diferentes tipos de despliegue - aplicaci贸n, grupo o pods. Este elemento es una sugerencia para el plugin y es probable que desaparezca en una versi贸n futura a medida que se consolide la API de Marathon. Siga #11 para m谩s detalles.

Encontrar谩 m谩s detalles y la configuraci贸n del complemento en dcos-maven-plugin.

Despliegue la aplicaci贸n:

Se muestra la siguiente salida:

Estos son algunos de los resultados actualizados de la consola DC/OS.

Primera actualizaci贸n de la pesta帽a Servicios:
DC/OS Cluster Web Application

Dos aplicaciones en el servicio:
DC/OS Cluster Web Application

La aplicaci贸n de base de datos tiene una tarea:
DC/OS Cluster Web Application

Estado de la tarea de base de datos:Database Service Discovery

Registros de la tarea de base de datos:
DC/OS Cluster Web Application

Muestra la salida de la API REST de Couchbase para configurar el servidor.

Estado de la tarea web:
DC/OS Cluster Web Application

Registros de la tarea web:
DC/OS Cluster WildFly Output

Muestra que la aplicaci贸n Java EE se ha desplegado correctamente.

Accede a la aplicaci贸n:

La direcci贸n es el valor de la clave聽${PublicSlaveDnsAddress} de la salida de CloudFormation. Una salida formateada, por ejemplo con jq...parece:

隆Eso es!

Como ya se ha mencionado, el c贸digo fuente completo utilizado en este blog se encuentra en github.com/arun-gupta/dcos-java-database.

Este blog mostr贸 c贸mo una aplicaci贸n Java simple puede hablar con una base de datos utilizando el descubrimiento de servicios en DC/OS.

Para m谩s informaci贸n, consulte:

 

Comparte este art铆culo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Arun Gupta

Arun Gupta es vicepresidente de promoci贸n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m谩s de 10 a帽os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa帽as de marketing y programas. Anteriormente dirigi贸 equipos de ingenier铆a en Sun y es miembro fundador del equipo Java EE. Gupta es autor de m谩s de 2.000 entradas de blog sobre tecnolog铆a. Tiene una amplia experiencia como conferenciante en m谩s de 40 pa铆ses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a帽os consecutivos. Gupta tambi茅n fund贸 el cap铆tulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci贸n tecnol贸gica entre los ni帽os. Autor de varios libros sobre tecnolog铆a, 谩vido corredor, trotamundos, campe贸n de Java, l铆der de JUG, miembro del Dream Team de NetBeans y capit谩n de Docker, es f谩cilmente accesible en @arungupta.

4 Comentarios

  1. [...] Service Discovery with Java and Database application in DC/OS explica por qu茅 el descubrimiento de servicios es un aspecto importante para una aplicaci贸n multicontenedor. En ese blog tambi茅n se explica c贸mo se puede hacer para DC/OS. [...]

  2. [...] Service Discovery with Java and Database application in DC/OS explica por qu茅 el descubrimiento de servicios es un aspecto importante para una aplicaci贸n multicontenedor. En ese blog tambi茅n se explica c贸mo se puede hacer para DC/OS. [...]

  3. Hola Arun.

    Me preguntaba por qu茅 no podemos utilizar un equilibrador de carga como haproxy para hacer el registro del servicio. Publica un nombre de servicio l贸gico que reenviar铆a la petici贸n a uno de los servicios disponibles en cs/os. 驴Por qu茅 tanto alboroto con el registro de servicios? Es din谩mico, escalable y tecnol贸gicamente transparente.

    Saludos cordiales, Alexander

Deja un comentario

驴Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma m谩s f谩cil y r谩pida de empezar.

P贸ngase en contacto

驴Quieres saber m谩s sobre las ofertas de Couchbase? Perm铆tanos ayudarle.