soy un soy un adicto adicto entusiasta de entusiasta de los lenguajes de los lenguajes de programación. programación. Soy fundador del Soy fundador del Panama Panama Dev Meetup Dev Meetup y miembro y miembro de Floss-Pa. de Floss-Pa. He programado por He programado por trabajo y diversión en trabajo y diversión en Python, PHP, Javascript, Python, PHP, Javascript, Ruby y ahora Ruby y ahora Scala Scala
considerada moderna? considerada moderna? Cuando es responsiva Cuando no se cae Cuando escala Cuando no hace esperar al usuario Si tu aplicación web es fea, lenta y no se ve en móviles, estás viviendo en el 2003.
basados en Threads, asignan 1 thread por request y utilizan bloqueo de entrada y salida por request y utilizan bloqueo de entrada y salida ( (Blocking I/O Blocking I/O) ) void doGet (HttpServletRequest req, HttpServleResponse, res) { //Cliente HTTP de Apache HttpClient client = new HttpClient(); GetMethod method = new GetMethod("http//conf.trisfera.com"); // executeMethod esta bloqueando el resto de la ejecución int statusCode = client.executeMethod(method); System.out.println("Respuesta" + statusCode); }
correcta de una aplicación web cuando correcta de una aplicación web cuando hay mucha concurrencia y por ende nos hay mucha concurrencia y por ende nos genera algo llamado... genera algo llamado...
mayoría de estos problemas La mayoría de estos problemas podemos evitarlos si desarrollamos podemos evitarlos si desarrollamos aplicaciones reactivas aplicaciones reactivas
a Eventos -> Event Driven 2. Reaccionen a la carga -> Escalables 3. Reaccionen a los fallos -> Resistentes 4. Reaccionen a través de una rica interfaz -> Interactivos = = Aplicaciones Reactivas Aplicaciones Reactivas
threads ...junto con threads ...Conlleva a un código ...Conlleva a un código totalmente totalmente INDETERMINABLE INDETERMINABLE... ... Y es la raíz de todos los males. Y es la raíz de todos los males.
A menos que sea extremadamente necesario A menos que sea extremadamente necesario Bloquear mata la escalabilidad y el performance Bloquear mata la escalabilidad y el performance Usa non-blocking I/O Usa non-blocking I/O Usa una concurrencia libre de locks. Usa una concurrencia libre de locks.
a eventos Diseña un sistemas orientados a eventos Pensar en cómo se comportaran los eventos nos da: Pensar en cómo se comportaran los eventos nos da: Mayor rendimiento Mayor rendimiento Menor latencia Menor latencia Una arquitectura más robusta, fácil de extender, Una arquitectura más robusta, fácil de extender, evolucionar y mantener. evolucionar y mantener.
Si un thread falla, toda tu aplicación Si un thread falla, toda tu aplicación se jode se jode falla. falla. Entonces le haces Try - Catch a toda tu aplicación Entonces le haces Try - Catch a toda tu aplicación (por un simple thread) (por un simple thread) Y como si fuera poco, Y como si fuera poco, los errores no se propagan en los errores no se propagan en threads threads y no tienes forma de saber que algo falló y no tienes forma de saber que algo falló hasta que... hasta que...
Llenar de Try's y Catch's la Llenar de Try's y Catch's la lógica de lógica de negocio negocio de nuestra aplicación. de nuestra aplicación. Tener un código disperso y difícil de Tener un código disperso y difícil de mantener. mantener.
Dividen Dividen Manejas la falla localmente Manejas la falla localmente Evitas más fallas a partir de la Evitas más fallas a partir de la primera primera
un proceso padre de Cada proceso debe tener un proceso padre de supervisión supervisión Los Los erorres erorres serán referidos al supervisor (de forma serán referidos al supervisor (de forma asícrona asícrona ) que sabrá que hacer. Ya sea matarlos, ) que sabrá que hacer. Ya sea matarlos, reiniciarlos, suspenderlos o resumirlos. reiniciarlos, suspenderlos o resumirlos. Separación entre la Separación entre la lógica de negocio lógica de negocio y y la lógica de la lógica de manejo de errores manejo de errores ..
un problema de performance? Si tu aplicacion es lenta para 1 usuario, tienes un problema de performance ¿Cómo sé cuando tengo un problema de escalabilidad? Si tu aplicación es rápida para 1 usuario, y lenta para 100; entonces tienes un problema de escalabilidad
El modelo distribuido comparte el estado mutable. Esto es MALO elevado a la N (N = al número de nodos). Objetos distribuidos Esto literalmente apesta . Transacciones distribuidas Nunca más.
Acepta la red tal y cómo es. Basa tu aplicación en un modelo orientado a eventos. Sé asícrono y utiliza el estado inmutable. (Programación funcional FTW!!)
extraña, se comporta de manera radical y por ende nadie puede manera radical y por ende nadie puede aceptar una garantía 24/7/365 sin al aceptar una garantía 24/7/365 sin al menos menos poder ver el futuro poder ver el futuro
1. Manejo de múltiples usuarios a la vez. 2. Mayor latencia. Debes tratar de maximixar el Debes tratar de maximixar el rendimiento con una latencia adecuada. rendimiento con una latencia adecuada.
en el 2003. Lenguaje híbrido (POO y Funcional) Se volvió mainstream cuando RoR no se adaptaba a las necesidades de los desarrolladores actuales. Sus librerías son compatibles con java y viceversa. Corre sobre la JVM. Está presente en las entrañas de Twitter, Foursquare y LinkedIn.
Para desarrollar aplicaciones específicas para la nube. Scala evita el estado mutable. Para que el Multithreading no sea un pain in the a$$. Al tener valores inmutables, se pueden trabajar con muchos hilos a la vez de forma asícrona. Para ofrecer aplicaciones que trabajen en tiempo real.
es necesario reiniciar el servicio para ver los cambios Soporte nativo de web sockets Librerías para trabajar con Non-Blocking I/O . F&ck Yeah! THIS ^ La configuración solo toma 5 minutos. Aquí es donde tiembla Django y RoR. Trae muchas librerías que te harán un desarrollador más perezoso productivo.
Ok, me dormí a la mitad de la charla y me gustaría que dijeras algo interesante me gustaría que dijeras algo interesante antes de que acabes. antes de que acabes.