¿Qué tan adecuado es Lua para crear aplicaciones web de alto rendimiento y concurrentes (en tiempo real)?

Nunca he hecho ningún desarrollo web con Lua. Pero desde que lo preguntaste, ¡sentí curiosidad y encontré este proyecto Sailor! Un marco Lua MVC, que en realidad siento que parece muy prometedor. Si tuviera más tiempo disponible ahora, definitivamente lo probaría.
Sin embargo, no pude encontrar nada en su sitio sobre cómo Sailor maneja la concurrencia. Lua es de un solo subproceso (como también se menciona en las otras respuestas) , pero tiene una huella muy pequeña . Es cierto que no estoy seguro de cómo se manejaría la concurrencia en un marco web Lua. Quizás el marco web generaría una nueva instancia de Lua para cada número X de usuarios, o algo así.

No estoy seguro de si usaría o no Lua para un desarrollo web serio. Actualmente prefiero usar el framework Python Django, pero eso es principalmente porque es el framework con el que me siento más cómodo en este momento. También he trabajado mucho con ASP MVC en el pasado y me he contentado con eso. En este momento estoy aprendiendo Elixir, por lo que podría saltar al marco de Phoenix que parece súper prometedor en mi opinión, especialmente con respecto a la creación de aplicaciones web escalables simultáneas.

¿Por qué elegiría Lua para crear marcos web?
Como dije, nunca probé Lua para el desarrollo web, pero la idea suena entretenida. Trataré de explicar por qué elegiría / no elegiría Lua para el desarrollo web …

  • Lua tiene una cultura en la que los desarrolladores no comparten gran parte de su código y la comunidad es bastante pequeña, por lo que si quieres hacer algo grande y complejo, tendrás que reinventar muchas ‘ruedas’. Python tiene una comunidad enorme con miles de bibliotecas de alta calidad, por lo que en Python simplemente se recostará en su silla e importará las ‘ruedas’ en lugar de reinventarlas. Sin embargo, hay algunas bibliotecas geniales en Lua como Torch | Computación científica para LuaJIT ..
  • En mi experiencia, Lua es una locura rápida en comparación con muchos otros idiomas . Especialmente Python es muy lento en comparación con Lua.
    Lua es de un solo subproceso, pero la huella es increíblemente pequeña, por lo que quizás solo sea cuestión de generar muchas instancias de Lua para lograr un mejor potencial de concurrencia.
    (Supongo que cualquier marco web serio trataría este problema de alguna manera …)
  • La pequeña huella de la Lua VM lo hace agradable para hardware barato de bajo rendimiento.
  • Lua es un lenguaje muy simple y no detallado. A veces extraño esta simplicidad en otros idiomas. La simplicidad es una gran ventaja en mi libro.

Creo que la mejor razón para elegir Lua para el desarrollo web sería si desea implementar en hardware de bajo rendimiento , pero también podría ser bueno si desea construir algo no complejo que deba ejecutarse súper rápido.
Sin embargo, si lo que quieres es un alto potencial de concurrencia, creo que Elixir Phoenix es la mejor opción .
No importa qué idioma y marco elija, siempre debe considerar si realmente necesita toda esa velocidad y concurrencia. Puede ser que su problema no necesite tanta velocidad, y entonces sería una optimización prematura elegir un lenguaje / marco de alta velocidad en lugar de un lenguaje / marco de alta productividad.
Dicho esto, si Lua es el idioma con el que se siente más cómodo (o tal vez es su único idioma) , entonces creo que debería continuar de inmediato y probar Lua para el desarrollo web.

Gracias por hacer la pregunta, realmente me hizo sentir mucha curiosidad acerca de Lua para el desarrollo web … Y lamento no poder compartir ninguna experiencia práctica, pero espero que al menos puedan usar mis pensamientos.

Una charla del creador de Sailor:

Lua es viable, pero por razones de estabilidad y brevedad, un desarrollador maduro elegiría un lenguaje como [* Clojure, Haskell], Java, C #, Go, JavaScript o Python.

A Lua le falta una sintaxis limpia, de alto nivel y declarativa con la que expresar de manera concisa ideas complejas. Tenga en cuenta que C # y Java tienden a no tener esto tampoco, pero también tienen sistemas de tipos, lambdas y otras características adecuadas para expresar problemas complejos.

Debido a la falta de características expresivas en el lenguaje, Lua es adecuado para escribir pequeños guiones que nunca se espera que crezcan en complejidad.

Las aplicaciones web simultáneas en tiempo real tienden a ser complejas, especialmente si tiene necesidades especiales en su dominio problemático. Hay opciones superiores a Lua para desarrolladores principiantes y maduros en 2016.

(* Clojure y Haskell son mis elecciones personales por razones de expresividad y corrección, pero el estándar de la industria aún está dominado por los lenguajes imperativos tradicionales de OOP).

No explica exactamente qué tipo de concurrencia está buscando, pero LuaJIT que se ejecuta dentro de nginx (OpenResty) es una opción popular para aplicaciones web de muy alto rendimiento, utilizadas entre otras en CloudFlare y anteriormente en Taobao (ahora usan una bifurcación llamada Tengine )

Otro sitio web que ejecuta OpenResty es itch.io que usa un marco llamado Lapis.

Soy un gran admirador de Lua. El rendimiento y el uso de memoria son realmente buenos. No lo he usado en un servidor web de Internet, pero después de haber visto OpenResty® – Sitio oficial en otras publicaciones en esta pregunta, se ve bastante bien.

He usado Lua para escribir un servidor HTTP completo junto con la aplicación HTML para un firewall integrado. Usé Lua ya que necesitaba algo más rápido que C, pero las limitaciones del procesador y la memoria eran limitadas. Lua todavía no es C pero es bastante rápido y eficiente.

Funcionó muy bien.

Comencemos mencionando que Lua es de un solo subproceso y no proporciona una forma nativa de subprocesamiento múltiple.

¡PERO! Además de tener varias bibliotecas, como LuaLanes y LuaRings, que proporcionan un verdadero subprocesamiento múltiple (a un costo), tiene un sistema incorporado muy agradable de multitarea cooperativa, llamado corutinas. Varios módulos de Lua (como “Lua’s Node.js”, Luvit) lo usan con gran efecto.

Otra preocupación es la imprevisibilidad del recolector de basura, pero hay material disponible de los modders del juego para mitigar este problema.

Lua se utiliza para tal fin en la mayoría de los módems WiFi, ya que el sistema LuCi utilizado en muchos de estos módems es de hecho una infraestructura de aplicación web que utiliza Lua.

No sé si es escalable o no, pero tiene el potencial para lograr ese objetivo.

More Interesting

Para una aplicación web simple, ¿cuál es la mejor opción para la implementación de JPA?

Alguien está desarrollando una aplicación web para mí. Se han solicitado detalles de alojamiento con certificación SSL para que la aplicación se pueda cargar y probar. ¿Qué debo hacer?

Cómo crear una baliza web

¿Cómo haría alguien para descargar cada imagen en la web?

¿Puedo crear aplicaciones web con Bootstrap y Ruby on Rails? Si es así, ¿por qué las personas usan frameworks Javascript?

¿Cómo se escapa legalmente un motor de recomendación con el uso de imágenes de productos?

¿Qué tan complicado es crear funcionalidades de reconocimiento de imágenes personalizadas en mi aplicación web? ¿Algún estadio sobre costos y tiempo?

En LAMP, ¿cuáles son los beneficios y las desventajas de Foundation y Laravel vs. Bootstrap y Code Igniter?

¿Existe algún servicio web para administrar el flujo de trabajo en línea?

¿Es bueno usar Laravel para desarrollar una aplicación web con AngularJS y Bootstrap?

¿Por qué pocas empresas nuevas de Internet usan frameworks Java como J2EE y OSGI como la pila de software para implementar su aplicación web? ¿Por qué parecen preferir los frameworks Ruby-on-Rails, Python o PHP?

¿Cuál es la comparación de Firebase con Parse y MongoDB?

¿Cuál es el mejor enfoque para hacer tablas en la base de datos para la página de inicio de sesión?

¿Cuál es la mejor manera de crear una aplicación alojada en la nube desde cero?

¿Se puede construir un producto viable mínimo basado en web totalmente funcional en Python?