Colección de girasol de alta concurrencia

Prólogo

No es un día frío para tres pies de congelación, también lo es el diseño del sistema, y ​​una buena arquitectura está en constante evolución.
En términos generales, los problemas que se pueden resolver con una arquitectura de bloque único no se deben distribuir tanto como sea posible. Aunque distribuido puede mejorar la capacidad de respuesta del sistema, también trae una mayor complejidad. Si el personal técnico del equipo no puede mantener el nivel, causará más problemas. Por ejemplo, el problema es difícil de localizar, el rendimiento del sistema se degrada y algunos negocios Difícil o imposible de lograr.

El siguiente contenido está organizado por el gran poeta chenqionghe, bebé ligero ~

Indicadores de uso común

Tiempo de respuesta

El sistema de respuesta intuitivo es rápido y lento, generalmente controlado dentro de los 200 ms, los usuarios pueden sentir la lentitud después de más de 1 segundo.

Número concurrente

Número de solicitudes simultáneas

QPS

Consultar solicitudes por segundo

TPS

El número de transacciones ejecutadas por segundo, con un enfoque en escrituras reactivas

Tres altos

Alta concurrencia

A través del diseño, el sistema puede recibir más solicitudes concurrentes de los usuarios y realizar más tráfico.
Generalmente verifique el número concurrente, QPS y TPS.


Ejemplo: Lushan Bailongba, concurrente Bailong

Alto rendimiento

Generalmente se refiere al rápido tiempo de respuesta del servicio

  • Perspectiva del usuario. Sentirse directamente rápido en la aplicación y el navegador
  • Perspectiva de desarrollo. Bajo retraso de respuesta, gran rendimiento del sistema y fuerte capacidad de procesamiento concurrente
  • Perspectiva de operación y mantenimiento. Alta configuración de infraestructura, CPU multinúcleo, memoria grande


Ejemplo: la maravilla de Atenea, los tres santos dorados concentran su propio universo mínimo para atacar

Alta disponibilidad

A través del diseño, el sistema reduce el tiempo de inactividad y mantiene una alta disponibilidad de servicios.
El acuerdo de SLA se usa generalmente para medir la disponibilidad del servicio, y generalmente se mide por varios nueves.
Tomando un año como ejemplo, 1 año = 365 días = 8760 horas

  • 99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76 horas
  • 99,99 = 8760 * 0,0001 = 0,876 horas = 0,876 * 60 = 52,6 minutos
  • 99.999 = 8760 * 0.00001 = 0.0876 horas = 0.0876 * 60 = 5.26 minutos
    Cuanto mayor sea la disponibilidad proporcionada por SLA, menor será el tiempo de inactividad dentro de un año. Un indicador cuantitativo de alta disponibilidad.

Ejemplo: la maravilla de Athena, dividida en diferentes grupos.

Movimientos comunes

Shunt

Por ejemplo, nginx, hproxy, traefik, la esencia es distribuir el tráfico a diferentes nodos, equilibrio de carga
Ejemplo: Starbucks abre una sucursal, aumenta el personal de ventas, expande el área

Caché

Por ejemplo: caché Redis,
ejemplo Memcached : proporcione puestos de venta en supermercados para mejorar la eficiencia de compra de los clientes; la tienda de desayuno primero prepara el desayuno con anticipación, los clientes vienen directamente a tomar

Cola

  • Mejora la velocidad de respuesta.
    Regrese antes de completar el procesamiento, mejore la velocidad de respuesta y envíe una notificación después del procesamiento.
  • Almacenamiento de tráfico, corte de picos y llenado de valles
    Para evitar que una gran cantidad de solicitudes afecten a los servicios de fondo, puede usar colas de mensajes para almacenar temporalmente las solicitudes. Los servicios de fondo consumen de la cola de acuerdo con sus propias capacidades de procesamiento, como picos y puntos enterrados.
    En pocas palabras, es el servicio de almacenamiento intermedio de la cola aguas arriba y el envío del límite de velocidad; el servicio de almacenamiento intermedio de la cola aguas abajo y la ejecución del límite de velocidad. Para
    el segundo escenario de barra, generalmente hay dos formas,
    1. Cerradura Por ejemplo, el mutex en el paquete golang también puede aprovechar la atomicidad de redis en sí
    2. Escribe en la cola de mensajes. Hacer reducción de inventario en la cola de mensajes
  • El desacoplamiento del sistema,
    por ejemplo, la información de un pedido necesita sincronizar múltiples subsistemas. Cada subsistema necesita guardar parte de los datos del pedido. Si el equipo de servicio de pedidos mantiene todos los subsistemas sincronizados, el acoplamiento es demasiado grande. En este momento, puede usar el modelo de publicación y suscripción. El servicio de pedidos envía un mensaje a un tema cuando el pedido cambia, y todos los subsistemas posteriores se suscriben al tema, para que cada subsistema pueda obtener los datos del pedido.

Ejemplo: vaya a Pirate Shrimp Rice para la cena, primero eche un vistazo y tráigalo para usted

CDN

La definición oficial de CDN (Content Delivery Network) se llama red de entrega de contenido.
En pocas palabras, es un tipo de caché. El principio es distribuir recursos estáticos a los servidores ubicados en varias salas de computadoras enterradas.
Al final, puede lograr el efecto de acelerar el acceso a los datos más cercanos, por ejemplo, el área de Beijing visita los datos de Beijing y Hainan visita Hainan.
Por supuesto, esto no necesita ser desarrollado por nosotros mismos, por ejemplo, Alibaba Cloud, Qiniu Cloud y otros proveedores de nube conocidos brindan servicios CDN.
El uso general es configurar la dirección de la CDN de nuevo a la fuente para actualizar los datos y resolver el nombre de dominio del servicio al CNAME devuelto por el proveedor de la nube.

Ejemplo: Jingdong compra cosas y los envíos se entregan directamente desde el almacén más cercano. Solo cuando el almacén está agotado, se recogerá en la fuente (de vuelta a la fuente)

Agrupación

La creación de conexiones generales consume más recursos y tiempo. En general, podemos usar grupos de conexiones para mejorar la eficiencia. Esta es la tecnología de agrupación legendaria. Los más comunes incluyen grupos de conexiones de datos y grupos de subprocesos.
Para establecer el número de conexiones inactivas y el número máximo de conexiones, los pasos generalmente son los siguientes:

  1. El número actual de conexiones es menor que el número de conexiones inactivas, cree
  2. Hay conexiones inactivas en el grupo de conexiones para uso directo
  3. No hay conexiones inactivas, el número actual de conexiones es menor que el número máximo de conexiones, cree
  4. Alcanzó o excedió el número máximo de conexiones, espere a que se libere la conexión anterior de acuerdo con el tiempo de espera establecido y arroje un error cuando se agote el tiempo de espera

La esencia es intercambiar espacio por tiempo, y los objetos de conexión generalmente creados se colocarán en una cola.

Expansión


  • Configuración de expansión de capacidad vertical , como agregar núcleos de CPU, agregar memoria y cambiar a almacenamiento optimizado de E / S

  • Expansión horizontal
    Agregue máquinas directamente, más beneficios

Fusible

Cuando se llama a un servicio, si se devuelve un error o el número de tiempos de espera excede un cierto umbral, las solicitudes posteriores ya no se enviarán y el error se devolverá directamente.Ejemplo
: al igual que el fusible de un circuito, el circuito se abre automáticamente cuando la corriente se sobrecarga.
Las soluciones de código abierto incluyen: hystrix, traefik, istio,

Límite actual

Al limitar el número de solicitudes simultáneas al sistema, el sistema puede garantizar que el sistema pueda responder a las solicitudes de algunos usuarios. Para el tráfico que excede el límite, la disponibilidad general del sistema está garantizada por la denegación de servicio.
Por ejemplo: cuando se viaja a las Grutas de Mogao durante las undécimas vacaciones, solo se emitirá un número limitado de boletos en las atracciones, los boletos se agotaron y los nuevos clientes ya no los recibirán.
Puede enterrar el código de límite actual en el sistema, por ejemplo, puede usar el canal de búfer de golang para lograrlo.

Degradar

Al igual que Shaka se vio privado de los cinco sentidos,

por ejemplo, durante Double Eleven, cuando abre Taobao, encontrará que hay mucha menos información en la interfaz. Concurrente gran tráfico.

En capas

Beneficios: división clara del trabajo, reutilización conveniente, fácil de expandir a la capa.
Esta estratificación puede referirse a la arquitectura de código o la arquitectura de servicio, que generalmente no se llama a través de capas

  • El
    controlador MVC (C) llama al modelo (M) para obtener datos y luego (V) representa la vista.
    La lógica empresarial generalmente se escribe en el modelo para su reutilización, pero puede conducir a una división de responsabilidades poco clara entre los modelos.
    Por lo tanto, la capa de servicio generalmente se agrega al modelo de modelo para que la lógica de negocios ya no se almacene.

  • Web, Servicio, Dao

    • Web: capa de presentación. Se puede entender simplemente como Controlador y Vista
    • Servicio: capa de lógica de negocios. La lógica de negocios está encapsulada en esta capa, esta capa llama directamente a Dao para obtener datos
    • Dao: capa de acceso a datos. Responsable de acceder a la base de datos, el más común es el modelo AR u ORM

    Se puede entender simplemente que MVC agrega una capa de Servicio, el Controlador llama directamente al Servicio y el Modelo de llamadas al Servicio

  • Web, Servicio, Administrador, Dao
    agrega una capa de Administrador entre Servicio y Dao, extrae la lógica común entre las capas de servicio.

Jerarquía de implementación

El servicio se implementa en diferentes máquinas físicas de acuerdo con la prioridad de la prioridad, y el nodo final desplegado se puede seleccionar a través de la etiqueta de K8S

Registro de monitoreo

  • Registro de seguimiento.
    Utilice ELK o Alibaba Cloud Log Service. Solicitud y transferencia de registro requestId, consulta para recuperar todos los registros relacionados con la solicitud de acuerdo con el requestId
  • Seguimiento de la cadena de llamadas: la
    solución de código abierto Zipkin, Jaeger. El núcleo es rastrear cada llamada a través de TranceId y SpanId
  • Monitoreo de Prometheus
    Almacene los indicadores a monitorear en prometheus y muéstrelos a través de Grafanan
  • Monitoreo de Sentry
    Recopilación unificada y recopilación de registros anormales, para 500 de tales errores en la consulta de fondo de Sentry , más conveniente para localizar

Separación de lectura y escritura

Empuje solicitudes de lectura y solicitudes de escritura a diferentes instancias, como la separación de lectura y escritura de
MySQL, la separación de lectura y escritura de Redis El núcleo de separación maestro-esclavo de MySQL es binlog, la biblioteca principal escribe binlog en el archivo de registro de retransmisión y extrae de la biblioteca.

La sincronización maestro-esclavo es propensa a sufrir problemas de retraso. Por ejemplo, la biblioteca maestra se ha escrito y los datos antiguos se consultan desde la biblioteca. En general, se resolverá de las siguientes maneras:

  1. Lee la biblioteca principal directamente
  2. Actualizar caché antes de la biblioteca principal, leer caché
  3. Pase los datos actualizados directamente sin consultar la biblioteca

Tabla de sub-biblioteca

Generalmente se dividirá junto con el servicio

  • Dividir verticalmente.
    Los servicios dedicados utilizan bibliotecas especializadas. Por ejemplo, un proceso de compra se puede dividir en una tienda de productos básicos y una tienda de pedidos.
  • Dividir horizontalmente.
    Por ejemplo, los usuarios se dividen en 10 bibliotecas, usuarios0, usuarios1 ... usuarios9, y se almacenan en diferentes bibliotecas de acuerdo con el módulo de un campo determinado.

Desventajas

  • No puedo unirme
  • Las estadísticas también son un problema.
  • Ya no puede usar transacciones

Optimización de consultas

  • Optimizar el índice sql. Análisis de la eficiencia de ejecución de SQL, optimización mediante la adición de índices.
  • Introducir Elasticsearch. Mejore la eficiencia de búsqueda y reduzca la presión de búsqueda difusa en la base de datos.

Supongo que te gusta

Origin www.cnblogs.com/chenqionghe/p/12736957.html
Recomendado
Clasificación