Para un conjunto de flujos de trabajo, usamos runners de capacidad media. Y eso estaría dentro de nosotros. Eso resolvió una parte del problema, pero abrió otra parte del problema. Así que, tenemos runners autohospedados, todo bien. Y dado que estamos usando NX, tenemos la ventaja de NX cache. Así que, eso estaría capturando la salida de compilación, la salida de pruebas, todo bien. Y el caché vive en GitHub. Así que, autohospedado en nuestra propia instancia de AWS en EC2 y el caché, lo que tenemos en GitHub. Así que, hay una conexión de red en curso para cada commit en el CI entre GitHub y nuestra propia instancia de AWS EC2. ¿Es bueno? No, ciertamente no. Porque había mucha comunicación de red entre ellos y eso realmente aumentó el costo. Lo que pensamos que reduciría en realidad no se redujo, más bien se anuló.
Luego investigamos más y pensamos, está bien, eso está bien. Pero, ¿por qué no tener este caché también dentro de nosotros? Así que, sí, teníamos, pudimos, configuramos un bucket S3 que podría usarse como caché para todos estos propósitos. Y este bucket S3 viviría en la misma región donde alojamos nuestra instancia EC2. Así que, ahora la comunicación se reduciría, el tiempo de procesamiento se reduciría, y por lo tanto el costo también se reduce. Así que, con esto, no solo se redujo el tiempo de CI, sino que también pudimos reducir el costo. Ese es el bono que tuvimos con esto. Así que, sí, tenemos un CI. Antes teníamos runners alojados en GitHub y caché, y ahora nos movemos hacia un runner EC2 con caché S3 en la misma región. Perfecto.
Y ahora pasemos al siguiente nivel, Explosión de Compilación de TypeScript. Como ya les dije, estábamos compilando todos nuestros paquetes antes incluso de comenzar con el despliegue. Pero de todos modos, aquí, había un problema silencioso, que estuvo presente durante años en nuestra tubería de CI. El primer problema es Type Explosion. Entonces, ¿qué es Type Explosion? Déjenme darles un ejemplo. Seguro, como, todos ustedes, quiero decir, todas las empresas tendrían sus propios componentes de tipografía para ellos para el frontend web. Así que, este componente de tipografía, tenemos un escenario donde el equipo de desarrollo puede realmente extender este componente de tipografía a un elemento definido por el usuario específico, lo que sea que quieran dirigir. Y este específico elemento definido por el usuario puede ser genérico. No podemos definir nada en él.
Comments