Compartir tecnología

Nube de primavera

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. ¿Qué son los microservicios?

1. Conceptos básicos

Los microservicios son unestilo arquitectónico(A diferencia de la arquitectura monolítica, la arquitectura vertical, la arquitectura distribuida y la arquitectura SOA), las aplicaciones se dividen en servicios más pequeños impulsados ​​por procesos.

2. Características de los microservicios

  1. Ligero: divida sistemas o servicios complejos verticalmente y cada microservicio se centre en resolver problemas especiales.
  2. Bajo acoplamiento: cada servicio dividido es independiente entre sí en términos de código, recursos y entorno, y puede desarrollarse, probarse, implementarse y mantenerse de forma independiente, lo que es beneficioso para la estabilidad del sistema (el impacto se reduce cuando surgen problemas). ocurrir) y la evaluación de recursos de expansión (expansión de recursos) es más conveniente y menos riesgosa).
  3. Multiplataforma: diferentes microservicios pueden utilizar diferentes lenguajes de desarrollo y ejecutarse en diferentes entornos.

2. ¿Qué es SpringCloud?

1. Conceptos básicos:

Nube de primavera es unMarco de microservicios , que proporciona una gama de soluciones de sistemas distribuidos. Proporciona capacidades tales como desarrollo e implementación de microservicios, registro y descubrimiento de servicios, gobernanza de servicios y operación y mantenimiento de servicios a través de la componenteización.

2. Componentes de uso común:

1)Nube de primavera en Netflix:

Eureka: centro de registro

Cinta: equilibrio de carga

Fingir: llamada remota

Hystrix: disyuntor de servicio

Zuul/Puerta de entrada:Puerta de entrada

2)Spring Cloud Config: herramienta de gestión de configuración centralizada, almacenamiento externo de la configuración de la aplicación, se puede utilizar para aplicaciones Spring o no Spring.

3)Spring Cloud Bus: bus de eventos y mensajes, utilizado para propagar cambios de estado o eventos de cambio de configuración en el clúster.

4)Spring Cloud Consul: herramienta de configuración y descubrimiento de servicios, perfectamente integrada con contenedores Docker.

5)Spring Cloud Security: un conjunto de herramientas de seguridad que brinda soporte para la seguridad y autenticación de aplicaciones.

6)Spring Cloud Sleuth: seguimiento distribuido de la cadena de llamadas, compatible con el seguimiento Zipkin, HTrace y ELK.

7)Spring Cloud Cluster: elección de líder, implementada mediante la abstracción de Zookeeper, Redis y Consul.

8)Spring Cloud Data Flow: orquestación de microservicios, fácil de usar a través de una interfaz de arrastrar y soltar o API REST.

9)Spring Cloud Stream: un marco de microservicio liviano impulsado por eventos para crear rápidamente aplicaciones que se conectan a sistemas externos.

10)Spring Cloud Task: un marco de microservicio a corto plazo para crear rápidamente aplicaciones que completen tareas de procesamiento de datos por lotes.

3. Pasos para utilizar los componentes SpringCloud

Tutorial de SpringCloud: 3. Mecanismo de disyuntor de microservicio, explicación detallada del uso del disyuntor hystrix_Cómo configurar el disyuntor de Java-blog CSDN

Tutorial de SpringCloud - 4. Explicación detallada del uso de la puerta de enlace Tutorial de uso de zuul_zuul-Blog CSDN.

1. Hystrix (fusible, degradación, limitación de corriente)

1) ¿Qué hace?

existiren sistemas distribuidos , si un nodo de servicio falla o ocurre una anomalía en la red, la persona que llama puede ser bloqueada y esperar. Si el tiempo de espera se establece en mucho tiempo, los recursos de la persona que llama pueden agotarse.Esto, a su vez, conduce al agotamiento de los recursos en el sistema ascendente de la persona que llama, lo que en última instancia resulta enavalancha del sistema . Los disyuntores pueden prevenir eficazmente avalanchas de servicios.

Si encuentra un aumento repentino en el tráfico, el enfoque general esFunciones comerciales no esencialesSe adoptan medidas de degradación del servicio para proteger el servicio normal de las funciones comerciales básicas, mientras que para los servicios funcionales básicos, es necesario adoptar las medidas limitantes actuales.

2) ¿Sucede en el lado del cliente o en el lado del servidor?

Disyuntor de servicio:generalmente Ocurre en el lado del servidor (el propósito es permitir que la persona que llama falle rápidamente). Cuando un servicio se agota o es anormal, provoca un fusible, similar al fusible en la vida real). (A veces también se puede configurar en el cliente para que falle rápidamente cuando se encuentra una excepción al llamar a un determinado servicio);
Degradación del servicio: generalmente ocurre en el lado del cliente. Teniendo en cuenta la carga general de solicitudes del sitio web, cuando un servicio se desconecta o se cierra, ya no se llamará al servicio (a veces también se puede configurar en el lado del servidor, cuando el sistema tiene). tráfico repentino, las funciones principales se degradarán para proteger las funciones principales);

Limitación actual: generalmente ocurre en el lado del servidor;

3) Cómo utilizar

  • Fusión de un reactor:

@EnableCircuitBreaker: habilitado en la aplicaciónfusible

@HistrixCommand(fallbackMethod="xxxFallback",commandProperties = {
}): La anotación de fusión se agrega a la anotación de degradación. Complete las condiciones de fusión en commandProperties = {}.Administrador de propiedades de HystrixControlar.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Degradar:

Cree una nueva clase xxxFallbackFactory para implementar FallbackFactory y anular el método de creación. El método de degradación se define en crear.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix está integrado en Feign

O especifique el método alternativo directamente en el método: @HistrixCommand(fallbackMethod="xxxFallback")

  • Limitante:

        1、Estrategia limitante actual:

1), límite de corriente del semáforo

El semáforo se utiliza para controlar el número de subprocesos simultáneos. Especifique el número de licencias virtuales internas a través del constructor.

Si se utiliza la tecnología de aislamiento de semáforos, cada vez que se recibe una solicitud, el propio hilo del servicio llama directamente al servicio dependiente. El semáforo es equivalente a un punto de control. Después de que cada hilo pasa el punto de control, el número de semáforos se reduce en 1. Cuando es 0, ya no se permite el paso del hilo, pero la lógica alternativa se ejecuta y devuelve directamente. Para decirlo sin rodeos, es solo un límite actual.

Un semáforo puede entenderse como unencimera, el contador cuenta la cantidad de solicitudes que se están procesando actualmente. Cuando el valor del contador alcanza el valor establecido, las solicitudes posteriores no serán aceptadas (o degradadas) y deberá esperar hasta que el valor del contador sea menor que el valor establecido antes de que se puedan realizar las solicitudes posteriores. estar procesado.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), límite de corriente del grupo de subprocesos

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Nota aquí: enjavaEn el grupo de subprocesos, si el número de subprocesos excedecoreSize, las solicitudes de creación de subprocesos ingresarán primero a la cola. Si la cola está llena, se continuarán creando subprocesos hasta que se alcance el número de subprocesos.maximumSize y luego adoptar la estrategia de rechazo.Pero hay un parámetro adicional en el grupo de subprocesos configurado por hystrixqueueSizeRejectionThreshold,siqueueSizeRejectionThreshold < maxQueueSize, el número de colas alcanzaqueueSizeRejectionThresholdadoptará la estrategia de rechazo, por lo quemaximumSize fallido.siqueueSizeRejectionThreshold > maxQueueSize, el número de colas alcanzamaxQueueSizehora,maximumSizees válido, el sistema continuará creando hilos hasta que el número alcancemaximumSize

      2. La diferencia entre la limitación de corriente del semáforo y la limitación de corriente del grupo de subprocesos:

1) Nivel de rendimiento: el semáforo utiliza el hilo original y tiene un bajo consumo de rendimiento;

2) Nivel de estabilidad del sistema: los grupos de subprocesos están aislados y los problemas por sí solos no afectarán a otros grupos de subprocesos;

3) Síncrono y asíncrono: debido a que el semáforo es el hilo original utilizado, es síncrono y bloqueante.

        3. Escenarios actuales de uso de estrategias limitantes:

Cuando el volumen de solicitudes es muy intensivo y la sobrecarga del aislamiento de subprocesos es relativamente alta, se recomienda utilizar semáforos para reducir la carga. Esta situación generalmente se usa para manejar solicitudes fuera de la red (sin llamar a servicios externos). Se recomienda utilizar el método del grupo de subprocesos en otros escenarios.

4) ¿Cuál es la diferencia entre los tres?

La limitación actual es solo una limitación actual, siempre que no se exceda el límite de tráfico, el servicio aún está disponible (a diferencia del disyuntor) y no es necesario degradarlo (también se puede generar una excepción que exceda el límite de tráfico para que la maneje la persona que llama). por sí mismo). Entonces, hablemos de la diferencia entre disyuntor y degradación:

  • diferentes conceptos

El disyuntor significa que el servicio en su conjunto no está disponible (centrándose en la autoprotección), bajar de categoría significa tomar la siguiente mejor opción (centrándose en proteger el resultado final) y la limitación actual se refiere a la cantidad de tráfico que no se puede exceder.

  • Diferentes mecanismos desencadenantes

De forma predeterminada, si hystrix detecta que la tasa de falla de la solicitud excede el 50% en 10 segundos, activará el mecanismo del disyuntor. Después de eso, la solicitud al microservicio se reintenta cada 5 segundos. Si el microservicio no puede responder, el mecanismo del disyuntor continúa. Si se puede acceder al microservicio, el mecanismo del disyuntor se desactiva y se restablecen las solicitudes normales.

De forma predeterminada, hystrix activará el mecanismo de degradación bajo las siguientes 4 condiciones:

  1. El método arroja HystrixBadRequestException
  2. Tiempo de espera de llamada al método
  3. Encienda el disyuntor para interceptar la llamada.
  4. El grupo de subprocesos, la cola o el semáforo están llenos
  • Diferentes relaciones de propiedad

El mecanismo de degradación se puede llamar durante el disyuntor, pero generalmente no se llama durante la degradación.Debido a que el disyuntor comienza desde una perspectiva general y desactiva los servicios para garantizar la estabilidad del sistema, mientras que la degradación es la mejor opción y proporciona una solución garantizada, sus relaciones de propiedad son diferentes (disyuntor&gt; degradación).

2. Plantilla de fingir y descansar

Resumen del contenido del enlace:

  1. Agregar dependencia inicial;
  2. Agregar anotación: @EnableFeignClients;
  3. Crear interfaz Fingir:

@FeignClient(nombre="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

Tutorial de SpringCloud: 1. Cree rápidamente una demostración de nivel de entrada, solo lea este artículo_Comunidad de código abierto Ye Juyan-GitCodeSin más preámbulos, sígueme y comienza tu primera experiencia con Spring Cloud. Primero, revisa los componentes básicos de los microservicios: [Imagen aquí] Productor: Proporcionar servicio Consumidor: Consumir servicio Centro de registro/descubrimiento de servicios: Registro, descubrimiento y monitoreo de servicios Entonces, primero. comprender la base arquitectónica de los microservicios de Springcloud: productor (cliente), consumidor (cliente), centro de registro/descubrimiento de servicios (servidor) Comunidad de código abierto Ye Juyan GitCodeicono-predeterminado.png?t=N7T8https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Uso de Zuul

Referirse a:

Implementación práctica de la arquitectura del proyecto SpringBoot "Construcción Gateway zuul" -Blog CSDN

4. Uso del centro de registro Eureka

Referirse a:

Arquitectura del proyecto SpringBoot combate real "Construcción del proyecto principal y construcción del centro de registro"_construcción java inicio del proyecto principal springboot-blog CSDN

4. Cómo funciona SpringCloud

1. Principio de funcionamiento de Eureka:

  1. Registro del servicio: cuando se inicia el proveedor del servicio, enviará una solicitud de registro al servidor Eureka, incluida la dirección IP del servicio, el número de puerto, el nombre del servicio y otra información. Después de recibir la solicitud de registro, el servidor Eureka guardará la información del servicio en la memoria y proporcionará la función de consulta de información de registro del servicio externo.

  2. Descubrimiento de servicios: cuando un consumidor de servicios necesita llamar a otros servicios, enviará una solicitud de descubrimiento de servicios al servidor Eureka para obtener una lista de instancias de los servicios requeridos. Después de recibir la solicitud, el servidor Eureka devolverá una lista de instancias del servicio correspondiente, incluida la dirección IP, el número de puerto y otra información del servicio. El consumidor del servicio selecciona una de las instancias del servicio para llamar (equilibrio de carga) en función de la lista de instancias devuelta.

  3. Verificación del estado de los latidos: el proveedor de servicios enviará periódicamente paquetes de latidos al servidor Eureka para demostrar que su servicio está en funcionamiento normal. Si el servidor Eureka no recibe un paquete de latidos de una instancia de servicio dentro de un período de tiempo, considerará que la instancia de servicio está inactiva y la eliminará de la lista de servicios.

5. Código fuente subyacente de SpringCloud

1. Código fuente de Gateway Zuul

Implementación práctica de la arquitectura del proyecto SpringBoot "Construcción Gateway zuul" -Blog CSDN El artículo ha sido visto y leído 227 veces. Capítulo 3 Construcción de Gateway Zuul Prefacio: 1. Funciones principales Zuul proporciona principalmente enrutamiento dinámico (implementación de cinta incorporada) y filtrado (se puede usar como filtro de autenticación unificado, filtro de publicación en escala de grises, filtro de IP de lista blanca y negra, filtro de limitación de corriente del servicio) (Se puede implementar con Sentinel)) función; 2. La diferencia con Spring Cloud GateWay es que es una solución de puerta de enlace proporcionada por dos organizaciones de código abierto diferentes. Spring Cloud GateWay utiliza API sin bloqueo, filtro de limitación de corriente incorporado, admite conexiones largas (como websockets) y es mejor que Zuul en escenarios de alta concurrencia y respuesta lenta del servicio back-end...https://blog.csdn.net/qq_19952029/article/details/124285479

2. Centro de registro Código fuente Eureka

3. Código fuente del disyuntor Histrix

4. Centro de configuración Código fuente de configuración

5. Código fuente de la cinta de equilibrio de carga

6. Llamadas de microservicio Código fuente fingido

6. Cómo implementa SpringCloud las transacciones distribuidas

Práctica del modo Seata TCC (Parte 2) -Comunidad de desarrolladores de la nube de AlibabaCombate real en modo Seata TCC (Parte 2)icono-predeterminado.png?t=N7T8https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9La publicación de blog anterior no resuelve el problema de la suspensión, que puede juzgarse por diferentes indicadores de estado.

https://www.cnblogs.com/lilpig/p/16613226.htmlicono-predeterminado.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. Rol del modo TCC

TM: Administrador de transacciones, generado con la anotación @GlobalTransaction.

CT: Coordinador

RM:Participante

Todo el proceso es:

TM representa sus transacciones globales y se registra con TC antes de comenzar la ejecución
TM comienza a ejecutar cada transacción de sucursal en la transacción global, y RM registra e informa las transacciones de sucursal y el estado de ejecución a TC
Una vez completada la ejecución de la transacción de sucursal, TM inicia una solicitud a TC para confirmar o revertir la transacción global.

2. El significado de la reserva, envío y reversión de recursos de TCC.

Reserva significa bloquear y actualizar el recurso de la base de datos a un estado intermedio y luego cambiarlo al estado efectivo cuando se realiza la confirmación de la segunda etapa después de la confirmación.Entonces, la fase de reserva y la fase de reversión de confirmaciónTodos involucran bases de datos operativas., por lo que también puede haber fallas de confirmación y reversión que requieran procesamiento manual, que pueden solucionarse registrando registros, compensando reintentos, etc.

3. Ventajas y desventajas del TCC

Ventajas del modo TCC

  1. Envío directo en una etapa, sin bloqueos de base de datos ni otros bloqueos, buen rendimiento
  2. La lógica de reserva y recuperación la escribe usted mismo y no depende de la base de datos. Puede usarse en bases de datos no transaccionales.

Desventajas del modo TCC

  1. La codificación es compleja
  2. Débilmente consistente
  3. porqueConfirmyCancelTambién puede fallar y debes lidiar con este proceso.
  4. Algunas empresas no son adecuadas para el modelo TCC. Por ejemplo, realizar un pedido es un proceso de agregar una nueva fila. No hay forma ni necesidad de utilizar TCC.

4. Modo XA

Fuerte consistencia, al coordinar cuándo se confirman y revierten las transacciones locales de cada participante.

Ventajas del modo XA

  1. Fácil de implementar, debido a que la mayoría de las bases de datos ya admiten transacciones XA, Seata solo necesita realizar un empaquetado simple
  2. consistencia fuerte

Desventajas del modo XA

  1. Cada transacción debe esperar a que se complete todo el procesamiento de la transacción, lo que ocupa bloqueos de la base de datos, lo que genera un rendimiento deficiente y una baja disponibilidad.
  2. No se puede utilizar si la base de datos no admite transacciones XA.

5. En modo

consistencia débil