"¿Sabían que el backend de #MetaThreads fue construido con #Python 3.10?
Se ejecuta sobre el fork #Cinder de Instagram, y este fork incluye varias funciones interesantes que no están en Python 3.10 estándar, como un compilador JIT, módulos de carga diferida y módulos estáticos precompilados."
1 comentarios
Comentarios de Hacker News
Resulta bastante irónico para quienes dicen que “Python no es lo suficientemente rápido para un backend de producción”. Después de todo, la misma empresa ha operado la red social más grande del mundo hecha con PHP + MySQL
La máquina virtual que hace el JIT también está completamente en C++, y su distribución de MySQL es un fork interno fuertemente modificado para escalar. Incluye separación entre almacenamiento y cómputo, sharding, un motor de almacenamiento basado en RocksDB en lugar de InnoDB, y cosas como Raft para replicación síncrona
Realmente invirtieron una cantidad enorme de ingeniería excelente para hacer escalable la infraestructura de backend
Material de referencia útil:
[1] https://engineering.fb.com/2016/08/31/core-data/myrocks-a-sp...
[2] https://research.facebook.com/file/529018501538081/hhvm-jit-...
[3] https://research.facebook.com/file/700800348487709/HHVM_ICPE...
Piensa en helpers funcionales, ejecución asíncrona sobre miles de núcleos y cosas como árboles de expansión que cruzaban centros de datos usando SSH. Como dato adicional, muchas de las buenas herramientas que yo usaba las creó Evan Priestley, quien también hizo Phabricator y varios sistemas muy potentes
“Está corriendo sobre el fork Cinder de Instagram, que incluye JIT, módulos con carga diferida, módulos estáticos precompilados y varios cambios interesantes frente a Python 3.10 puro”
Eso salió en el tuit
En lo personal, no me importa qué lenguaje use la gente. Todos sabemos que si hay dinero, puedes simplemente agregar más servidores. Bueno, hasta que el CFO y el CTO deciden que la siguiente gran prioridad es “reducir costos” por la desaceleración económica
Me sorprende que en 2023 todavía se discuta la “preparación para producción” de los lenguajes de programación principales. Parece una competencia de “niños cool”
Las partes que de verdad requieren mucho rendimiento están en varios servicios de agregación y recomendación basados en C++. Pero el servidor web, correctamente, es Django
¿Por qué usarían Django? Lo he usado en proyectos pequeños, pero no me pareció tan rápido y pensé que no encajaría en una app tan grande. Me gustaría conocer las ventajas y desventajas
¿Por qué no hacerlo en C++ o Rust? Aunque las partes pesadas estén en un lenguaje compilado, ¿Python no terminaría limitando el tiempo de respuesta? Puede que sea una pregunta ingenua de aficionado
“Está corriendo sobre el fork Cinder de Instagram, que incluye JIT, módulos con carga diferida, módulos estáticos precompilados y varios cambios interesantes frente a Python 3.10 puro”
O sea, no es simplemente Python 3.10 a secas
No sé si Facebook quiere seguir manteniendo el fork, pero del lado de CPython están abiertos a integrar ese tipo de funciones si tienen sentido
Es irónico que un artículo sobre el backend de Threads esté publicado en Twitter
¿Entendieron? Threads, threading… bueno, ya me voy
Incluso si hubiera sido una publicación de Threads, probablemente no se habría podido enviar a HN
Aún no está abierto a la web. Dicen que en algún momento lo estará
Está claro que el backend se superpone hasta cierto punto. https://www.threads.net/t/C es la primera publicación de Instagram, pero también aparece en Threads, y tiene exactamente la misma cantidad de likes que en Instagram
Pero en https://www.threads.net/@kevin dice que no hay threads
Python es solo el servidor web. Los componentes realmente sensibles al rendimiento, como el proxy de borde, los balanceadores de carga, los servicios backend, las bases de datos, el caché y los servicios de almacenamiento, en su mayoría están en C++
He trabajado con Cinder y con servidores web. Puedo responder preguntas técnicas :)
Pero aquí la latencia era un gran problema y, como siempre, se bajó la prioridad de la optimización para poder llegar al MVP
Así que me pregunto si Cinder puede usarse para optimizar streaming de datos en tiempo real, o si esta pregunta en sí significa que no entendí el caso de uso
Como referencia, también usábamos Django, aunque ahora me pregunto si debimos haber cambiado a FastAPI. Esa es otra pregunta aparte
Me gustaría saber más sobre el rollout. Se están sumando muchísimo más de 1 millón de usuarios nuevos por hora, lo cual es bastante impresionante
Aun así, seguro hay muchos detalles interesantes que valdría la pena escuchar
Unos cuantos millones de usuarios nuevos ni siquiera representan el 0.1% del total. Está totalmente dentro de un rango de variación previsible
Nunca hay que olvidar https://github.com/twitter/the-algorithm/pull/447
Threads reutiliza el backend/API de Instagram. Instagram fue basado en Python desde el principio, y por eso Threads también terminó usando Python
Eso no significa que debas elegir Python al crear una app nueva como esta cuando existen alternativas que no requieren un fork interno. Si lees la publicación completa, se entiende bastante fácil, pero la interfaz de Hacker News de “leer solo el título” parece estar distorsionándolo