Soy una de esas personas que ensalzará las virtudes del tipeo estático, pero también uso lenguajes tipados dinámicamente. A veces para grandes proyectos. ¿Por qué habría de hacer eso?
Estoy trabajando en uno ahora que es muy grande. Tiene una parte que es un sitio web pequeño y público, otra parte que es un portal para usuarios registrados y otra parte que es una API para una aplicación móvil. El sistema es grande y tiene muchos datos en movimiento. ¿Por qué lo construí en django / Python entonces?
Bueno, solo lo construí en django. El pequeño sitio público se traduce a 8 idiomas y se actualiza a menudo, pero solo de forma pequeña entre las dos docenas de páginas. Es un candidato perfecto para django-cms, ya que hace que sea muy fácil para diferentes personas (traductores) administrar el contenido en varios idiomas en el CMS, publicar cambios de forma incremental, y dado que ese contenido se sirve principalmente desde el caché del servidor, esencialmente no tiene procesamiento y muy poco acceso a la base de datos, por lo que es bastante rápido para su audiencia.
El portal requiere un poco más de recursos, pero no mucho. Principalmente es para que las personas se registren y compren licencias para el servicio. Entonces, si bien puede haber un millón de miembros, es probable que solo haya unos pocos miles de usuarios conectados en un momento dado, y en su mayoría solo necesitarán acceso a sus propios datos de usuario. Todo está almacenado en una base de datos postgres, que se escalará verticalmente para manejar el volumen creciente con el tiempo, y no necesita ser particularmente rápido. Hay algunos procesos, en los que los usuarios pertenecen a grupos y podrán ver información sobre otros usuarios en sus grupos, pero con buenas claves externas que son bastante rápidas, ya que esperamos, como máximo, unos pocos miles de usuarios. en un grupo, con solo unas pocas docenas o menos como el caso más común. Entonces, nada demasiado extenuante aquí, nada que django / Python / postgres no pueda manejar. Esto también se traduce a 8 idiomas, pero estamos utilizando traducciones precompiladas de django en el portal ya que las etiquetas de los campos de formulario no cambian muy a menudo, y esas traducciones precompiladas son rápidas.
Luego está la aplicación. De aquí proviene el tráfico y el procesamiento reales. El tráfico esperado dentro de 2 años es del orden de decenas de millones de solicitudes por día, con horas pico de unos pocos millones de solicitudes por hora. Ay. Entonces, construí esa parte en php, en su propio servidor. Para ser más específico, es php en bruto, sin el desorden que hace que php apesta; solo escuche las solicitudes entrantes, trátelas y devuelva una respuesta. Para ser claros, odio el php como lenguaje, con la pasión de mil soles ardientes. Pero aquí es donde brilla php. Toda la API es solo un centenar de líneas de código, sin bibliotecas o marcos adicionales, sin clases o herencia u otro tipo de cruft agregado para ralentizar las cosas. Es increíblemente rápido. Las pruebas de carga sugieren que puede manejar fácilmente unos pocos millones de solicitudes por hora, por lo que creo que estará bien con unas pocas decenas de millones de solicitudes por día, especialmente una vez que comencemos a generar nuevos nodos basados en el tráfico.
Tampoco utilicé postgres para la base de datos para esa parte. No porque no pueda manejar el tráfico, sino porque el tráfico es bastante específico. Esta parte debe distribuirse y escalar horizontalmente con el tráfico, por lo que necesitaba una base de datos que lo haga mejor que postgres, ya que postgres se escala mejor verticalmente que horizontalmente. Los datos tampoco son relacionales en este nivel, es esencialmente una colección de documentos de forma variada, codificados en un solo identificador. Además, nada del tráfico actualizará los registros existentes, en su lugar creará nuevos registros, lo que significa que no habrá colisión en la sincronización, y Mongo es bueno para capturar toneladas de nuevos registros y sincronizar en toda la red en segundo plano.
Así que ahora tengo un sistema muy pequeño y simple que se puede replicar en todo el mundo ejecutando solo mongo y php, que pueden usar geo-dns para transportar el tráfico al servidor más cercano. Esto recibe todo el tráfico de alta velocidad, almacena y agrega los datos importantes, y los pone a disposición de los usuarios del portal a través de una API simple. Mientras tanto, el portal django / postgres y el sitio público manejan los datos del usuario, las licencias, etc. sin ser estresados por el tráfico masivo de la aplicación.
Por cierto, la aplicación es una aplicación Cordova multiplataforma escrita en iónico. Por lo tanto, la aplicación es principalmente JavaScript, que también se escribe dinámicamente. Pero dado que cada aplicación solo envía un mensaje a la vez, tampoco tiene que ser increíblemente rápido.
Así que aquí estoy, odiando los idiomas escritos dinámicamente mientras construimos simultáneamente un sistema muy grande y de alto tráfico en tres idiomas escritos dinámicamente. ¿Por qué? Porque esto no es religión, y uso la herramienta adecuada para el trabajo, independientemente de cómo me sienta acerca de esas herramientas.
EDITAR:
Para poner esto en una perspectiva completamente diferente, comencé un proyecto durante el fin de semana para convertir un garaje en una habitación. El primer paso es reemplazar las puertas del garaje con marcos de pared. Para ser claros, odio balancear un martillo sobre mi cabeza. Es una mierda, y nada sobre la construcción es más agotador. Por lo tanto, la mayoría de la gente diría “¡Usa tornillos, el taladro los hace fáciles de manejar!” Pero hay un problema. Los tornillos no tienen la misma resistencia al corte que los clavos de enmarcado. El problema es que la gente piensa que las paredes deben ser rígidas. Pero las paredes, especialmente las paredes exteriores, se flexionan, con el viento, los cambios de temperatura, etc. Si la unión entre dos pernos se flexiona y tiene tornillos que la sujetan, los tornillos ceden y se cortan la primera vez que la pared se flexiona más allá de la resistencia al corte del tornillo. Las uñas son flexibles. Si esa misma articulación es sostenida por las uñas, la uña tiene el margen de maniobra para extraer una pequeña cantidad, o deformarse para que coincida con un perno giratorio, sin perder su agarre en ambos lados de la articulación. Claro, después de algunas décadas de flexión estacional, las uñas pueden comenzar a salir o debilitarse, pero los tornillos se rompen la primera vez que se flexionan.
Así que aquí estoy, odiando tener que balancear un martillo sobre mi cabeza, mientras uso un martillo para clavar clavos porque es la herramienta adecuada para el trabajo, independientemente de lo que siento por ellos. Mientras tanto, django es una pistola de clavos neumática. 😉