Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aplicaciones web en tiempos modernos con Scala

Aplicaciones web en tiempos modernos con Scala

Trisfera Conf 2013 speech about Scala and distributed systems.

Ytzvan Mastino

August 24, 2013
Tweet

More Decks by Ytzvan Mastino

Other Decks in Technology

Transcript

  1. Aplicaciones Web en Aplicaciones Web en tiempos modernos con tiempos

    modernos con Scala. Scala. #Trisferaconf @ytzvan #Trisferaconf @ytzvan
  2. ¡Hola! me llamo Ytzvan y ¡Hola! me llamo Ytzvan y

    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
  3. ¿Cuando una aplicación web es ¿Cuando una aplicación web es

    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.
  4. La mayoría actualmente utiliza servidores y lenguajes La mayoría actualmente

    utiliza servidores y lenguajes basados en threads basados en threads
  5. En un servidor basado en Threats, los En un servidor

    basado en Threats, los threads pasan más tiempo en idle, threads pasan más tiempo en idle, esperando en I/O. esperando en I/O.
  6. Los servidores basados en Threads, asignan 1 thread Los servidores

    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); }
  7. Lo anterior bloquea una ejecución Lo anterior bloquea una ejecución

    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...
  8. Que es de lo que vinimos a hablar hoy La

    mayoría de estos problemas La mayoría de estos problemas podemos evitarlos si desarrollamos podemos evitarlos si desarrollamos aplicaciones reactivas aplicaciones reactivas
  9. Necesitamos construir sistemas que Necesitamos construir sistemas que 1. Reaccionen

    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
  10. El estado mutable compartido... El estado mutable compartido... ...junto con

    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.
  11. 1. Nunca bloquees los procesos 1. Nunca bloquees los procesos

    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.
  12. 2. Ir Asícrono 2. Ir Asícrono Diseña un sistemas orientados

    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.
  13. Tradicional VS Non-Blocking Tradicional VS Non-Blocking def obtenerTweets = Action

    { Ok(WS.get("http://twitter.com/ytzvan")) } def obtenerTweets = Action { Async { Ok(WS.get("http://twitter.com/ytzvan")) }}
  14. Fallas de recuperanción en Fallas de recuperanción en Java/C++/C# Java/C++/C#

    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...
  15. Le sale esta linda pantalla a tus Le sale esta

    linda pantalla a tus usuarios... usuarios...
  16. Lo que nos lleva a: Lo que nos lleva a:

    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.
  17. Pero hay una mejor forma de hacer las Pero hay

    una mejor forma de hacer las cosas... cosas... *Sonido de tambores*
  18. Utiliza compartimentos... Utiliza compartimentos... Aislan las fallas Aislan las fallas

    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
  19. ...Junto con supervisión ...Junto con supervisión Cada proceso debe tener

    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 ..
  20. Performance vs Escalabilidad Performance vs Escalabilidad ¿Cómo sé cuando tengo

    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
  21. Falla 1: Computación Distribuida Falla 1: Computación Distribuida Transparente Transparente

    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.
  22. En vez de lo anterior... En vez de lo anterior...

    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!!)
  23. La red es extraña, se comporta de La red es

    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
  24. ¿Entonces que puedo hacer para ¿Entonces que puedo hacer para

    manejar la escalabilidad? manejar la escalabilidad? Utiliza el Batching Sin Batching Con Batching
  25. Esto nos generaría lo siguiente Esto nos generaría lo siguiente

    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.
  26. Qué es Scala Qué es Scala Creado por Martin Odersky

    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.
  27. Qué no es Scala Qué no es Scala No es

    un mejor Java. No es un lenguaje difícil de aprender No es algo como Grails, Groovy o demás lenguajes dinámicos que corren sobre la JVM.
  28. Para que me sirve Scala Para que me sirve Scala

    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.
  29. Un lenguaje no es nada sin un buen Un lenguaje

    no es nada sin un buen Framework Framework
  30. Ventajas de Play! Ventajas de Play! Actualización en caliente. No

    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.
  31. Ok, me dormí a la mitad de la charla y

    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.
  32. La infraestructura correcta hace una La infraestructura correcta hace una

    aplicación reactiva... aplicación reactiva... Pero no la hace moderna. Pero no la hace moderna.
  33. Herramientas que se utilizan para Herramientas que se utilizan para

    construir la web moderna. construir la web moderna. Y que deberían aprender
  34. Y manejar un repositorio de software Y manejar un repositorio

    de software como Git o Hg. como Git o Hg. Por favor, no guarden con su código en un pen drive.
  35. ¡Están perdiendo su ¡Están perdiendo su tiempo! tiempo! Excepto Java

    para Android, ahí si se necesita bastante gente
  36. ¡Muchas Gracias! ¡Muchas Gracias! *Esta presentación estará disponible pronto en

    http://speakerdeck.com/ytzvan Ytzvan Alexis Mastino email: [email protected] @ytzvan