[Microservicio] Una imagen para comprender el diseño de la arquitectura de microservicios.

1. Introducción

En la actualidad, la arquitectura de microservicios se ha implementado en muchas empresas. El siguiente diagrama resume brevemente los componentes comúnmente utilizados en el diseño de la arquitectura de microservicios. No se puede decir que los microservicios se hayan utilizado durante varios años. Como resultado, no existe una comprensión general de la arquitectura de los microservicios. ¡Un programador que solo sabe mover ladrillos no es un buen codificador!

inserte la descripción de la imagen aquí

2. Entrada de tráfico Nginx

Como se puede ver en la figura anterior, Nginx, como entrada de tráfico de toda la arquitectura, puede entenderse como una puerta de enlace externa, que realiza funciones como enrutamiento y reenvío de solicitudes , equilibrio de carga y separación dinámica y estática . Como punto de entrada principal, Nginx debe adoptar una implementación de múltiples nodos y, al mismo tiempo, keepalivedlograr una alta disponibilidad para garantizar la alta disponibilidad de toda la plataforma.

3. Puerta de enlace

Gateway es otro componente central detrás de Nginx. Realiza una serie de funciones como autenticación de solicitudes , reenvío de enrutamiento , conversión de protocolos y monitoreo de tráfico . La puerta de enlace en la figura anterior utiliza Spring Cloud Gateway para realizar la función de puerta de enlace empresarial. En la selección de puerta de enlace, tenemos otras opciones, como Zuul1, Zuul2, Kong, etc., estas soluciones tienen sus propias ventajas y limitaciones, podemos elegir cuál elegir según sus características.

En la figura anterior, hay JWT y OAuth2 en Spring Cloud Gateway. De hecho, estos dos son autenticación y autenticación basadas en tokens. En proyectos generales de Internet, el módulo de inicio de sesión admite el inicio de sesión WeChat o QQ, que es el inicio de sesión autorizado utilizando OAuth2.

4. Componentes comerciales

Como se puede ver en el diagrama de arquitectura anterior, después de la puerta de enlace está nuestro componente comercial, que puede entenderse como el microservicio después de la división, como servicio de cuenta , servicio de pedidos , servicio de factura , servicio de cajero , etc. , comunes en las plataformas de comercio electrónico. . Los componentes del servicio se llaman a través de Feign httpy Feign integra Ribbon para lograr el equilibrio de carga del lado del cliente. La división específica del dominio de servicio y la configuración del contexto del límite del servicio son conocimientos adicionales. Si desea hacer un buen trabajo en la división de servicios, puede obtener más información sobre el diseño basado en dominios DDD.

5. Centro de registro de servicios

Ya sea una SOA basada en Dubbo o una arquitectura de microservicio basada en la división de Spring Cloud, es necesario un registro de servicios, registramos todos los componentes del servicio en el registro para realizar la invocación dinámica de servicios. Los más comunes que pueden implementar la función del centro de registro son Zookeeper, Eureka y Nacos. Zookeeper se usa ampliamente en Dubbo. En la actualidad, la arquitectura de microservicios de servicios de la compañía se basa en Eureka, y Eureka no parece mantenerse en la actualidad. Generalmente, se recomienda que las nuevas plataformas integren directamente Nacos. Nacos se puede utilizar no solo como un centro de registro, sino también como un centro de configuración distribuido, que es mejor que Sping Cloud Config.

6. Caché y bloqueo distribuido

En la esquina inferior izquierda de la figura, podemos ver el componente Redis. Podemos usar Redis como caché y almacenar en caché algunos datos importantes con consultas lentas y alta tasa de uso, lo que puede mejorar rápidamente el tiempo de respuesta de la interfaz. Al mismo tiempo, uno de los principales escenarios de uso de Redis en microservicios son los bloqueos distribuidos. Los bloqueos tradicionales sincronizados y de visualización obviamente no pueden resolver el problema de la concurrencia distribuida.

Para garantizar la alta disponibilidad de Redis, se puede utilizar la implementación centinela en lugar de tres nodos Redis, un maestro y dos esclavos, y se implementan tres nodos centinela al mismo tiempo para lograr la conmutación por error y evitar problemas de punto único. La cantidad de datos almacenados en Redis es grande, alcanzando Para eliminar el cuello de botella de rendimiento de Redis de un solo nodo, también podemos usar el modo de clúster de Redis para implementar almacenamiento distribuido.

7. Capa de persistencia de datos

Independientemente de un solo servicio o microservicio, la capa de persistencia de datos es necesaria. Elegimos MySQL, que se usa a menudo en proyectos de Internet, como base de datos. Para garantizar la eficiencia de los servicios de lectura y escritura y la alta disponibilidad, utilizamos el master- modo de separación de esclavos y realice la separación de lectura y escritura al mismo tiempo , para garantizar el rendimiento de lectura y escritura de MySQL.

Con el crecimiento del volumen de negocios, después de que el volumen de datos de una sola tabla alcanza el cuello de botella de rendimiento, necesitamos usar subbases de datos y subtablas para dividir la tabla de la base de datos horizontal y verticalmente. Cómo dividir razonablemente y seleccionar tecnología, estos son Estrechamente relacionado con el diseño de la estructura de tabla existente del proyecto. Se debe considerar la escalabilidad posterior. No se puede desmantelar por un corto período de tiempo. Se implementa el servidor dividido. Por supuesto, la magnitud de los datos en las empresas en general no puede alcanzar esa magnitud.

8. Almacenamiento de datos estructurados

MySQL es mejor para almacenar datos relacionales. Hay escenarios en los que es necesario almacenar datos estructurados en el proyecto, como almacenar cadenas JSON. Obviamente, usar MySQL para almacenar tales escenarios es inapropiado. Generalmente, usaremos Elasticsearch o MongoDB para el almacenamiento. Si el negocio requiere una función de recuperación, se recomienda Elasticsearch. Elasticsearch admite DSL, tiene funciones de consulta y recuperación relativamente ricas e incluso puede realizar funciones de recuperación espacial SIG.

9. Middleware de mensajes

Como se mencionó anteriormente, en la arquitectura de microservicios, las llamadas sincrónicas entre servicios se realizan a través de Feign, y el desacoplamiento asincrónico entre servicios debe realizarse a través de MQ. Aunque podemos implementar llamadas asincrónicas a través de múltiples subprocesos, dichas llamadas asincrónicas no admiten la persistencia y pueden provocar la pérdida de mensajes, por lo que RabbitMQ o RocketMQ generalmente están integrados.

10. Colección de registros

En la arquitectura de microservicio, a través de un componente, por ejemplo, el servicio de pedidos se implementa de manera distribuida en varios nodos y los registros de cada nodo se almacenan localmente en el nodo. Si queremos consultar los registros, ¿tenemos que hacerlo? ¿Inicie sesión en cada nodo para encontrar la información de registro correspondiente? Este tipo de registro de visualización definitivamente no es aceptable. Por lo tanto, ELK generalmente se introduce para la recopilación de registros y la consulta de visualización visual.

  • Logstash se utiliza para la recopilación de registros. Por lo general, se agrega un Filebeat antes de Logstash. Filebeat recopila registros y Logstash realiza la conversión de datos.
  • Elasticsearch almacena datos y genera datos de índice para que Kibana los recupere fácilmente.
  • Kibana realiza funciones de visualización de datos y recuperación de consultas. Podemos consultar rápidamente la información de registro deseada buscando palabras clave.

11. Centro de programación de tareas

La función de temporización se usa a menudo en proyectos. En aplicaciones individuales, podemos usar el programa que viene con Spring o usar Quartz. En aplicaciones distribuidas, necesitamos integrar temporizadores distribuidos, como Quartz (Quartz coopera con tabla de base de datos (también admite tareas de sincronización distribuida), así como Elastic-Job, XXL-JOB, etc.

  • Elastic-Job es un sistema elástico de programación de tareas distribuidas basado en Quartz desarrollado por Dangdang.com, tiene funciones ricas y poderosas y utiliza Zookeeper para lograr coordinación distribuida, alta disponibilidad y fragmentación de tareas. Elastic-Job es una solución de programación distribuida, de código abierto de Dangdang.com, que consta de dos subproyectos independientesElastic-Job-LiteyElastic-Job-Cloud. El uso de Elastic-Job puede realizar rápidamente la programación de tareas distribuidas.

  • XXL-JOB es una plataforma distribuida de programación de tareas (XXL son las iniciales del nombre del autor Xu Xueli en pinyin), y sus objetivos principales de diseño son un desarrollo rápido, un aprendizaje fácil, un peso ligero y una fácil expansión. El comportamiento de envío se abstrae en una plataforma pública de "centro de despacho", y la plataforma en sí no adopta la lógica empresarial, y el "centro de despacho" es responsable de iniciar las solicitudes de envío. Las tareas se resumen en JobHandlers dispersos, que son administrados por el "ejecutor", que es responsable de recibir solicitudes de programación y ejecutar la lógica empresarial en el JobHandler correspondiente. Por lo tanto, las dos partes de "programación" y "tarea" se pueden desacoplar entre sí para mejorar la estabilidad y escalabilidad generales del sistema.

12. Almacenamiento de objetos distribuidos

Los proyectos suelen tener funciones de carga de archivos, como imágenes, audio y vídeo. En una arquitectura distribuida, obviamente es imposible para nosotros almacenar archivos en servidores de nodo, en este momento necesitamos introducir el almacenamiento de archivos distribuido. Las soluciones comunes incluyen MinIO, OSS de Ali (pago), Ali FastDFS, etc.

  • MinIO es un sistema de almacenamiento de objetos distribuidos de alto rendimiento. El cliente admite los lenguajes Java, Net, Python, Javacript y Golang.

  • FastDFS es un sistema de archivos distribuido liviano de código abierto, que administra archivos, sus funciones incluyen: almacenamiento de archivos, sincronización de archivos, acceso a archivos (carga de archivos, descarga de archivos), etc., lo que resuelve el problema del almacenamiento y almacenamiento de gran capacidad. Es especialmente adecuado para servicios en línea con archivos como soporte , como sitios web de álbumes de fotos, sitios web de vídeos, etc.

Supongo que te gusta

Origin blog.csdn.net/be_racle/article/details/132639028
Recomendado
Clasificación