Práctica de arquitectura de microservicios: ¿es suficiente que solo conozca Docker y Spring Boot?
Antecedentes
A medida que la empresa ha ido creciendo durante más de un año, hemos desarrollado docenas de proyectos, incluidos JAVA y PHP en segundo plano, para mejorar mejor el desarrollo y la gestión. Eficiencia, varios expertos técnicos y jóvenes a menudo participan en PK feroz, y muchas chispas de amor han chocado, como una de ellas: práctica de microservicios
Diseño
Solo necesito Hay un El conjunto de microservicios BASE genera instancias de microservicios del sistema empresarial para llamadas de varios sistemas empresariales. El sistema empresarial no llama directamente a BASE, solo puede llamar a la INSTANCIA del microservicio.
Este es un problema de operación y mantenimiento. Deje que la operación y el mantenimiento lo resuelvan. No es difícil utilizar herramientas para la operación y el mantenimiento. De todos modos, todos los scripts se ejecutan y no se requiere operación manual.
Dado que un solo punto de falla afecta la situación general, hemos elegido la estabilidad como más importante. Además, para SaaS, para hacer frente a diferentes industrias, habrá sospechas de privatización excesiva; es más fácil.
Lógica de llamada
Concepto de diseño
No modular, sin mencionar los microservicios, como nuestros microservicios de usuario, microservicios de productos y microservicios de direcciones anteriores, etc. todos deben modularizarse primero para implementar mejor el desarrollo, es posible que deba modularizar y microservicio al mismo tiempo. Al modularizar, debe prestar atención al hecho de que no puede haber consultas relacionadas y el paquete debe ser completamente independiente. Luego se puede desmantelar el microservicio.
El acoplamiento flojo significa que nuestros módulos no dependen directamente entre sí, no tienen estado y pueden proporcionar servicios al mundo exterior de forma independiente.
Una fuerte cohesión significa que, aunque tenemos que dividirnos; en Pequeños microservicios, pero también debemos considerar la fuerte correlación de ciertas funciones. Por ejemplo, un taburete se compone de cuatro patas y un tablero. No podemos vender las cuatro patas y el tablero por separado, lo cual no tiene sentido.
Desarrollo
spring-boot: Más simple que springmvc, springmvc tiene una gran cantidad de archivos de configuración, como spring-servlet, spring-mybatis, spring.xml y web.xml. Estos no son necesarios en Spring-boot, solo se necesita la potente función de anotación. Boot es más adecuado para microservicios.
spring-cloud: contiene muchos componentes para admitir microservicios, como el centro de configuración unificada spring cloud config, que se utiliza para configurar archivos de configuración para múltiples entornos. Ya no es necesario configurar múltiples microservicios. Me preocupo por la gestión de archivos de configuración de los entornos de desarrollo, prueba y producción; Spring Cloud eureka se utiliza para el registro y descubrimiento de servicios, que se presentan por separado a continuación para ver otros componentes. No se presentará uno por uno aquí. En resumen, si es la plataforma JAVA, intente utilizar el contenido del sistema Spring tanto como sea posible.
Usamos mysql porque tenemos muchas aplicaciones, pero la cantidad de datos en una sola tabla no es grande, no más de un millón. También hemos experimentado con mongodb, y el desarrollo es muy rápido y muy. flexible, pero debido a que no lo es, las bases de datos relacionales tienen mayores costos de mantenimiento.
RESTFUL: Los recursos y el funcionamiento de la URL están desacoplados, lo que hace que la URL sea más semántica y también es muy fácil de administrar. Hay muchos artículos en Internet que explican esto en detalle. No es particularmente fácil de entender. Después de comprender y practicar en el proyecto, habrá una sensación de contradicción, no lo presentaré en detalle aquí.
Swagger de documentos de interfaz: en comparación con los documentos de interfaz escritos a mano tradicionales, swagger tiene un formato de salida unificado, sin importar cuántas personas lo escriban; Se ha modificado antes. Aún debe abrir la wiki para modificar manualmente el documento de la interfaz. Ahora solo necesita modificar el código. Los programadores están más dispuestos a modificarlo y el costo es menor. grita todos los días, ¿por qué tu interfaz ha cambiado nuevamente? Nuevo ¿Qué significa el campo agregado?
RocketMQ: He estado luchando con Kafka y rocketMQ, y finalmente elegí RocketMQ
Por razones de rendimiento, intente utilizar programación asincrónica. Por ejemplo, si se registra para obtener un cupón. puede dárselo al usuario si el registro es exitoso. Devuelve que el registro fue exitoso, pero el envío de cupones se puede llamar de forma asincrónica sin bloquear el hilo de registro.
En el marco de microservicios, los registros no se pueden distribuir en varios nodos de servicio y debe haber un centro de registros unificado. ELK es una plataforma de análisis de registros en tiempo real, que recopila los registros de cada servicio en el centro de registros y luego busca según el sistema, nodo, etc. Además de las condiciones de búsqueda anteriores, también implementamos cada microservicio según el ID de empresa (generado por una solicitud) Una ID de empresa) y registros de búsqueda de ID de usuario para facilitar el seguimiento y la localización de problemas.
Por supuesto, puede haber configuraciones de desconf o Spring Cloud más ligeras y fáciles de usar, pero tenemos aplicaciones desarrolladas en PHP y ninguna de las anteriores es compatible. Si se trata de todas aplicaciones JAVA, sigue siendo muy bueno usar desconf.
Pruebas
Cada programador tiene esta experiencia. Justo después de conectarse, los clientes informaron errores. Resultó que cuando modificamos el código de una determinada función, provocó que otras funciones. error, me siento inseguro cada vez que me conecto; esto refleja la necesidad de probar la interfaz, especialmente cuando se actualiza la versión, es necesario ejecutarla nuevamente para evitar que la modificación de una interfaz provoque que otras interfaces informen errores. Más confiable que las pruebas manuales.
Implementación
Docker se ha convertido en un nombre familiar. Este es otro cambio importante después de que las máquinas virtuales coloquen todos los microservicios individuales en Docker, para que pueda usarlos en cualquier momento y en cualquier lugar. Si quieres desplegarlo, simplemente tíralo y estará bien. Explotará rápidamente.
El equilibrio de carga se puede lograr con unos pocos comandos simples y también se puede actualizar sin problemas. Cuando se actualiza la versión, no es necesario informar a los clientes: notificación del sistema, 00:00-08: 00 en un día y una noche determinados. Nuestro banco está en proceso de actualización y mantenimiento del sistema. No retire dinero porque es posible que no pueda retirarlo, jaja.
Actualización
Utilizamos la herramienta Flyway para realizar el control de versiones en los scripts de bases de datos.
Actualización de la versión tradicional,
1. Desarrolle e impulse el código y registre qué archivos envió
2. El director del proyecto revisa los archivos según svn; y Empaquetarlo en un paquete war;
3. Envíelo al entorno de prueba para que lo pruebe la empresa de pruebas
4. El archivo se modifica a mitad de camino y es posible que sea necesario volver a empaquetarlo; ;
… .
No puedo seguir escribiendo. El director del proyecto es como un superhombre.
Hoy en día, es muy sencillo utilizar la integración continua (CI). La herramienta que utilizamos es Jenkins. Después de insertar el código, estará en línea con unos pocos clics. o un entorno de producción, es muy simple. De lo contrario, los ojos del director del proyecto se pusieron verdes cuando revisó los documentos.
Final
Este artículo presenta principalmente la selección del desarrollo de microservicios, no profundizaré en los detalles. Si está interesado, puede conocer cada componente. Por supuesto, nuestra selección no es necesariamente correcta y las aplicaciones en diferentes escenarios pueden ser completamente diferentes. Este artículo es solo de referencia.