Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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.
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.
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;
@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.
- @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
- //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
- // 条件一: 请求数量达到3个
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
- // 条件二: 每20秒一个判断单位
- @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
- // 条件三: 失败率30%
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
- // 结果: 熔断后, 30秒内不再请求远程服务
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
- })
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")
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.
- @HystrixCommand(
- commandProperties= {
- @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
- @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
- },
- fallbackMethod = "errMethod"
- )
2), límite de corriente del grupo de subprocesos
- @HystrixCommand(
- commandProperties = {
- @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
- },
- threadPoolKey = "createOrderThreadPool",
- threadPoolProperties = {
- @HystrixProperty(name = "coreSize", value = "20"),
- @HystrixProperty(name = "maxQueueSize", value = "100"),
- @HystrixProperty(name = "maximumSize", value = "30"),
- @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
- },
- fallbackMethod = "errMethod"
- )
Nota aquí: enjava
En 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 alcanzaqueueSizeRejectionThreshold
adoptará la estrategia de rechazo, por lo quemaximumSize
fallido.siqueueSizeRejectionThreshold > maxQueueSize
, el número de colas alcanzamaxQueueSize
hora,maximumSize
es 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.
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:
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.
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:
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> degradación).
Resumen del contenido del enlace:
@FeignClient(nombre="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)
Referirse a:
Referirse a:
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.
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.
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.
Práctica del modo Seata TCC (Parte 2) -Comunidad de desarrolladores de la nube de AlibabaCombate real en modo Seata TCC (Parte 2)https://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.htmlhttps://www.cnblogs.com/lilpig/p/16613226.html
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.
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.
Ventajas del modo TCC:
Desventajas del modo TCC:
Confirm
yCancel
También puede fallar y debes lidiar con este proceso.Fuerte consistencia, al coordinar cuándo se confirman y revierten las transacciones locales de cada participante.
Ventajas del modo XA:
Desventajas del modo XA:
consistencia débil