Saltar al contenido principal
Para aprovechar al máximo los recursos informáticos, cada estación ejecuta varios hilos de procesamiento al mismo tiempo; cuantos más núcleos de CPU haya disponibles, más hilos podrán procesarse en paralelo. Dado que el número de núcleos de CPU varía de un equipo a otro, tiene sentido contar el número total de núcleos de CPU de procesamiento del sistema FlexiCapture. Si no hay cuellos de botella en el sistema, cada nuevo núcleo de procesamiento aporta la misma contribución al rendimiento de todo el sistema. Por lo tanto, debe estimar la contribución de un núcleo y luego calcular cuántos núcleos necesita para alcanzar el rendimiento objetivo. La cantidad de páginas que un núcleo de procesamiento puede procesar en un período de tiempo depende en gran medida del flujo de trabajo de procesamiento (por ejemplo, del número de etapas), de la configuración de procesamiento (operación de mejora de imagen, modo de reconocimiento, configuración de exportación), de la implementación de etapas personalizadas (motores personalizados y reglas de script, acceso a recursos externos) y del hardware. Si no conoce ninguno de estos detalles, pero ya necesita una estimación, puede usar el siguiente gráfico como referencia. No obstante, lo más probable es que en su proyecto obtenga resultados diferentes. La dependencia del rendimiento con respecto al número de núcleos de procesamiento Configuración El proyecto de demostración “SingleEntryPoint”: procesamiento desatendido, exportación a archivos PDF. Para páginas en blanco y negro: estaciones de procesamiento de 10 núcleos, 2.4GHz, 16GB de RAM, SSD, NIC de 1 Gb/s. Para estimar el número necesario de núcleos de procesamiento, puede hacer lo siguiente:
  1. Configure el flujo de trabajo de su proyecto, tome la estación de procesamiento cuyas características de hardware sean las más parecidas a las que se usarán en producción y cree un lote típico de imágenes.
  2. Vamos a medir cuánto tiempo se tarda en procesar un lote con un núcleo. No basta con procesar un lote una sola vez, porque FlexiCapture puede distribuir el procesamiento entre todos los núcleos disponibles, y durante las pruebas se tardará menos en procesar un lote, mientras que en producción real otros núcleos estarán ocupados procesando otros lotes. Para obtener una estimación fiable, recomendamos crear varias copias de su lote típico: al menos tantas como el número de núcleos, aunque es mejor multiplicarlo por N (que sea al menos 3) para minimizar el error de medición, y ponerlas todas a procesarse simultáneamente. El tiempo necesario para procesar un lote por núcleo es entonces el tiempo total de procesamiento dividido entre N. Esta estimación tiene en cuenta la posible competencia entre los núcleos de procesamiento por los recursos compartidos de la estación de procesamiento. Ejemplo. Tenemos una estación de procesamiento de 8 núcleos con Hyper-Threading habilitado, lo que nos da 16 núcleos lógicos y procesos de ejecución en esta estación. Necesitamos crear al menos 16 copias de un lote típico, pero sería mejor crear 16 x 3 = 48 copias para minimizar el error de medición. Colocamos todos los lotes en la hotfolder de FlexiCapture, iniciamos el temporizador cuando se crea la primera tarea de importación y lo detenemos después de que el último resultado se haya exportado al backend: marcará 15 minutos. En ese tiempo, cada núcleo tiene que procesar 3 lotes, por lo tanto, el tiempo para procesar 1 lote es de aproximadamente 5 minutos. Nuestro lote tiene 69 páginas, y podemos decir que se tardan 4.35 segundos en procesar 1 página.
  3. Una vez que conocemos el rendimiento deseado en páginas por hora o por día, podemos obtener una estimación del número de núcleos necesario. Suponga que necesita procesar P páginas en un tiempo T. Ya sabemos por lo anterior que 1 núcleo necesita un tiempo t para procesar 1 página. Por lo tanto, necesita N = (P x t ) / T núcleos. Ejemplo. Un cliente necesita procesar 200,000 páginas en 8 horas, que son 28,800 segundos. Como sabemos por lo anterior, 1 núcleo tarda 4.35 segundos en procesar 1 página. Por lo tanto, necesitamos (200,000 x 4.35) / 28,800 = 31 núcleos. Así, 2 estaciones de procesamiento con 8 núcleos y Hyper-Threading habilitado (32 núcleos lógicos en total) serán suficientes para el procesamiento automático.
Hay 2 factores limitantes en lo que respecta al número de núcleos de procesamiento en el sistema:
  1. La carga total sobre la infraestructura que puede dar lugar a cuellos de botella:
      • en el hardware del servidor FlexiCapture;
      • en la red; o
      • en recursos compartidos externos (como bases de datos, servicios externos, etc.) a los que acceden los scripts de procesamiento personalizados.
Un cuello de botella provocará la saturación del rendimiento: añadir un nuevo núcleo de procesamiento tendrá un efecto negativo o simplemente no tendrá ningún efecto en el rendimiento total. Este documento describe cómo diseñar el Sistema para evitar cuellos de botella (consulte más arriba) y cómo supervisar el hardware y la infraestructura para detectar cuellos de botella. Aun así, incluso si no se detectan cuellos de botella claros, la competencia entre los núcleos de procesamiento por los recursos compartidos aumenta a medida que se añaden nuevos núcleos al Sistema. Si va a utilizar más del 50 % de la capacidad de lectura/escritura de la red o de FileStorage (según los cálculos de este documento), añada un 20 % al tiempo de procesamiento de cada página en los ejemplos anteriores; esto implicará, de hecho, la necesidad de un 20 % más de núcleos de procesamiento en el Sistema. Use almacenamiento en caché para que los núcleos de procesamiento accedan más rápido a los recursos externos; por ejemplo, en lugar de conectarse directamente a la base de datos, conéctela a FlexiCapture Data Set y, a continuación, solicite el Data Set desde los scripts.
  1. El número de núcleos de procesamiento que puede atender el Processing Server. Este número depende del tiempo promedio que necesita un núcleo para realizar una tarea. Este tiempo depende en gran medida del tamaño del lote (en páginas) y de la personalización implementada. Por lo general, si tiene alrededor de 10 páginas en un lote, el Processing Server puede atender 120 núcleos de procesamiento. Sin embargo, si crea una gran cantidad de etapas personalizadas con scripts muy rápidos, o si va a procesar una página por lote, reducirá considerablemente el tiempo promedio de la tarea, lo que puede provocar una ligera disminución del número máximo de núcleos de procesamiento.
Para detectar este problema, debe supervisar el contador Free Processing Cores en el Processing Server. Si observa que, a pesar de ello, tiene una cola de documentos para procesar, que el número de núcleos ocupados alcanzó la saturación en algún momento y casi nunca vuelve a subir, significa que se ha producido el efecto descrito. Para solucionarlo:
  • procese todo el lote sin dividirlo en tareas pequeñas, siempre que sea posible (consulte Propiedades de etapa en el cuadro de diálogo de configuración del flujo de trabajo),
  • procese las páginas en bloques más grandes: aumente el número promedio de páginas por lote, combine varias etapas personalizadas en una sola o incorpore la personalización a una etapa estándar, por ejemplo, añadiéndola a un evento de enrutamiento en el script de esa etapa.