2011-12-21 22 views
8

Tengo una aplicación Erlang/OTP que tiene cierta lógica comercial. Está escrito en Erlang principalmente para tolerancia a fallas, porque puedo reiniciar fácilmente uno de los componentes bloqueados del sistema (el mayor tiempo de actividad es el requisito más importante). Cada uno de sus componentes realiza algún tipo de cálculos "paralelos" específicos.Uso de OTP/Erlang como parte de la arquitectura basada en componentes de una aplicación web

Como resultado de un ciclo de trabajo, la aplicación genera una lista de valores. Llamemos a esta aplicación Erlang/OTP un "back-end".

Esta aplicación Erlang/OTP también usaría un servidor PostgreSQL para almacenar los resultados en el almacenamiento persistente y almacenar la metainformación adicional necesaria para sus cálculos (aún no implementada).

Siguiente Necesito agregar un front-end a esta aplicación Erlang/OTP, una solución simple basada en la web que puede servirle a un usuario web: acepte una solicitud de cómputos de él/ella, solicite al back-end haga los cálculos y devuelva al usuario el resultado del back-end.

No hay ningún requisito escalabilidad, creo que el número máximo de usuarios por día puede no ser más que 1000.

Así que mi tarea actual ahora es implementar un front-end común para mi back-end de Erlang/Aplicación OTP (común significa que tengo un caso de uso típico: visitar el sitio, registrarme, iniciar sesión, usar la aplicación, obtener el resultado en una buena página web atractiva, cerrar sesión). Por un lado, sé que la reutilización de código puede ahorrarme mucho tiempo: por ejemplo, con Ruby on Rails puedo obtener autenticación de usuario, almacenamiento de contraseñas, interfaces ajax y muchas otras cosas gratis.

Por otro lado, no sé nada sobre el diseño de una aplicación que comprenda un servidor back-end Erlang/OTP + PostgreSQL y un framework web (RoR, Django, etc.) como front-end.

Muchas preguntas me vienen a la mente: ¿Deberían Erlang/OTP y el framework web usar la misma base de datos PostgreSQL para compartir el resultado? ¿Cuál es la mejor manera de enviar una solicitud de cálculo desde el marco web a la aplicación Erlang/OTP y recuperarla? ¿Cómo superviso el servidor PostgreSQL? ¿No está cubierto por la tolerancia a fallas de OTP?

En general, tengo algunos componentes de software heterogéneos y deseo construir un sistema que funcione a partir de ellos (el componente "principal" es la aplicación Erlang/OTP).


¿Dónde debo comenzar con esta tarea? ¿Me puede dar algún consejo o pista sobre qué recursos leer?

P.S. Intenté leer this y seguí los enlaces, pero no entendí mucho.

UPD: sé que Chicago Boss y otras web marcos Erlang existen, pero dudo que alguno de ellos tiene un ambiente tan madura, comunidad vibrante y enorme variabilidad de los diferentes plugins y librerías como por ejemplo Ruby on Rails, Django o cualquier framework MVC basado en PHP. ¿Derecha?

UPD2: Tal vez tenga que profundizar más en esto: también necesito que el front-end sea lo más fácil de mantener posible. Hacerlo en Erlang significa que podría enfrentar problemas para encontrar a los desarrolladores adecuados para mantenerlo; hacerlo en RoR, Django, etc. significa que puedo encontrar fácilmente la fuerza de trabajo para mantener el front-end y para crecer.

+0

He editado mi respuesta también. Revisa la actualización de la respuesta. gracias –

Respuesta

4

En primer lugar, hay un cliente Erlang PostGreySQL aquí: https://github.com/wg/epgsql. Otra cosa es que es posible que desee comprobar ZOTONIC. Es un CMS escrito en Erlang pero también es un framework web. Una de sus características es que ha integrado la base de datos PostGreySQL muy bien y todas las aplicaciones Erlang detrás de Zotoniuc se beneficiarían de esto. Es muy bueno cuando se desarrollan aplicaciones web MVC o basadas en eventos.

También, es posible que desee comprobar Nitrogen Web Framework y Chicago Boss que también son marcos web para aplicaciones web de Erlang. Personalmente, he desarrollado aplicaciones web de Erlang usando Nitrogen, Yaws y Mnesia como un conjunto completo. Una muy buena ventaja es que puede tener varias aplicaciones de Erlang detrás de esta pila de tecnología. El pian Web Server con su Appmods y dynamic Content Serving ability (por lo RESTFUL les puedo asegurar que), que ha permitido a nuestra JavaScript Driven frontend Web Apps con tanta sencillez increíble y la belleza, que proporciona servicios de un grupo de varias aplicaciones Erlang.

Si desea tener un Web Front End rápido, con funciones similares a Ajaxy/HTML5, ¡apúrese, rápido! y tome su auto el Nitrogen Web Framework. Como ya eres un programador de Erlang, será tan rápido para ti. Con Templating, puede escribir HTML4.X/HTML5 Templates o utilizar Web page Maker/Studio Software para crear plantillas para usted. Luego, más adelante, mostrará Nitrogen en dónde entrar, vinculando los Back-End de Erlang a esas páginas agradables usando generado dinámicamente JQuery Código derivado de su código Erlang.

Encontrará la documentación muy simple. Nitrogen es solo una colección de Erlang Records, y cada registro representa una etiqueta HTML. Se usan otros registros para definir efectos y eventos que serán POST de vuelta a su aplicación Erlang. Desarrollar hermosas interfaces web en Nitrógeno es muy rápido. De hecho, con el código JQuery generado dinámicamente, usted puede escribir su propio código JavaScript en la plantilla para acompañar toda la funcionalidad decir, haciendo uso de otra biblioteca JavaScript como EXT JS o MooTools o prototype js. Dentro de la plantilla es donde indicará dónde Nitrogen debe representar los Elementos HTML generados dinámicamente, así como JQuery, que actuará "AJaxically" sobre estos elementos. Una plantilla en este caso simplemente significa una página HTML.


Recuerda ser miembro de su lista de correo para encontrar más ayuda, así como seguir haciendo más preguntas aquí en StackOverflow. Bienvenido al mundo del desarrollo web Erlang. Algunas varios enlaces que pueden estar interesados ​​en (
IEEE Paper on Web Development in Erlang,
Erlang Web Framework,
erlydtl - Erlang Django like Templating Implementation,
ErlyWeb Framework
) Éxito!



EDITAR
Ahora, lo que usted dice es realmente cierto. Encontrar desarrolladores para mantenerlo sería una tarea. Sin embargo, Zotonic como mencioné anteriormente es un completo (Web) CMS igual que Joomla o Word Press e.t.c. Con él, usted mismo puede administrar/mantener el sitio/aplicación.

Sin embargo, también podría desarrollar el frente web utilizando Django o Ruby on Rails, pero cree Servicios seguros utilizando Datos formateados JSON en Mochiweb desde su frente web. Luego, usando Mochijson2.erl que viene con mochiweb, analiza el JSON y lo traduce en solicitudes o métodos y argumentos en su back-end de Erlang. Esto se haría en ambas direcciones, es decir, realizar solicitudes a sus aplicaciones Erlang, obtener los resultados devueltos y representarlos como datos JSON.

Mochiweb es la poderosa herramienta que puede interactuar con cualquier extremo posterior de Erlang con cualquier tecnología web en la parte delantera utilizando Service/RESTFul Model. Es simple y ligero. Es rápido y todo lo que necesita es que apunte a qué métodos manejar las solicitudes HTTP POST, GET, PUT e.t.c y esperaría los resultados para el envío. Mochiweb se ha utilizado en muchos sistemas Erlang, p. Couch DB (uno de los más avanzados NoSQL DBMS cambiando la forma de entender la Web y SOA Systems) y todos esos otros sistemas tales como Membase Single Server, Big Couch/Cloudant, e.t.c. Se puede ver a alguien poniendo mochiweb en acción here, then here y lastly here.

Los frameworks Django, Twisted, PHP o Ruby on Rails realizan solicitudes JSON y esperan respuestas JSON de Back ends de Erlang con la tecnología de Mochiweb. Otra gran interfaz RESTful para Back-ends Web de Erlang es Misultin, que incluso soporta Web Sockets y se teme que es la biblioteca HTTP de Erlang más rápida/o más receptiva :)

En mi experiencia, he trabajado con gurus PHP, JavaScript gurús, etc. pero encontramos el desarrollo más barato cada vez que ponemos nuestro servidor web como yaws con un Service Oriented Model usando solicitudes JSON y respuestas de ambas direcciones. En este caso, no perdemos la disponibilidad y la tolerancia a errores de Erlang y, por cierto, puede realizar muchas solicitudes a tantos Servidores Erlang distribuidos, incluso si están ocultos en diferentes redes secundarias de dominios mediante JSONP que es compatible con todos los JavaScript y/o marcos web frontales. Le recomiendo encarecidamente que coloque Mochiweb o Misultin en frente de su back-end de erlang y que tenga el marco web que elija para hacer solicitudes usando JSON Format (o incluso XML, que analizará usando erlsom, descárguelo here). Espero que entiendas lo que estoy sugiriendo. ¡¡¡Éxito!!!

+1

¡Gracias! He actualizado mi pregunta un poco. – skanatek

+0

¡Esa fue una muy buena edición de tu respuesta! ¿Podría referirme a alguna fuente en la que pueda leer más sobre "Servicios seguros que usan datos formateados JSON en Mochiweb"? Sé lo que es Mochiweb, pero nunca escuché sobre los servicios seguros en relación con Mochiweb. – skanatek

1

Puede implementar su frontend en erlang también usando cualquier web framework disponible. Ejecute front-end y back-end en nodos de erlang separados usando erlang RPC para la comunicación entre ellos.

Cuestiones relacionadas