Facebook mejora Mercurial haciéndolo más rápido que Git

¿Sabías que todo el código de Facebook está alojado en un único repositorio? Según han publicado hace unos días en su blog para desarrollo, esto les llevó a solucionar un grave problema para escalar tan inmenso número de líneas de código (más de 14 millones en 44.000 ficheros) y que no se convirtiera en un grave cuello de botella para el trabajo de sus ingenieros.

Una deuda técnica para que sus desarrolladores pudieran dedicar más tiempo a hacer cosas en lugar de esperar a sus herramientas que les ha llevado a mejorar Mercurial para hacerlo más rápido, superando a Git.

Mercurial más extensible que Git para los propósitos de Facebook

Ni Git ni Mercurial están preparado para manejar un repositorio tan grande como el de Facebook. Todo el código y su historial alcanza un tamaño prohibitivo cuando se almacena en un sistema de control de versiones distribuido cuyo propósito es guardarlo completo en cada repo, en lugar de la última versión o una parte de ramas de un sistema centralizado.

El equipo de Facebook encargado investigó en modificar Git para que pudiera adaptarse a sus necesidades, pero sus conclusiones fueron que Mercurial era más apropiado. El API de mercurial permite operaciones a un nivel más bajo en el código base. Buena parte del código ha sido agregado al proyecto de Mercurial, incluyendo un nuevo algoritmo de grafos y parte de código reescrito en C.

Gestor de cambios en ficheros con Watchman

Uno de los cambios importantes que han llevado a Facebook a usar Mercurial ha sido poder modificar el gestor para comprobar los cambios de los ficheros construyendo su propio monitor para ver que ficheros han cambiado (HgWatchman). Lo cual hace que las operaciones que usan Status como diff, update y commit sean hasta cinco veces más rápidas que en Git. Un hg status de unos 200.000 ficheros pasa de 3 segundos a 0.6 segundos.

Trabajar con largos historiales de cambios con remotefilelog

Otro de los cambios fundamentales ha sido ajustar la carga de trabajo con un largo historial de cambios en los ficheros, intentando mejorar de esa forma operaciones pesadas como clone y pull. Tal como trabajan sistemas distribuidos como Mercurial y Git en cada pull se traen información en de todos los commits desde la última vez, así como los ficheros, lo cual hace pesado el trabajo cuando cada día se modifican miles de ficheros y se agregan cientos de commits.

La extensión desarrollada por Facebook, remotefilelog, cachea las revisiones de ficheros necesarias para nuestros commits locales para poder hacer de forma más eficiente checkout, rebase o commit a cualquiera de nuestros marcadores sin necesidad de conectarse al servidor. Esto combinado con memcache permite que las conexiones los servidores de Mercurial se puedan hacer a una baja latencia y a una alta fiabilidad. Finalmente, los resultados se ven reflejados en un mejora sustancial de los clone y pull usando datos en local grandes rebases de código hasta al doble de velocidad.

Definitivamente, la filosofía de Facebook entorno a sus herramientas y su forma de crear software es admirable por la comunidad Open Source. Conscientes que la mayor parte de sus herramientas provienen del software libre no cesan en mejorar por medio de nuevas librerías, parches y nuevos herramientas, no sólo para sus ingenieros sino para el resto de desarrolladores. Facebook apoya Mercurial, lo que da un gran empujo a servicios como Bitbucket(el eterno competidor de Github) que usan Mercurial ademas de Git, si no echad un vistazo al Bitbucket de Facebook.

Vía | Facebook Engineering Blog Más información | hgwatchman, remotefilelog

Ver todos los comentarios en https://www.genbeta.com

VER 0 Comentario

Portada de Genbeta