Traducción y adaptación de microservicios Java: una guía práctica . Enlace a la primera parte de la guía . Cualquier programa Java del lado del servidor y, por tanto, cualquier microservicio, es simplemente un archivo con extensión .jar o .war. Hay una gran cosa acerca del ecosistema Java, o más bien de la JVM: sólo necesitas escribir código Java una vez y puede ejecutarse en casi cualquier sistema operativo, siempre y cuando no hayas compilado tu código con una versión de Java más nueva que tu versión de JVM de destino. Es importante comprender esto, especialmente cuando se trata de temas como Docker, Kubernetes o (¡redoble de tambores!) La nube. ¿Por qué? Veamos diferentes escenarios de implementación.
Ejemplo minimalista de implementación de microservicio Java
Sigamos con el ejemplo del banco. Entonces tenemos un archivo monobank.jar (monolito) y nuestro Riskengine.jar recién extraído (el primer microservicio de verificación de riesgos). Supongamos también que ambas aplicaciones, como cualquier otra aplicación del mundo, necesitan un archivo .properties. En nuestro caso, solo contendrá la URL de la base de datos y las credenciales. Una implementación mínima podría consistir en dos directorios similares a este: Primero:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Segundo:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Esto deja abierta la pregunta: ¿cómo llegarán los archivos .properties y .jar al servidor? Desafortunadamente, puede haber muchas respuestas.
Cómo utilizar herramientas de compilación, SSH y Ansible para implementar microservicios Java
Consejos aburridos, pero no menos excelentes, sobre cómo implementar microservicios Java... En realidad, exactamente de la misma manera que los administradores de sistemas han implementado cualquier programa de servidor Java en las empresas durante los últimos 20 años. Esta es la mezcla:- tu herramienta de construcción favorita (Maven, Gradle)
- buen SSH/SCP antiguo para copiar .jars a servidores
- Scripts Bash para administrar servidores y scripts de implementación
- o incluso mejor: algunos scripts de Ansible.
Cómo utilizar Docker para implementar microservicios Java
Volvamos a la dulce agonía de la elección. Hace un par de años Docker entró en escena, y con él la contenedorización. Si nunca ha trabajado con él, aquí hay una breve descripción dirigida a usuarios finales y desarrolladores:- Un contenedor (simplificado) es similar a la vieja máquina virtual, pero "más ligero". Si no tiene claro qué significa "más fácil" en este contexto, consulte esta respuesta en Stackoverflow .
- El contenedor garantiza su propia portabilidad. Es decir, funciona en cualquier lugar. Suena familiar, ¿no?
- empaquete su archivo jar en una imagen de Docker
- envíe esta imagen a un registro Docker privado
- extraiga y ejecute esta imagen en su plataforma de destino
- o copie la imagen de Docker directamente a su sistema de producción y ejecútela.
Cómo utilizar Docker Swarm o Kubernetes para implementar microservicios Java
Supongamos que decide probar Docker. Cada vez que implementas un microservicio Java, creas una imagen de Docker que agrupa tu archivo .jar. Supongamos que tiene un par de estos microservicios Java y desea implementarlos en varias máquinas (en un clúster). Surge la pregunta: ¿cómo gestionar este cluster? ¿Ejecutar contenedores Docker, verificar el rendimiento, implementar actualizaciones, escalar el sistema (brrr)? Dos posibles respuestas a esta pregunta son Docker Swarm y Kubernetes. Entrar en detalles sobre ambas opciones haría que este ya extenso tutorial fuera demasiado largo, pero creemos que es importante mencionar que, en última instancia, ambas opciones dependen de que usted escriba archivos YAML (consulte las historias de sangría de Yaml ) para administrar su clúster. Si quieres saber qué sentimientos evoca esto en la práctica, simplemente escribe una consulta similar en la búsqueda de Twitter. Entonces, el proceso de implementación para sus microservicios Java ahora se ve así:- Configuración y gestión de Docker Swarm/Kubernetes
- Todos los pasos para Docker (ver arriba)
- Escribe y ejecuta YAML
hasta que te sangren los ojoshasta que todo funcione.
Cómo probar microservicios Java
Supongamos que decide implementar microservicios en producción. ¿Cómo podemos probar la integración de n-microservicios durante el desarrollo ahora? ¿Cómo puedes ver si todo el flujo de trabajo está funcionando y no solo partes de él? En la práctica, puedes utilizar uno de estos tres métodos:- Con un poco de trabajo (si usa marcos como Spring Boot), puede combinar todos sus microservicios en una clase de lanzamiento y cargar todos los microservicios usando una única clase Wrapper.java, dependiendo de si tiene suficiente memoria en su máquina para Ejecútalos todos tus microservicios.
- Puede copiar la configuración de Docker Swarm o Kubernetes localmente.
- Simplemente ya no ejecute pruebas de integración localmente. En su lugar, implemente un entorno DEV/TEST dedicado. Esto es algo que muchos equipos hacen cuando sucumben al dolor de las configuraciones de microservicios locales.
GO TO FULL VERSION