Tengo una aplicación, en su forma más simple, lee una gran cantidad de números de una base de datos (unos 15 millones) y envía cada número de una línea a la vez a una url para su procesamiento. Diseñé la aplicación de esta manera:Heavy Asynchronous Processing
- exportar a granel los números de teléfono de sql a un archivo de texto utilizando SSIS. Esto es muy rápido y es cuestión de 1 o 2 minutos.
- carga los números en una cola de mensajes (utilizo MSMQ en este momento).
- Decae los mensajes de una aplicación de línea de comandos y active la solicitud a través de http para algún servicio, como 3 llamadas por número de teléfono y finalmente inicie sesión en una base de datos.
El problema es que todavía tarda en completarse. MSMQ también tiene un límite en el tamaño de los mensajes que puede tomar y ahora tengo que crear varias colas de mensajes. Necesito mucha tolerancia a las fallas, pero no me atrevo a hacer que mi cola de mensajes sea transaccional debido al rendimiento. Estoy pensando en publicar la cola de mensajes (actualmente una cola privada) en el directorio activo para que los procesos puedan dequeue de diferentes sistemas para que esto se complete más rápido. Además, mis procesadores alcanzan el 100% durante la ejecución y lo estoy cambiando para usar un threadpool en este momento. Estoy dispuesto a explorar JMS en este momento si manejará mejor la cola. Hasta ahora, la parte más eficiente de todo el procesamiento es la parte de SSIS.
Me gustaría escuchar un mejor enfoque de diseño, especialmente si ya manejó este tipo de volúmenes. Estoy listo para cambiar a Unix o hacer lisp si maneja mejor esta situación.
Gracias.
15 millones de registros procesados uno a la vez a través de HTTP ** ** le llevará mucho tiempo - no sé cuánto tiempo toma cada solicitud, pero incluso con una latencia de 250 ms para todo el proceso que está probablemente mirando> 1,000 horas de procesamiento (suponiendo una solicitud secuencial). Incluso enviando 10 solicitudes en paralelo y asumiendo que tienen la misma latencia total, tomaría 250 horas procesarlas. Comenzaría por ver si su "url" admite la aceptación de más de un registro a la vez: esa sería la forma más fácil de paralelizar el trabajo para que se complete más rápido. – LBushkin
Cualquiera que sea la solución que encuentre: haga los cálculos antes de encontrar el tiempo que lleva hacerlo y luego multiplique eso por 15,000,000. Debe poder realizar un lote de las solicitudes. –
La URL del lote no está disponible, y sí, hice los cálculos y me pregunto si alguien podría tener un enfoque interesante. – keni