Esta pregunta continúa de acuerdo con lo que aprendí de mi pregunta de ayer titulada using git to distribute nightly builds.Uso del protocolo bittorrent para distribuir compilaciones de CI y nocturnas
En las respuestas a las preguntas anteriores estaba claro que el git no se ajustaba a mis necesidades y me animé a reexaminar usando BitTorrent.
versión corta
necesidad de distribuir versiones compiladas a 70+ personas cada mañana, le gustaría utilizar gitBitTorrent a equilibrar la carga de la transferencia.
Versión larga
NB. Puede omitir el párrafo siguiente si ha leído mi previous question.
Cada mañana tenemos que distribuir nuestra construcción nocturna en el estudio de más de 70 personas (artistas, evaluadores, programadores, producción, etc.). Hasta ahora, hemos copiado la compilación en un servidor y hemos escrito un programa de sincronización que lo recupera (usando Robocopy debajo); incluso con la configuración de espejos, la velocidad de transferencia es inaceptablemente lenta, demorando hasta una hora o más para sincronizarse en las horas punta (los períodos de menos de 15 minutos) lo que apunta a ser un cuello de botella de E/S de hardware y posiblemente un ancho de banda de red.
Lo que sabemos hasta ahora
Lo que he encontrado hasta ahora:
he encontrado la excelente entrada en la Wikipedia sobre el BitTorrent protocol que era una lectura interesante (yo sólo tenía previamente conocido conceptos básicos de cómo funcionaban los torrentes). También encontré este StackOverflow answer en el intercambio BITFIELD que ocurre después del intercambio de información del cliente al servidor.
También encontré el MonoTorrent C# Library (GitHub Source) que puedo usar para escribir nuestro propio rastreador y cliente. No podemos usar rastreadores o clientes fuera de la plataforma (por ejemplo, uTorrent).
Preguntas
en mi diseño inicial, que cuentan con nuestro sistema de construcción creación de un archivo .torrent y añadiendo que el rastreador. Me gustaría super-seed el torrente utilizando nuestros espejos existentes de la construcción.
Usando este diseño, ¿necesitaría crear un nuevo archivo .torrent para cada compilación nueva? En otras palabras, ¿sería posible crear un "rolling" .torrent donde, si el contenido de la construcción solo ha cambiado un 20%, eso es todo lo que necesita descargarse a obtener el último?
... En realidad.Al escribir la pregunta anterior, creo que necesitaría crear un nuevo archivo , sin embargo Podría descargarlo a la misma ubicación en la máquina de los usuarios y el hash automáticamente determinar lo que ya tengo. ¿Es esto correcto?
En respuesta a los comentarios
para la sincronización completamente nuevo toda la construcción (incluyendo: el juego, código fuente, los datos localizados, y las imágenes de disco para PS3 y X360) ~ 37.000 archivos y que viene en solo bajo 50 GB. Esto va a aumentar a medida que la producción continúa. Esta sincronización tardó 29 minutos en completarse en el momento en que solo se realizaron otras 2 sincronizaciones, que en el punto bajo si se tiene en cuenta que a las 9 a. M. Tendremos más de 50 personas que quieran obtener lo último.
Hemos investigado la E/S de disco y el ancho de banda de red con el departamento de TI; la conclusión fue que el almacenamiento en red se estaba saturando. También estamos registrando estadísticas en una base de datos de sincronizaciones, estos registros muestran que incluso con un puñado de usuarios, obtenemos tasas de transferencia inaceptables.
En lo que se refiere no utilizar clientes off-the-shelf, es una preocupación legal con tener una aplicación como uTorrent instalado en las máquinas de los usuarios, dado que otros elementos pueden ser fácilmente descargado usando ese programa. También queremos tener un flujo de trabajo personalizado para determinar qué compilación desea obtener (por ejemplo, solo PS3 o X360 dependiendo de qué DEVKIT tenga en su escritorio) y tener notificaciones de compilaciones nuevas disponibles, etc. Crear un cliente utilizando MonoTorrent no es la parte que me preocupa
¿Cuál es el tamaño de los archivos que distribuye? ¿Has probado una buena compresión? También puede usar una herramienta de diferencia binaria en comparación con la versión anterior, el parche que será suficiente para casi todo el mundo (otros descargarán el paquete completo). – Guillaume
¿Estás seguro de que cambiar el protocolo/herramienta solucionará el problema? Has hecho cálculos reales sobre lo que intentas distribuir en tu red en comparación con tu hardware, ancho de banda de red, etc. ... Por ejemplo, has verificado la caché del sistema del sistema de archivos (cf: http: //blogs.technet. com/b/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx)? –
No puedo entender por qué no puede usar clientes estables, ¿ejecuta también navegadores web y procesadores de texto internos? – grapefrukt