Todos los días, miles de desarrolladores en Meta trabajan con repositorios con millones de archivos. Estos desarrolladores necesitan herramientas que los ayuden en cada paso de su flujo de trabajo mientras trabajan a escala extrema. En este artículo, echaremos un vistazo a algunas herramientas en el proceso de desarrollo. Y, como beneficio adicional, los que mencionamos a continuación son de código abierto, por lo que puede probarlos usted mismo.
Retoño: control de versiones de escalado
Planta de semillero es un sistema de control de versiones que puede escalar a tamaños enormes, pero también enfatiza la usabilidad. Sapling tiene tres componentes principales: servidor, cliente y sistema de archivos virtual.
El servidor almacena todos los datos y es una combinación inteligente de formatos de almacenamiento inteligente, protocolos por cable y algoritmos. implementado principalmente en Rust Y diseñado a escala.
Luego, el cliente interactúa con ese servidor, proporcionando todas las operaciones familiares (pago, rebase, compromiso, cambio, etc.). Además, el cliente también puede comunicarse con el servidor git, lo que significa que se puede trabajar en los repositorios de código abierto de GitHub utilizando nuestro Lanzamiento de código abierto Sapling.
El último componente es el sistema de archivos virtual. Al revisar un repositorio de nuestra escala, la E/S del disco solo para escribir todos los archivos puede llevar una cantidad de tiempo significativa. Una solución rara taquilla, donde el desarrollador declara de antemano qué subconjunto del repositorio quiere ver. Una alternativa más ergonómica es EdenFS, que comprueba todo en unos segundos, pero solo descarga archivos del servidor cuando se accede a ellos.
Buck2: Sistema de construcción
Después de hacer cambios, muchos desarrolladores en Meta usan dólar2 para compilar los resultados y comprobar sus cambios. Buck2 está diseñado para funcionar a escala, admite el almacenamiento en caché y la ejecución remotos para que los desarrolladores puedan compartir las compilaciones entre sí, y un desarrollador puede tener acceso a miles de máquinas para ejecutar compilaciones en paralelo. Buck2 también está diseñado para admitir múltiples lenguajes de programación al mismo tiempo, por lo que si desea que su programa OCaml dependa de una biblioteca Rust que usa una biblioteca C ++ cuyo código fuente fue generado por Erlang, esto funcionará bien.
Buck2 funciona bien sin Sapling, pero tiene características de diseño específicas para habilitar Sapling y EdenFS. Buck2 usa Watchman para ver qué archivos han cambiado, y Watchman admite EdenFS para que pueda integrarse fácilmente con archivos que no están en el disco. Buck2 también puede usar operaciones especiales de EdenFS para acceder a archivos que no sean de disco, lo que optimiza el rendimiento en sistemas donde los sistemas de archivos virtuales pueden ser más lentos.
Infer, RacerD y Jest: pruebas y análisis estático
Las pruebas escritas a mano y el análisis estático juegan un papel importante para garantizar que todo nuestro código funcione correctamente. Trabajar con la cantidad de código que hacemos en Meta significa que necesitamos herramientas que brinden una señal de alta calidad y lo hagan muy rápido.
Para el análisis estático general, usamos una plataforma llamada obtener una conclusióncual interprocedimiento y admite varios idiomas, incluidos Java y C ++. También disponemos de herramientas de análisis más especializadas como CorredorD, que detecta errores de concurrencia en Java. RacerD desempeñó un papel importante en nuestro proyecto en mover la fuente de noticias de Facebook en Android de hilo único a hilo múltiple.
También disponemos de entornos de prueba para idiomas específicos. Por ejemplo, Broma es nuestro marco de prueba de Javascript. En 2022 hemos comprometido oficialmente a Jest con la Fundación OpenJS para apoyar aún más su crecimiento en la industria en general.
Finalmente, hay herramientas que son intermedias entre el análisis estático y las pruebas manuales. Nuestro herramienta Sapienzpor ejemplo, prueba automáticamente las aplicaciones móviles, lo que permite a los desarrolladores simular las interacciones de los usuarios para detectar fallas y otros posibles problemas.
Obtenga más información sobre el flujo de trabajo del desarrollador Meta
Además de nuestras herramientas de código abierto, nuestros desarrolladores también utilizan una serie de herramientas patentadas en sus flujos de trabajo diarios. Por ejemplo, Phabricator (Phab para abreviar), nuestra herramienta de CI y validación, ayuda a nuestros desarrolladores a ver y enviar montones de diferencias. Puede obtener más información sobre estas herramientas (junto con las descritas anteriormente) en el artículo en Flujo de trabajo de metadesarrollador.