La versión original en inglés de este artículo está aquí .Este es el título de una charla de Alex Viscreanu en Moscú Python Conf ++. Dos semanas más antes de la presentación, pero por supuesto, ya le pregunté todo a Alex y, debajo del gato, compartiré spoilers y entre bastidores para preparar el informe: qué tipo de zoológico de código abierto es lo que hace con nuestro código Python y en qué se diferencia de mis camaradas.
- Cuéntame un poco sobre Kiwi, ¿qué haces en la empresa?Kiwi.com es una agencia de viajes en línea con salsa secreta. La compañía fue fundada en la República Checa en 2012 bajo el nombre de Skypicker, y en 2016 el servicio cambió su nombre y se mudó a Kiwi.com. Kiwi.com se encuentra ahora entre los cinco principales agregadores de boletos aéreos de Europa.
Una característica interesante de Kiwi.com para los usuarios es que encontramos opciones de conexión para vuelos de líneas aéreas que generalmente no funcionan juntas, y nos ocupamos de todo tipo de problemas de conexión.
Para calificar nuestra escala, estos son los números sobre Kiwi.com: más de 90,000,000 búsquedas diarias, 25,000 asientos de ventas diarias y más de 15,000,000,000 combinaciones de vuelos disponibles.
En cuanto a mí, soy un desarrollador full-stack, me mudé de España a la República Checa para trabajar en Kiwi.com. Trabajé con Python en el backend, JavaScript y el zoológico de diferentes tipos en la interfaz: Backbone.js, Angular, Vue.js.
En Kiwi.com, me uní al equipo de infraestructura, por lo que principalmente
desarrollo y mantengo herramientas internas para desarrolladores. Este trabajo requiere un conocimiento profundo sobre la gestión de la infraestructura y las herramientas de implementación, creo que podemos decir que en realidad estoy haciendo
DevOps, con un ligero sesgo en la parte de desarrollo .
- ¿Cuántos desarrolladores de Python hay en Kiwi? ¿Para qué proyectos estás usando Python?Tenemos más de
350 desarrolladores , 200 de ellos usan Python todos los días. Kiwi.com tiene una
arquitectura de microservicios , y cada equipo es responsable de varios servicios. No creo que se pueda decir que uno de ellos es el más importante, o que todos los desarrolladores están trabajando en una cosa. Además, el backend tiene un código cerrado, y no puedo hablar demasiado al respecto.
Pero tenemos algunos proyectos interesantes de código abierto disponibles en GitHub:
- Phoenix : una herramienta para notificaciones en Slack sobre incidentes;
- Crane : un script para la implementación en Rancher directamente desde GitLab;
- El zoológico es un conjunto de servicios más pequeños que, sin embargo, pueden ser muy útiles.
- ¿Qué pasa con CI / CD y la infraestructura de implementación?Utilizamos
GitLab como repositorio de código fuente y, por supuesto,
GitLab CI se integra mejor con él. Esta es una solución bastante buena, es flexible y le permite construir tuberías productivas. Y utilizando un montón de GitLab CI y nuestra herramienta Crane, podemos implementar proyectos en diferentes entornos con solo hacer clic en un botón (o de forma totalmente automática si tiene las agallas).
Proporcionamos a todos los CI una flota de instancias de escala automática EC2. Debido a esto, puede agregar energía fácilmente según sea necesario y ahorrar sin tener servidores no utilizados durante las horas de inactividad.
Estamos organizando la infraestructura con la ayuda de
Rancher , que se ha demostrado perfectamente en nuestra carga de trabajo y en nuestras condiciones.
- Parece que prefieres Python. ¿Utiliza otros idiomas y para qué?El segundo lenguaje más utilizado es
JavaScript , principalmente para la interfaz de usuario y la API GraphQL. Además, hay aplicaciones de Kotlin y Java para Android; Swift y Objective-C para iOS; GoLang se usa en algunos lugares para un montón de servicios, y C / C ++ para el motor de búsqueda de vuelos.
- Mencionaste el proyecto de código abierto The Zoo. ¿Por qué son los proyectos de código abierto de Kiwi? ¿Cuál es tu beneficio?Como muchas otras compañías, utilizamos código abierto en casi todo lo que desarrollamos. Puede sonar como un cliché, pero cuando obtienes tanto, sería bueno dar algo a cambio.
Es una contribución al conocimiento colectivo que nos ayuda a todos a avanzar.
Además del hecho de que nos beneficiaremos de lo que publicamos en código abierto, también es útil para nosotros. Otras personas pueden ver el producto desde un ángulo completamente diferente y ofrecer algo que no pensamos ni sospechamos.
- Cuéntanos un poco más sobre el zoológico. ¿Cuántos repositorios revisas con él?Tenemos aproximadamente 1.300 repositorios en GitLab interno y unos 100 en GitHub público. Total cercano a
1500 .
Escaneamos cada uno de nuestros repositorios, incluso si el servicio no está registrado en The Zoo. La idea es que, en primer lugar, cuanto más analítica, más precisas sean las conclusiones, y en segundo lugar, cuando en el futuro el servicio se conecte a The Zoo, ya tendremos datos sobre el comportamiento pasado.
- ¡Un número impresionante! ¿Y cuántos errores encuentras habitualmente? ¿Recuerdas alguna captura especial?Ahora en nuestra base de datos hay aproximadamente
26,000 problemas encontrados , es decir, alrededor de 20 problemas por proyecto. Es cierto que la mayoría de ellos no son "problemas-problemas", sino simplemente recomendaciones.
Es genial cuando puede detectar automáticamente errores significativos.
Por lo general, aparece una nueva verificación en The Zoo después de que se haya descubierto algún problema en uno de los repositorios. Si nos parece que esto también puede aparecer en otros lugares, comenzamos una nueva verificación en The Zoo. Solo para facilitar la determinación de los proyectos afectados y asegurarnos de que podamos solucionar el error en todas partes lo antes posible.
No debe esperar que The Zoo encuentre infracciones críticas de seguridad o problemas complejos de código. Tenemos otras herramientas para ellos, e incluso si los implementamos en la plataforma, vale la pena detectar errores críticos incluso antes de The Zoo. Más bien, es necesario para que se respete una sola directriz en todos los repositorios.
- Es decir, ¿El zoológico como tal no tiene ninguna verificación predeterminada? ¿Lo necesita para que sea conveniente para el desarrollador escribir los cheques que quiera? Has creado The Zoo y estás probando mucho de todo. ¿Puedes dar algunos ejemplos?Es cierto que
The Zoo es una plataforma en la que todos pueden escribir su propia prueba. Nuestras comprobaciones son adecuadas para nuestra configuración bastante específica, pero también queremos abrirlas.
Como dije, los controles se basan en los problemas encontrados en nuestros servicios. Van desde recomendaciones README hasta comprobaciones de configuración más complejas, como nginx.
- ¡Suena como un "must have" para cualquier gran empresa! ¿Hablará de esto con más detalle en su informe sobre Moscow Python Conf ++?Creo que será más interesante cómo hacer que sea fácil y rápido ejecutar pruebas en todos los repositorios. Pero, por supuesto, le contaré lo que verificamos en Kiwi.com. Espero que esto sea útil para los invitados a la conferencia.
Insto a todos a probar The Zoo, jugar con él, escribir sus propios cheques y así ampliar la base de conocimiento general. Estoy seguro de que en él puedes encontrar algo adecuado para ti.
- gracias! Finalmente, si pudieras retroceder 5 años, ¿qué consejo sobre Python te darías?No es fácil ... Empecé a escribir en Python 3 hace solo un año y medio, pero para mí en el pasado, recomendaría comenzar lo antes posible.
Python 3 es una evolución natural del lenguaje ; define los conceptos básicos. Ahora nunca volvería a Python 2. El punto no es solo que el final de su soporte está cerca, sino que en su mayor parte ya estoy acostumbrado a las características de la nueva versión.
De regreso en el tiempo, tomaba el equipaje de algunas buenas bibliotecas que conocí durante ese tiempo, y algunas buenas prácticas que todavía estoy aprendiendo.
Ven el 5 de abril a Moscow Python Conf ++ para conocer los detalles de trabajar con este interesante proyecto de código abierto y, quizás, para tomar prestada la experiencia de Kiwi en algo.