Si Python ‘no escala’, ¿por qué se basa Quora en él?

“¿Por qué Python no escalaría?” Depende de lo que quieras decir con escala:

  1. Si escalar significa escribir un sistema grande y complejo , no hay nada que impida a Python escalar para esto, si tienes un pequeño equipo de grandes desarrolladores.
  2. Si la escala significa escribir un sistema con un número grande y cambiante de desarrolladores que debe mantenerse con vida durante muchos años, hay varios problemas con Python que hicieron que compañías como Google decidan no usarlo regularmente para servicios de producción.

Permítanme enumerar algunas de las razones de (2):

  • Mecanografía estática . Claro que los desarrolladores “reales” pueden no necesitar tipeo estático, pero si terminas en una situación en la que un sistema necesita una corrección crítica de errores y los desarrolladores principales ya no están o están de vacaciones, y la solución debe implementarse en millones de usuarios, cualquier análisis estático antes del tiempo de ejecución es extremadamente útil.
  • Interfaz nativa débil . No hay mucha protección en Python si algo sale mal en el nivel de la interfaz nativa, tanto en las bibliotecas estándar como en sus extensiones (en comparación con JNI, por ejemplo). Incrustar código nativo es un requisito común para aplicaciones grandes. Python deja todos los caminos abiertos para disparar en tu pie con código nativo.
  • Sintaxis ambigua . La forma en que funciona la sintaxis basada en sangría de Python es bastante peligrosa. Sé de casos en los que no se ejecutó un caso de prueba crítico y, por lo tanto, un error podría filtrarse en la producción porque la prueba no estaba destinada a nivel de clase sino a nivel global. Un pequeño pero molesto detalle.
  • Velocidad de ejecución . Python no se ejecuta tan rápido como dice Java. En general, eso está bien porque los algoritmos inteligentes son en muchos casos más importantes para la velocidad que el poder de procesamiento puro, sin embargo, los desarrolladores inexpertos pueden introducir fácilmente regresiones de rendimiento significativas con Python.
  • Programación asincrónica . Si bien Python puede tener excelentes bibliotecas para la programación secuencial, la programación asincrónica no tiene realmente una metodología bien desarrollada. Una vez más, un gran programador puede hacer lo que necesita, pero considere el caso de alguien que no esté familiarizado con el sistema y / o el idioma.
  • … y más

Entonces, la pregunta es realmente sobre qué tipo de proceso de desarrollo observas, no la escala del sistema. El desarrollo de software es en la mayoría de los casos un proceso social que está menos dominado por la productividad medible en líneas de código que por la capacidad de coordinar un grupo más grande de personas diversas (y a menudo promedio) para trabajar juntas en un producto de alta calidad.

Después de 30 años en la industria, mi punto de vista aquí ciertamente ha cambiado. Cuando comencé mi carrera, la elegancia y brevedad del lenguaje de programación era la prioridad número uno para mí. Así que tengo plena comprensión de una posición diferente sobre este tema. Sin embargo, para modificar una cita famosa:

Si no está interesado en la brevedad y elegancia del lenguaje de programación con 25, no tiene pasión por la disciplina. Si todavía tienes 45 años, no tienes cerebro. (O simplemente trabajas en Academics o en una startup con un código de corta duración de una sola vez).

Cada idioma (moderno decente) puede escalar. La diferencia está en la arquitectura alentada por el lenguaje y la complejidad de la arquitectura resultante.

La mayoría de los frameworks de Python que he visto son sincrónicos: una sola interacción con un usuario debe completarse antes de que ese hilo pueda manejar a otro usuario. Esto también es cierto para muchos otros lenguajes de servidor: PHP, Java y Ruby fomentan o requieren ese comportamiento.

Entonces, para escalar verticalmente (es decir, en un solo sistema) necesita ejecutar más hilos. Pero los subprocesos del sistema operativo son muy costosos, y el cambio de tareas en sí mismo consumirá gran parte del rendimiento del sistema.

Los lenguajes que fomentan el desarrollo asincrónico, lo que significa que pueden cambiar entre tareas “ligeras” en un solo hilo del sistema operativo, pueden escalar verticalmente para manejar muchas más conexiones en un solo servidor. Los idiomas que admiten este modo incluyen JavaScript / NodeJS, Elixir / Erlang, Lua y Go.

Tenga en cuenta que la diferencia solo es relevante para las tareas del servidor que no requieren un procesador intensivo. Si su servidor está haciendo un cálculo de aprendizaje automático para cada usuario, los hilos “ligeros” no le comprarán mucho, en todo caso.

Entonces, aunque la respuesta corta es que Python puede escalar, para muchas cargas de trabajo comunes, un backend de Python requerirá una escala horizontal mucho mayor que una que admita subprocesos “ligeros”. He visto que las cargas de trabajo de Python toman literalmente 50 veces más servidores de los que requeriría un backend NodeJS equivalente, por ejemplo.

Hablé con un CTO que estaba gastando más de $ 15k por mes para alojar su backend de Python basado en una carga de trabajo que unos pocos servidores de NodeJS de $ 20 / mes habrían manejado sin sudar. Han crecido desde entonces y redujeron drásticamente sus costos de alojamiento.

Pero, de nuevo, depende mucho de lo que esté haciendo su servidor. Si la arquitectura está bien diseñada, puede escalar casi cualquier cosa. La forma más fácil de escalar un servidor Python podría ser colocarlo detrás de un servidor NodeJS como microservicios, pero siempre hay una manera.

EDITAR : Acabo de encontrar uvloop: una red de Python increíblemente rápida, que brinda una red asincrónica rápida a Python. Con eso, podría escribir Python que se escala en el orden de los otros lenguajes asíncronos que mencioné. Pero la mayoría de Python no usa ese enfoque, en mi experiencia.

Adam D’Angelo, fundador de Quora, responde esta pregunta en ¿Por qué Quora eligió Python para su desarrollo?

Resumiría su respuesta como:

  • A los fundadores no les gustaba Microsoft, por lo que C # estaba fuera.
  • Java lleva más tiempo y es más difícil de escribir, y no funciona bien con cosas que no son de Java.
  • OCaml y Haskell eran demasiado difíciles de escribir y no tenían suficiente soporte de biblioteca.
  • Ya conocían Python, y compensarían su falta de tipos con pruebas unitarias, y lo complementarían con C ++ para el código de alta velocidad en el backend.

Estoy de acuerdo con su decisión. El problema principal es que el tiempo del servidor es más barato que el tiempo del desarrollador.

Un lenguaje con script como Python (o PHP, Perl, Ruby, etc.) tarda aproximadamente la mitad de tiempo en programarse que un código de bytes o un lenguaje compilado como Java (o C, C ++, etc.).

Entonces, si tiene un equipo de 10 desarrolladores, cada uno pagó $ 100K, entonces está pagando $ 1M en salarios. Si reemplaza Python con Java, ahora necesita contratar a 10 desarrolladores más y pagar otros $ 1M. ¿A cambio de qué, ahorrando $ 50K de tiempo de servidor? ¡Obviamente, eso no vale la pena!

Los fundadores ya conocían Python y estaban listos para seguirlo. Querían llegar al mercado lo antes posible para tener una ventaja temprana. Y sabían que podían averiguar dónde optimizar una vez que el sitio ya estaba en producción y sus características habían sido decididas. En ese momento, podrían cambiar a C ++ en el back-end.

Este es un buen ejemplo para otras startups. La combinación de tiempo de desarrollo rápido y flexibilidad en el front end y tiempo de servicio rápido en el backend es un buen ejemplo para imitar.

Una pregunta incorrecta no puede tener una respuesta correcta, especialmente el tipo de una línea que vemos prominentemente hoy en día.

Python es un lenguaje. PHP es un lenguaje. ADA es un idioma. Bla, bla, es un idioma.

Occam es un idioma, Scala es un idioma, Erlang es un idioma.

Algunos de estos lenguajes tienen simultaneidad incorporada, otros no.

Sin embargo, aún puede crear infraestructuras de escalamiento asombroso con lenguajes de concurrencia no integrados y fallas terribles, sistemas sin escalamiento con lenguajes de concurrencia.

Lo que más importa es la infraestructura subyacente, generalmente basada en grupos de servidores, pero también puede tratarse de la potencia informática distribuida.

Hay ciertas cosas que son difíciles de hacer, sea cual sea el idioma que les des.

Solo imagine algo tan trivial como asignar el siguiente número de factura único a una fila de la base de datos. En algunos países, no solo puede asignar números de factura únicos, deben ser numéricos y, por ley, no puede “omitir” números.

Esta es una de las cosas más antiguas y básicas en contabilidad, es una de las cosas embarazosamente fáciles de hacer en una aplicación de usuario único.

Sin embargo, intente asignar un incremento contiguo único y garantizado en una fila de la base de datos que se encuentra en una granja de 100 servidores paralelos con 20000 usuarios que solicitan constantemente nuevos números.
Peor aún, imagine que los contadores exigen (¡sucede!) Que el número de la factura esté disponible y generado antes de ingresar los datos de la factura y … pueden decidir cancelar la creación de la factura en cualquier momento. Mientras tanto, es posible que se hayan generado más de 100 números de factura ¡ Y usted no puede tener “agujeros” en la numeración!

En general, siempre que tenga una condición de carrera, un “semáforo”, “solo 1 recurso para compartir entre todos” o situaciones similares, lo que importa son las opciones de arquitectura y diseño, no el idioma. Por ejemplo, es posible que deba usar una base de datos que no sea compatible con la generación de números incrementales de procesos incorporados / almacenados. Algunos programadores bloquearían exclusivamente una mesa de contadores … y luego todo comenzará dependiendo de si y qué tan rápido se libera ese bloqueo.

Un lenguaje puede o no ayudar a implementar estas arquitecturas de una manera más fácil, pero eso es todo.

Para terminar con esto primero, Python escala, y bastante bien. Sin embargo, es de uso general: si comienza a compararlo con los principales idiomas para funciones específicas , se pierde sin lugar a dudas.

Sin embargo, ningún proyecto se basa en una sola característica. Es por eso que python se usa a menudo para proyectos como Quora: porque puede hacer cualquier cosa lo suficientemente bien. Lo más importante es que Python es increíblemente fácil de escribir y extender. Es multi-paradigma (funcional, orientado a objetos, …) por lo que prácticamente nunca tiene que trabajar alrededor del lenguaje en sí. Su modelo de datos permite una fácil abstracción y modularización del código. El ecosistema de Python es maduro, extenso y simplemente masivo. Etcétera…

Entonces, ¿por qué Python a menudo se clasifica como no adecuado para el escalado o el rendimiento? Hay dos deficiencias principales de su implementación de referencia, CPython:

  • Es bastante lento para procesar operaciones intensivas. En comparación con C ++, Java y otros, se encuentra que los programas que procesan números son aproximadamente 100 veces más lentos. Esto se debe a la naturaleza dinámica de Python y al modelo de datos abstractos: hay poco espacio para las “optimizaciones del compilador”, por lo que todo se hace en tiempo de ejecución.
    ¡Simplemente agregar dos atributos de instancia a.foo + b.foo se traduce en varias docenas de instrucciones! Si proviene de lenguajes compilados y escribe código Python como si fuera a escribir código C ++, su programa funcionará mal.
  • Su multihilo no es multinúcleo. Los subprocesos de CPython funcionan de forma independiente, pero no simultáneamente. Un solo proceso con 10 hilos todavía usa solo un núcleo. De hecho, el uso de hilos hace que los programas sean más lentos en general. Esto se debe a un GIL (un concepto no exclusivo de Python) que impide que el intérprete haga varias cosas a la vez.
    En mi opinión, este es el mayor inconveniente de CPython. Significa que tiene que hacer multiprocesamiento para cualquier tarea paralela intensiva de procesamiento. Si bien es mucho más simple que en otros idiomas, es mucho más complejo que el subprocesamiento múltiple.

Ahora, si Python es lento y hacerlo más rápido es tan complicado, ¿por qué alguien lo usa? Bueno, a decir verdad, no importa fuera de casos muy específicos:

  • Python permite usar bibliotecas fácilmente. El 99% de su programa no procesará de forma intensiva; el 1% puede hacerlo una biblioteca C precompilada. Debido a la abstracción de Python, la mayoría de las personas ni siquiera se darán cuenta de esto.
  • Servicios como Quora no se ejecutan en un servidor, abarcan docenas o cientos. Multi-host implica automáticamente multiproceso.
  • El ecosistema de Python eliminará esas deficiencias.
  • Cython ya le permite escribir bibliotecas C usando (un superconjunto de) python. El backend Bob pasa un día aprendiendo Cython y compila su código crítico. El frontend Frank se da cuenta de que ahora todo es rápido.
  • PyPy es un intérprete alternativo para CPython. Hace compilación JIT, que puede vencer a las bibliotecas e idiomas compilados. Puede admitir memoria transaccional en el futuro, eliminando el GIL, permitiendo hilos verdaderos.

Me pregunto cuántas veces me han hecho esa pregunta a lo largo de los años. A menudo, ni siquiera tiene la forma de una pregunta, sino que se afirma enfáticamente; “Python no escala”. Este puede ser el comienzo de largas y acaloradas discusiones que involucran Global Interpreter Locks, intérpretes vs. compiladores, tipeo dinámico vs. estático, etc. Estas discusiones rara vez terminan satisfactoriamente para cualquiera de las partes involucradas. Y rara vez se cambia alguna opinión como resultado.

Entonces, ¿Python escala?

Bueno, YouTube está escrito principalmente en Python. Dropbox está escrito casi en su totalidad en Python. Reddit Quora Disqus. Proveedor de amigos. Estos son sitios enormes, que manejan miles de millones de visitas al día. Están escritos en Python. Por lo tanto, Python escala.

Sí, pero ¿qué pasa con esa aplicación web que escribí eso una vez? Alojado en un VPS barato, sobreuscrito, ejecutando CGI directo que habla con una base de datos remota de MySQL que se ejecuta en una máquina virtual en mi Mac libro Air. Esa cosa se cayó como un marinero borracho cuando invité a algunos de mis amigos a echarle un vistazo. Así que sí. Olvida lo que dije antes. Obviamente Python no escala.

La verdad es que es la pregunta equivocada. Las cosas que permiten que Dropbox almacene un millón de archivos cada 15 minutos tienen poco que ver con Python, al igual que las cosas que causaron el fallo de mi débil aplicación web tuvieron poco que ver con Python. Tiene que ver con la arquitectura general de la aplicación. Cómo se comparten las bases de datos, qué tan flojos o ajustados se han acoplado los componentes, cómo supervisa y cómo reacciona a los datos que le proporciona su supervisión. Y muchas otras cosas. Pero tiene que lidiar con esos problemas sin importar en qué idioma escriba el sistema.

Ninguna elección razonable del lenguaje de la computadora garantizará su éxito o su fracaso. Elija el que le resulte más productivo y concéntrese en diseñar correctamente su aplicación.

Por lo general, cuando el software no escala, no es por el lenguaje de programación. Por lo general, tiene que ver con la forma en que alguien diseña su código. Hay muchos ejemplos exitosos del uso de Python en proyectos a gran escala como Youtube (mil millones de visitantes únicos cada mes), Dropbox, Reddit, Instagram, Yelp y EVE Online, por nombrar algunos.

El código de Python es limpio y fácil de leer. Como mencionó Les Matheson, ofrece un grado de flexibilidad que puede satisfacer las necesidades de cualquier trabajo que esté tratando de hacer. Esto lo convierte en un excelente lenguaje de programación para un producto como Quora (que está cerca de admitir 100 millones de usuarios únicos cada mes). En general, buena escala de patrones de diseño. Malos patrones de diseño no.

Gracias por A2A

Python es un lenguaje diseñado para hacer las cosas rápidamente. Si necesita hacer prototipos, Python es una buena opción y para muchos propósitos la velocidad de Python es suficiente.

Siempre hay una forma de escalar una aplicación: más servidores. Sí, esto es más costoso que tener un idioma más rápido. Pero si ese lenguaje más rápido te permite iterar más lento sobre tu producto, necesitas más desarrolladores para lograr la misma velocidad de iteración en tu código y los desarrolladores suelen ser mucho más caros. Además, un desarrollo más rápido es clave al crear una nueva aplicación. Puede lograr un ciclo de retroalimentación más rápido.

Python no es una mala elección. Sí, hoy hay mejores opciones, pero en el momento en que comenzó Quora fue una opción razonable y tan pronto como tomó una decisión con respecto a una tecnología, es difícil cambiar a otra cosa.

Ya respondí una pregunta que se superpone con esta, así que ve a verla. ¿Qué es mejor, Python o Erlang? ¿Para qué es adecuado cada uno?

Lo primero es lo primero, hay tres tipos principales de escala cuando se trata de software. Complejidad del código (se traduce en costo de mantenimiento), escala vertical y escala horizontal. Asumiré la escala horizontal (agregando más máquinas) y la complejidad es lo que quisiste decir aquí.

Python no fue diseñado para escalar horizontalmente o en complejidad. Fue diseñado para pequeñas aplicaciones en una sola máquina. La mayoría de sus características están orientadas a esa idea. Cuando alguien dice que no escala, generalmente no significa que no puede escalar, pero que no proporciona una buena base para escalar tanto en complejidad como horizontalmente.

Lo que hace que el software sea escalable es la arquitectura, no el material (un lenguaje de programación es un material). Si desea escalar, debe cambiar a tener muchos servicios pequeños que se comunican con el paso de mensajes. Hay mucho más que eso, por supuesto, pero realmente no quiero entrar en demasiados detalles aquí.

Aquí hay un ejemplo concreto. Imagine por un momento que quiere servir a 100,000,000 usuarios al mismo tiempo. Ya sabe que una sola máquina no puede lograrlo. Entonces tiene 100 servidores que atienden a 1,000,000 de usuarios cada uno. Pensando que tienes una gran arquitectura, la pones en producción. Tiene un error raro que hace que el código del servidor se bloquee, se detenga o se detenga. El problema es que cada vez que esto sucede, 999,999 usuarios que no tuvieron nada que ver con la falla se desconectan también porque todos están usando el mismo proceso. Por lo tanto, concluye que necesita un proceso separado para cada conexión de usuario para que una falla en una sesión no pueda afectar a otras. ¡Desafortunadamente descubres después de una gran cantidad de ajustes que tu nueva arquitectura solo puede manejar aproximadamente 50,000 usuarios al mismo tiempo! Por lo tanto, necesitará una sala llena de servidores para esta nueva arquitectura. Alternativamente, podría invertir mucho más dinero en pruebas. Como solución rápida, tiene 1,000 procesos cada uno manejando 1,000 usuarios.

Después de esta experiencia y quizás de muchos otros problemas que piensas para ti mismo “debe haber una mejor manera de hacerlo” y después de mucha investigación descubres Erlang y Elixir que están diseñados para la escalabilidad y los problemas asociados con él.

En resumen, Python puede escalar, pero el costo de hacerlo es más alto que simplemente usar la herramienta correcta en primer lugar.

Como desarrolladores de software, tendemos a entusiasmarnos con las tecnologías (a veces incluso nos volvemos religiosos y defensivos). A veces construimos cosas que terminan siendo exitosas, esto nos obliga a una nueva arquitectura, pero migrar a un nuevo idioma es mucho más difícil y no siempre es factible. Usar la herramienta correcta desde el principio requiere sabiduría de éxitos anteriores. Es por eso que tantos sistemas a gran escala están utilizando materiales no diseñados para escalar.

Así que no asumas porque alguien es capaz de hacer malabarismos con los cuchillos con las manos desnudas que tú también puedes. A veces es mejor hacer malabares con las naranjas, los errores serán menos costosos.

La escala puede depender mucho del idioma, pero “Escalar” tiene muchos significados. Un significado del escalado es si una aplicación puede o no manejar una mayor demanda replicando instalaciones. Las aplicaciones escritas cuidadosamente con las configuraciones de servidor adecuadas pueden hacer esto, para casi cualquier idioma, incluido python. Luego hay una escala para un procesamiento más rápido de más datos para una sola instancia de una aplicación. También hay escala para aumentar el tamaño y la complejidad del código. Python no es un buen lenguaje para los dos últimos tipos de escalado. Décadas de experiencia e investigación en la industria han demostrado que la tipificación estática es de gran valor en estos tipos de escalado, ya que permite que los compiladores y los tiempos de ejecución realicen tipos de optimización que solo se pueden hacer conociendo los tipos de variables. Además, la gestión de código y la refactorización suelen ser mucho más fáciles con la escritura estática. Si necesita escribir una aplicación que involucre cientos de miles de líneas de código, y tal vez necesite muchos gigabytes de datos para procesar (como lo hago yo), entonces no es una buena idea usar Python. Por otro lado, si necesita escribir pequeñas herramientas de sistema portátiles (como yo), entonces python es genial.

La premisa de la pregunta no es correcta.

Como mencionó Les Matheson, la ampliación en los días modernos no está limitada por la capacidad del idioma o los idiomas subyacentes.

Puede construir la mayoría de sus bloques y servicios de arquitectura utilizando Python (o JavaScript si lo desea) y luego hacer que se comuniquen.

Por lo tanto, para escalar toda la arquitectura, deberá escalar cada componente por separado y los canales de comunicación entre ellos.

Espero que esto ayude un poco.

Feliz escala con Python.

[ Editar 1 30-4-2016 ] Aquí hay un caso de estudio real sobre el escalado desde Instagram (desde 2012): 2 optimizan la carga operativa mínima.

Su pila en ese entonces consistía principalmente en Django [1] para la aplicación web de fondo (Python), Nginx [2] para el servidor HTTP, equilibrio de carga y proxy inverso, Redis [3] como almacén de clave / valor, Postgres [ 4] como el DB principal, Memcached [5] como caché distribuida y muchos otros servicios y herramientas de monitoreo.

Para concluir, me gusta mucho el mensaje detrás de la diapositiva 144:

4 hacemos la mayor parte de nuestro trabajo en Python, baje a C cuando sea necesario

Notas al pie

[1] El marco web para perfeccionistas con plazos

[2] noticias de nginx

[3] Redis

[4] La base de datos de código abierto más avanzada del mundo.

[5] un sistema de almacenamiento en caché de objetos de memoria distribuida

¿Quién te dijo que Python no escala?

Debes darte cuenta de que en el mundo de la programación, hay muchos expertos que tienen todo tipo de opiniones. Desafortunadamente, muchos expertos piensan que lo saben todo y que ya tienen malas opiniones sobre lenguajes de programación y técnicas que no entienden. Entonces, cuando alguien afirma que el lenguaje X no escala, ¡no les creas de inmediato, sino pídeles que prueben su afirmación!

No pregunte a los demás si estarían de acuerdo con esta persona, ya que a esos otros les puede gustar Python o simplemente no saben nada sobre Python. Por lo tanto, ¡podrían estar de acuerdo con una opinión que podría ser falsa!

¡Pero hiciste la pregunta correcta! Si Python no escala, ¿por qué lo usa Quora? ¿Por qué lo usa Google? ¿Por qué lo usan tantos desarrolladores web si no escala? ¡No nos pregunte, pregúntele a la persona que hizo este reclamo!

Primero, Python no es lento. Es más lento que los lenguajes de nivel inferior como C y Java, pero de ninguna manera es lento.

Segundo, es que Python solo se usa en el lado del servidor. Del lado del cliente, su navegador se ocupa de HTML, CSS y Javascript.

En términos simples, lo que Python está haciendo principalmente en el lado del servidor es decir “Hola, sé qué URL quieres, déjame tomar un par de archivos, pedirle a la base de datos información para llenar algunos de estos espacios vacíos, y luego enviarlos. Su navegador puede encargarse de analizar el CSS, renderizar el HTML, ejecutar el Javascript y obtener cualquier otro recurso que necesite, como imágenes o jQuery “.

Python también manejará otras solicitudes, pero la mayor parte de su trabajo es delegar su trabajo a la base de datos y a su navegador. Construye tus archivos HTML, pero Python es muy bueno en el procesamiento de texto.

No diría que Quora está “construido sobre” Python.

Quora y Google emplean muchos programadores de Python, quizás más que cualquier otro lenguaje, incluso en el caso de Google (que obviamente también tiene muchos programadores de Java para Android y similares).

Pero lo que puede apostar que tienen en común es que se aseguran de eliminar Python de las partes de sus pilas de software a las que se accede con más frecuencia y que marcan una diferencia en el rendimiento. Reescriben todo eso en C ++ o incluso C. Esos lenguajes, ahora escalan.

Entonces es cierto que algo como Scala escala mucho mejor que Python. Y esta es precisamente la razón por la que Twitter cambió de un lenguaje de script similar a Python, Ruby, a Scala, y no ha tenido todas esas fallas inducidas por Ruby desde entonces.

Pero también es probable que el 90% de Python más el 10% de C ++ sea probablemente tan rápido en tiempo de desarrollo y escale tan bien como el 100% de Scala o similar .

Porque “no escala” no es una cuestión de lenguaje.

Es una arquitectura de software, diseño y optimización. Es probable que cada aplicación se ajuste de forma diferente (porque las diferentes características implican diferentes cuellos de botella y soluciones).

Decir que una tecnología “escala” o “no escala” es ridículo. Fuertes habilidades de ingeniería permiten que las cosas escalen, ninguna pila tecnológica es una panacea de escala. Usted construye, monitorea, optimiza, escala.

Esta es una de esas preguntas novatas que los novatos piden que suenen inteligentes.

Hace años, personalmente, le pregunté a un gerente de desarrollo: “Ruby no escala, ¿por qué lo elegiste?”

Su respuesta fue mala, pero otra dio una mejor respuesta, “no importaría, ya que la aplicación web nunca se verá afectada por el tipo de carga de tráfico que pondría a Ruby de rodillas”.

Después de eso, nunca cuestiono un idioma porque alguien dice que no escala.

Porque claro, teóricamente no, pero ¿TÚ alguna vez tendrás que lidiar con ese problema? Lo más probable es que la respuesta sea no.

Nunca he usado Python. Pero por lo que he leído, es un lenguaje de programación increíble.

La “escala”, como se mencionó, no es una cuestión de lenguaje de programación. Es una cuestión de diseño.

Hay OTROS componentes a lo largo del lenguaje de programación que también necesitan escalarse:

  • SO del servidor
  • Base de datos de fondo
  • Servidor de aplicaciones
  • etc, etc, etc.

No se puede culpar a un solo idioma por “no escalar”. Conozco aplicaciones creadas en Java sobre bases de datos Oracle y servidores Sun que no pueden escalar debido al diseño de la aplicación.

Eche un vistazo a mi respuesta a ¿Son escalables los frascos o botellas de los marcos de Python?

Y permítanme reiterar algunas de las ideas más generales de esa respuesta.

Si tiene que escalar su código, está haciendo algo mal la mayor parte del tiempo. Por lo general, desea escalar cosas alrededor de su código.

Independientemente de su idioma, siempre es posible generar un número ilimitado de instancias de su programa. Todo lo que necesita hacer es seguir ciertos principios de arquitectura de software en su código (debe hacerlo de todos modos).

Luego, cuando necesite “escalar su aplicación / programa / servicio web”, puede hacerlo agregando colas de mensajes, bases de datos distribuidas, equilibrio de carga, …

Si intenta lograr la escalabilidad usted mismo en su propio código, fallará. Nunca será tan bueno como usar herramientas de terceros (a menudo de código abierto).

¿Quién dice que Python “no escala” …

  1. El escalado no depende de un idioma
  2. El escalado depende de cómo escribes el código
  3. El escalado también depende de la implementación / infraestructura

Las preguntas reales son:

  1. ¿Qué tan fácil es escalar?
  2. ¿Cuál es el costo de escalar?
  3. Creo que solo el 0.5% de los sitios web principales de “1,021,916,165” requieren una escala tan masiva como Facebook, Twitter, Quora y Google.

Esto no tiene sentido: la arquitectura es lo que escala, no el lenguaje. La mayoría de las personas, incluidas las que responden aquí, fundamentalmente no comprenden la diferencia entre rendimiento y escalabilidad.