POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Cuello de botella, YouTube y canales C#: backup .NET 3x más rápido

Cuello de botella, YouTube y canales C#: backup .NET 3x más rápido

Publicado el 30/08/2025

Cuando lancé por primera vez mi herramienta Autodesk Construction Cloud Backup en 2022 estaba bastante satisfecho con los resultados; respaldaba de forma fiable alrededor de 150 GB en aproximadamente 6 horas, una mejora notable frente a las alternativas comerciales de la época.

Avanzamos hasta 2025 y los datos habían crecido hasta unos 225 GB, pero la copia nocturna ahora tardaba la friolera de 12 horas. Los datos no se habían duplicado y sin embargo el tiempo de copia sí. Algo no encajaba en la escalabilidad del proceso y la situación no me gustaba.

La idea clave llegó mientras actualizaba el proyecto a .NET 9 y aprovechaba para cambiar el sistema de logging a Serilog. Durante un descanso vi un video sobre C# Channels que me abrió los ojos a una solución elegante y sencilla.

El problema era el enfoque secuencial y rudimentario: mientras una tarea estaba enumerando el contenido de un proyecto, el descargador estaba inactivo; cuando el descargador trabajaba, el enumerador esperaba. Era como un puente de un solo sentido donde sólo puede pasar un coche a la vez.

La solución fue clara: separar responsabilidades. Tener trabajadores que se dediquen exclusivamente a enumerar proyectos y, al mismo tiempo, otro trabajador que descargue continuamente los proyectos ya preparados. El descargador debía estar activo todo el tiempo recibiendo trabajo desde una cinta transportadora lógica.

Implementé un canal unbounded que actúa como esa cinta transportadora que almacena proyectos listos para descarga. La decisión por un canal sin límite fue intencional porque los tiempos de enumeración varían mucho entre proyectos; algunos requieren segundos y otros más de media hora. Un canal limitado podría bloquear enumeraciones rápidas a la espera de descargas lentas.

El componente productor controla cuántos proyectos se enumeran simultáneamente usando un semáforo para fijar la concurrencia y poder gestionar errores por proyecto con más control. Los productores escriben en el canal proyectos ya analizados y listos para la siguiente fase.

El componente consumidor lee continuamente del canal y descarga los proyectos en el orden en que van llegando. Para medir la salud del pipeline registramos métricas de rendimiento que comparan el tiempo activo de descarga frente al tiempo de espera entre proyectos. Si el tiempo de espera es alto, la enumeración es el cuello de botella; si es bajo, las descargas están aprovechando bien el pipeline.

Es importante destacar que el consumidor procesa proyectos de forma secuencial intencionalmente ya que la API de Autodesk aplica límites de uso que podrían causar throttling si se descargaran varios proyectos a la vez. Dentro de cada proyecto, sin embargo, los archivos se descargan en paralelo, aprovechando la descarga concurrente para exprimir el ancho de banda disponible.

La estrategia de paralelismo tiene dos niveles complementarios. Nivel 1: concurrencia controlada en la enumeración de proyectos para tener varios proyectos preparados en paralelo. Nivel 2: dentro de cada proyecto, descargas paralelas de archivos para maximizar el uso del enlace de red. Mientras un proyecto descarga sus archivos, otros proyectos pueden estar siendo enumerados en segundo plano, manteniendo el descargador alimentado.

El resultado fue notable. La copia que antes tardaba 12 horas para unos 225 GB repartidos en aproximadamente 170 proyectos ahora termina en apenas 4 horas, una mejora de 3 veces. Más importante aún, las estadísticas de eficiencia del pipeline muestran que el descargador está activo más del 90% del tiempo en ejecuciones típicas, frente a la eficiencia estimada del 50% del enfoque secuencial anterior.

Ejemplo de métricas que empezamos a reportar en cada ejecución: tiempo total del pipeline, tiempo activo de descarga en porcentaje, tiempo de espera ocioso en porcentaje, proyectos procesados y tiempo medio de espera entre proyectos. Además integramos copias incrementales que reutilizan archivos de respaldos anteriores para evitar descargas innecesarias.

La combinación de pipeline productor consumidor con copias incrementales produce beneficios compuestos: el pipeline mantiene la herramienta ocupada y las copias incrementales evitan redescargar archivos sin cambios, lo que ahorra ancho de banda y tiempo de ejecución.

La lección clave fue reconocer que enumerar y descargar son operaciones diferentes con cuellos de botella distintos. La enumeración es limitada por llamadas a la API y latencias, mientras que la descarga está limitada por el ancho de banda. Desacoplar ambas con Channels permite que cada operación funcione a su ritmo óptimo sin bloquear a la otra.

En Q2BSTUDIO, empresa de desarrollo de software y aplicaciones a medida, aplicamos este tipo de mejoras arquitectónicas en proyectos reales para ofrecer soluciones escalables y eficientes. Somos especialistas en software a medida, inteligencia artificial e ia para empresas, además de ofrecer servicios de ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y soluciones de agentes IA. También integramos herramientas como power bi para enriquecer la visualización y análisis de datos.

Si tu empresa necesita optimizar procesos batch, construir aplicaciones a medida o aprovechar inteligencia artificial y agentes IA para automatizar tareas, Q2BSTUDIO puede diseñar la solución adecuada. Ofrecemos desarrollo de software a medida, consultoría en ciberseguridad, migración y operación en servicios cloud aws y azure, y proyectos de inteligencia de negocio con power bi para transformar datos en decisiones accionables.

Este caso práctico demuestra que a veces una idea simple y bien aplicada mejora radicalmente el rendimiento: un canal bien pensado, concurrencia controlada en la enumeración y descargas paralelas dentro de cada proyecto cambiaron por completo la eficiencia de una herramienta de backup. En Q2BSTUDIO combinamos esa visión técnica con experiencia en inteligencia artificial y servicios cloud para llevar sus proyectos al siguiente nivel.

Contacto y próximos pasos: si te interesa que revisemos el rendimiento de tus procesos, optimicemos una aplicación a medida o implementemos agentes IA y soluciones de inteligencia de negocio con power bi, ponte en contacto con Q2BSTUDIO para una evaluación y propuesta adaptada a tus necesidades.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio