2010-05-24 7 views
27

He estado revisando el Nitrogen Project que se supone que es el marco de desarrollo web más maduro para Erlang.¿Cuál es su experiencia con Nitrogen en Erlang?

Erlang, como idioma, es extremadamente impresionante. Sin embargo, con respecto al nitrógeno, lo que no me entusiasma es usar la sintaxis bastante poco común de Erlang (a menos que seas nativo en PROLOG) para construir UI.

¿Cuál es su experiencia con él en comparación con otros mainstream marcos web como Django o Rails?

+3

Si la sintaxis vaga de Erlang te molesta, las dos alternativas que te dan Erlang con sintaxis alternativas son: LFE (Lisp Flavored Erlang) que te da una sintaxis Lisp completa y se encuentra en http://github.com/rvirding/lfe ; Efene que le da una sintaxis similar a la de javascript/python y se encuentra en http://marianoguerra.com.ar/efene – rvirding

Respuesta

31

He hecho muy poco con Nitrogen hasta ahora, pero he estado monitoreando la lista de correo durante meses, así que creo que tengo algo útil que decir al respecto.

Para su preocupación sobre la sintaxis de Erlang y el marco de Nitrógeno, respondería que eso suena como un caso puro de falta de familiaridad, en lugar de inadecuación. Objetivamente, HTML no es un lenguaje hermoso, y tiene muchas peculiaridades. Ya estás acostumbrado a esto, así que no parece tan malo. Dale una oportunidad a Nitrogen/Erlang y es posible que también te acostumbres pronto.

Para su pregunta acerca de la comparación con otros lenguajes y marcos, diría que la mayor diferencia es que con Nitrogen, todo el sitio web está siendo servido directamente por el tiempo de ejecución de Erlang. Ruby on Rails tiene ese modo, pero está destinado solo para pruebas. Muchos otros marcos ni siquiera ofrecen la opción de ejecutar todo dentro de un solo proceso de larga ejecución.

Ejecución de toda la aplicación web y su infraestructura subyacente dentro de un único proceso de larga duración tiene implicaciones importantes sobre cómo funciona el sitio:

  • con Apache, cada niño se acabó con cada N conexiones, donde N = 500 o menos, y no puede decir si un niño determinado siempre manejará todas las solicitudes de un cliente determinado. Debido a que HTTP no tiene estado, pero las aplicaciones web casi siempre requieren algún estado de cliente, un elemento secundario de Apache debe reconstruir su vista del estado del cliente como parte del manejo de una nueva conexión. De forma predeterminada, esto significa volver al disco para datos persistentes almacenados sobre ese cliente. Hay alternativas como memcached, pero estas no están integradas en el núcleo de una pila de tipo LAMP. Con Erlang, no se elimina nada periódicamente, y Erlang ofrece instalaciones estándar como Mnesia que proporcionan bases de datos en memoria con respaldo de disco.

    Por cierto, si está familiarizado con nginx, está basado en los mismos principios que Erlang, y es rápido por la misma razón. La principal diferencia entre nginx y una instancia de Erlang que ejecuta un servidor web es que nginx no es un entorno de programación, por lo que aún tiene que delegar una gran cantidad de procesamiento a código externo. Eso significa que comparte el mismo IPC y problemas de estado persistentes como Apache.

  • Debido a que el tiempo de ejecución se mantiene continuamente y es un entorno de programación totalmente funcional, es probable que pueda construir más partes de su sistema en Erlang que con una pila de tipo LAMP fija. Esto magnifica los beneficios anteriores. Las diversas partes de su sistema pueden coordinarse mediante el envío de mensajes y Mnesia en lugar del peso pesado IPC y MySQL, y todas las piezas permanecen funcionando continuamente, lo que lleva a una reconstrucción del estado que requiere menos tiempo.

  • Una docena de niños Apache que acceden al almacén de datos de estado de cliente persistente es una bola de pelo basada en bloqueo. Todos los marcos manejan el bloqueo de forma transparente, pero lo que no pueden ocultar es el tiempo que lleva hacer todo esto correctamente.

    Erlang es un lenguaje funcional impuro, que implica, pero no requiere, pureza de datos; también está construido con multiprocesamiento en mente, yendo hasta el núcleo del diseño de tiempo de ejecución. Estos dos hechos significan que es menos probable que gaste tiempo esperando cerraduras en un servidor basado en Erlang que uno ingenuamente construido en uno de los otros marcos. Sin duda, es posible optimizar las demoras de bloqueo en los otros sistemas, pero ¿es eso realmente lo que quieres hacer? ¿Desea formar parte del equipo número mil que debe aprender a optimizar su pila web después de que el servicio se haga popular, o prefiere dejar todo en manos de la herramienta para que pueda dedicar su tiempo a hacer algo que nadie más ha hecho aún? ?

6

Yo, también, una vez me preocupé por la sintaxis de Erlang torpe. He construido un par de herramientas para aliviar sus molestias para la programación web todos los días, y tal vez se encuentra uno de ellos o ambos útiles:

  • ErlyDTL es una implementación de Erlang del lenguaje de plantilla de Django; que no está disponible en nitrógeno, pero está disponible en otros marcos, como Zotonic, Erlang Web, BeepBeep, y Chicago Jefe

  • Chicago Boss es un marco de Erlang pila completa que hace un montón de generación de código, para que pueda campos de datos de acceso con llamadas a funciones en lugar de la sintaxis de registro más detallado de Erlang (por ejemplo, en lugar de Person:name()Person#person.name)

Tenga en cuenta que el nitrógeno no incluye una capa de base de datos, así que no es realmente comparable con Rails o Django. Para una comparación exhaustiva de los marcos de bases de datos, echa un vistazo a mi respuesta a esta pregunta StackOverflow:

https://stackoverflow.com/questions/1822518/current-state-of-erlang-web-development-frameworks-template-languages/2898271#2898271

+1

La capa de la base de datos se puede elegir de Zotonic, están usando Postgresql. (La capa db se implementa muchas veces en Erlang, por lo que usar la mejor es de gran importancia. Escogería Zotonic) – Flinkman

+0

Re: "no DB in Nitrogen", Rusty Klophaus, el creador y desarrollador principal de Nitrogen está trabajando para Basho , que saca a Riak, una base de datos distribuida hecha para respaldar sitios web. (Basho también saca Webmachine, mencionado en otra respuesta). Rusty tiene una presentación en Vimeo diciendo cómo usar los dos juntos: http://vimeo.com/8258045. Me parece probable que estas tres tecnologías van a funcionar. crecer juntos de alguna manera. –

4

Me volvería a la salida Webmachine si fuera tú. Es bastante simple, rápido y deja la interfaz a su altura.

3

Erlang Web también se debe considerar maduro. Es un marco MVC, mientras que Nitrogen está más basado en eventos. Es una cuestión de preferencia.

No he utilizado las otras herramientas mencionadas aquí, excepto Webmachine, que creo que es una herramienta maravillosa, pero no es un framework web como los demás. Es como un procesador HTTP, y es ideal para construir interfaces relajantes.

También le sugiero que brinde una oportunidad a la sintaxis de Erlang. Erlang es uno de mis idiomas favoritos para usar.

Cuestiones relacionadas