Cómo establecer científicamente el grupo de subprocesos

El servicio en línea de alta concurrencia es como un dique parado en silencio junto a los grandes ríos. Siempre está listo para lidiar con el impacto de la inundación. El grupo de subprocesos del servicio de alta concurrencia en línea también causa muchos problemas, tales como: el grupo de subprocesos está lleno , Alta utilización de la CPU, fallas en el hilo de servicio, etc. Esto se debe al uso incorrecto del grupo de hilos o al incumplimiento de un buen trabajo de protección y degradación.

Por supuesto, algunos socios pequeños tienen la idea de proteger el conjunto de subprocesos, pero ¿tiene esa experiencia e impresiones? A veces, el subproceso del conjunto de subprocesos está configurado más y el rendimiento es menor, la configuración es menor o el rendimiento es bajo, ¿cómo debería establecerse? ¿Qué pasa con los grupos de hilos?

Después de años de revisiones de diseño de socios pequeños, aprendí que los socios pequeños se basan en la experiencia y la intuición para establecer el número de hilos en el grupo de hilos, luego ajustar el número de acuerdo con la situación en línea y finalmente encontrar el valor más adecuado. Esto es a través de la experiencia. A veces funciona, a veces no funciona, a veces funciona pero cuesta mucho dinero encontrar la cantidad óptima de configuraciones.

De hecho, la configuración del grupo de subprocesos está bien fundada y se puede establecer en base a cálculos teóricos.

En primer lugar, veamos la situación ideal, es decir, todas las tareas a procesar son tareas computacionales. En este momento, el número de subprocesos debe ser igual al número de núcleos de CPU. Deje que cada CPU ejecute un subproceso sin cambio de subproceso. Por supuesto, esta es la situación ideal.

En este caso, si queremos lograr una cierta cantidad de QPS, utilizamos la siguiente fórmula de cálculo.

Establecer el número de subprocesos = QPS objetivo / (1 / tiempo de procesamiento de la tarea real)

Por ejemplo, suponga que el objetivo QPS = 100, el tiempo de procesamiento real de la tarea es 0.2s, y 100 * 0.2 = 20 subprocesos. Los 20 subprocesos aquí deben corresponder a los 20 núcleos físicos de la CPU, de lo contrario no se alcanzará el índice QPS estimado.

Pero, de hecho, además de hacer computación en memoria, nuestros servicios en línea tienen más que ver con el acceso a bases de datos, cachés y servicios externos. La mayoría de las veces está esperando tareas de E / S.

Si hay muchas tareas de E / S, usamos la ley de Amdahl para calcular.

Establecer número de subprocesos = número de núcleos de CPU * (1 + io / informática)

Por ejemplo, suponiendo una CPU de 4 núcleos, las tareas de E / S en cada tarea representan el 80% del total de tareas. 4 * (1 + 4) = 20 subprocesos. Los 20 subprocesos aquí corresponden a CPU de 4 núcleos.

Además de la configuración del número de subprocesos en el subproceso, la configuración del tamaño de la cola del subproceso también es muy importante, que también se puede obtener a través del cálculo teórico, la regla es calcular el tamaño de la cola de acuerdo con el tiempo de respuesta objetivo.

Tamaño de la cola = número de subprocesos * (tiempo de destino correspondiente / tiempo de procesamiento de tarea real)

Por ejemplo, suponga que el tiempo correspondiente del objetivo es 0.4s, y la longitud de la cola de bloqueo se calcula como 20 * (0.4 / 0.2) = 40.

Además, al establecer el número de grupos de subprocesos, tenemos las siguientes mejores prácticas.

  1. El uso de grupos de subprocesos debe considerar el número máximo de subprocesos y el número mínimo de subprocesos.

  2. Para un servicio de una sola parte, el número máximo de subprocesos debe ser igual al número mínimo de subprocesos, y el servicio mixto puede ampliar adecuadamente la brecha entre los números máximo y mínimo para ajustar la utilización general de los núcleos de la CPU.

  3. El tamaño de la cola de subprocesos debe establecerse en una cola limitada, de lo contrario, la presión abrumará todo el servicio.

  4. Utilice grupos de hilos solo cuando sea necesario, y se debe realizar una evaluación del rendimiento del diseño y pruebas de esfuerzo.

  5. Se debe considerar la estrategia de falla del grupo de subprocesos y la compensación después de la falla.

  6. Los servicios de procesamiento por lotes en segundo plano deben estar separados de los servicios en línea orientados al usuario.

Supongo que te gusta

Origin www.cnblogs.com/lupeng2010/p/12705795.html
Recomendado
Clasificación