Una imagen para entender el diseño de la arquitectura de microservicios

prefacio

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 han utilizado durante varios años. Como resultado, no hay una comprensión general de la arquitectura de microservicios. ¡Un programador que solo sabe cómo mover ladrillos no es un buen programador!

 Entrada de tráfico Nginx

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

puerta

La puerta de enlace es otro componente central detrás de Nginx. Lleva a cabo una serie de funciones, como la autenticación de solicitudes, el reenvío de rutas, la conversión de protocolos y la supervisión del tráfico. La puerta de enlace de la figura anterior utiliza Spring Cloud Gateway para realizar la función de la puerta de enlace comercial. En la selección de la puerta de enlace, tenemos otras opciones, como Zuul1, Zuul2, Kong, etc., estas soluciones tienen sus propias ventajas y limitaciones, podemos elegir cual elegir según sus características. Para una comprensión más profunda de la puerta de enlace, puede consultar la serie anterior de artículos sobre la puerta de enlace , por lo que no entraré en detalles aquí.

En la figura anterior, hay jwt y OAuth2 bajo Spring Cloud Gateway. De hecho, estos dos son autenticación y autenticación basadas en token. En proyectos de Internet generales, el módulo de inicio de sesión es compatible con WeChat o qq login, que es el inicio de sesión autorizado mediante OAuth2. . Si desea obtener más información sobre los detalles de Oauth2, puede consultar la serie de artículos, como el ejemplo anterior del servidor de cliente de Oauth2.0 .

componente comercial

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 el servicio de cuenta, el servicio de pedidos, el servicio de facturas, el servicio de caja, etc., comunes en las plataformas de comercio electrónico. . Feign se utiliza para realizar llamadas http entre los componentes del servicio, y Feign integra Ribbon para lograr el equilibrio de carga del lado del cliente. La división de dominio de servicio específico y la configuración del contexto de límite de servicio son conocimientos adicionales. Si desea hacer un buen trabajo de división de servicio, puede obtener más información sobre el diseño basado en dominio de DDD.

Registro de servicios

Independientemente de si se trata de una SOA basada en Dubbo o una arquitectura de microservicios 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 una invocación dinámica de servicios. Los comunes que pueden realizar la función del centro de registro son Zookeeper, Eureka, Nacos y Zookeeper se usa ampliamente en Dubbo. En la actualidad, la arquitectura de microservicios de servicios de la empresa se basa en Eureka, y Eureka no parece mantenerse en la actualidad. Generalmente, se recomiendan nuevas plataformas para integrar directamente Nacos.Además de usarse como un centro de registro, Nacos también se puede usar como un centro de configuración distribuida, que es mejor que Sping Cloud Config.

Almacenamiento en caché y bloqueos distribuidos

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

Para garantizar la alta disponibilidad de Redis, se puede usar la implementación centinela en lugar de tres nodos Redis, uno 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. 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 el almacenamiento distribuido. Para obtener información detallada sobre Redis Sentinel, consulte la serie anterior de artículos, como Explicación detallada de los principios de arquitectura de Redis Sentinel (1) .

capa de persistencia de datos

Independientemente de un solo servicio o microservicio, la capa de persistencia de datos es necesaria. Elegimos mysql, que a menudo se usa en proyectos de Internet, como base de datos. Para garantizar la eficiencia de lectura y escritura y la alta disponibilidad del servicio, separamos el maestro -modo esclavo y realiza 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 alcance el cuello de botella de rendimiento, necesitamos usar una subbase de datos y una subtabla para dividir la tabla de la base de datos horizontal y verticalmente. estrechamente relacionado con el diseño de estructura de tabla existente del proyecto. Se debe considerar la escalabilidad posterior. No se puede desmantelar por un corto período de tiempo. El servidor dividido se implementa. Por supuesto, la magnitud de los datos en las empresas en general no puede alcanzar esa magnitud.

almacenamiento de datos estructurados

Los datos de almacenamiento mysql mencionados anteriormente son todos almacenamiento de datos no estructurados. Nuestros proyectos a menudo necesitan almacenar algunos datos estructurados, como el almacenamiento de cadenas JSON. Obviamente, es inapropiado almacenarlo a través de mysql en este escenario.

Generalmente, usaremos Elasticsearch o MangoDB para el almacenamiento.Si necesita una función de recuperación en su negocio, se recomienda más usar Elasticsearch. Elasticsearch es compatible con DSL, tiene funciones de consulta y recuperación relativamente ricas e incluso puede realizar funciones de recuperación espacial GIS.

middleware de mensajes

Como se mencionó anteriormente, en la arquitectura de microservicios, las llamadas síncronas entre servicios se realizan a través de Fingir, y el desacoplamiento asíncrono entre servicios debe realizarse a través de MQ. Aunque podemos implementar llamadas asincrónicas a través de varios subprocesos, este tipo de llamadas asincrónicas no admite la persistencia y puede provocar la pérdida de mensajes, por lo que RabbitMq o RocketMq generalmente están integrados.

colección de registros

En la arquitectura de microservicios, a través de un componente, por ejemplo, el servicio de pedidos se despliega 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 iniciar 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.

  • Logstash se usa para la recopilación de registros. Por lo general, se agrega un Filebeat delante 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 tiene funciones de visualización de datos y recuperación de consultas. Podemos consultar rápidamente la información de registro deseada mediante la búsqueda de palabras clave.

centro de programación de tareas

Las funciones de temporización se usan a menudo en proyectos. En aplicaciones individuales, podemos usar el programa que viene con sping, o usar Quartz. En aplicaciones distribuidas, necesitamos integrar temporizadores distribuidos, como Quartz (Quartz coopera con tablas de bases de datos. También admite tareas de temporización), así como Elastic-Job, XXL-JOB, etc.

Elastic-job Dangdang es un sistema de programación de tareas distribuidas elásticas basado en el desarrollo secundario de cuarzo. Tiene funciones ricas y poderosas. Utiliza zookeeper para realizar 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. Consta de dos subproyectos independientes, Elastic-Job-Lite y Elastic-Job-Cloud. El uso de Elastic-Job puede realizar rápidamente la programación de tareas distribuidas. .

XXL-JOB es una plataforma de programación de tareas distribuidas (XXL son las iniciales del nombre del autor Xu Xueli en pinyin), y sus principales objetivos de diseño son el desarrollo rápido, el aprendizaje fácil, el peso ligero y la expansión fácil. El comportamiento de despacho se abstrae en una plataforma pública de "centro de despacho", y la plataforma en sí misma no asume la lógica comercial, y el "centro de despacho" es responsable de iniciar las solicitudes de despacho. Las tareas se abstraen en JobHandlers dispersos, que son administrados por el "ejecutor", y el "ejecutor" es responsable de recibir solicitudes de programación y ejecutar la lógica comercial 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 general del sistema.

almacenamiento de objetos distribuidos

Los proyectos a menudo tienen funciones de carga de archivos, como imágenes, audio y video. En una arquitectura distribuida, obviamente es imposible para nosotros almacenar archivos en servidores de nodos, en este momento, necesitamos introducir el almacenamiento de archivos distribuidos. Las soluciones comunes incluyen MinIo, Ali's OSS (pago), Ali FastDFS, etc.
MinIO es un sistema de almacenamiento de objetos distribuidos de alto rendimiento desarrollado en base al lenguaje Go. El cliente es compatible con los lenguajes Java, Net, Python, Javascript, Golang.

FastDFS es un sistema de archivos distribuido liviano de código abierto. Administra archivos. Sus funciones incluyen: almacenamiento de archivos, sincronización de archivos, acceso a archivos (carga de archivos, descarga de archivos), etc., 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 videos, etc.

Supongo que te gusta

Origin blog.csdn.net/qq_28165595/article/details/128169770
Recomendado
Clasificación