SlideShare una empresa de Scribd logo
Programación Reactiva
13/09/2016Google Campus
#paradigmarx
¿Quien soy?
jpgonzalez@paradigmadigital.com
#paradigmarx
1. Qué es programación reactiva
2. RxJava
3. Experiencia en paradigma
4. Demo
ÍNDICE
#paradigmarx
Qué es programación reactiva
¿Por qué ahora?
¿Qué tiene de nuevo?
¿Es la próxima moda pasajera?
¿Ahora se programa todo así?
#paradigmarx
RxJava ¿Qué es?
Es una librería Java que implementa las ReactiveX
(extensiones reactivas )
“Se basa en el en la composición asíncrona y
programas basados en eventos , mediante el
uso de secuencias observables.”
#paradigmarx
RxJava ¿Qué ventajas nos aporta?
• Legibilidad
• Simplifica la concurrencia (evitando errores de
programación)
• Composición de operadores y funciones
• Permite añadir comportamiento al procesamiento
asíncrono
• Permite utilizar programación síncrona o asíncrona
#paradigmarx
RxJava Simplicidad
Como gran ventaja resuelve los problemas que tenía
Java hasta ahora con el manejo de la programación
concurrente. La librería está disponible desde java 6.
Callbacks & Future<T>
#paradigmarx
RxJava Fundamentos
Para gestionar todo lo que ocurre, esta
librería utiliza principalmente el patrón
Observer
#paradigmarx
RxJava Patrón Observer
“Es un patrón de diseño que define una
dependencia del tipo uno-a-muchos entre
objetos, de manera que cuando uno de los
objetos cambia su estado, notifica este
cambio a todos los dependientes.”
#paradigmarx
RxJava Observable
Los observables son los elementos que
notifican a todos sus observers los cambios.
Para ello es necesario que estos observer se
registren de alguna manera.
#paradigmarx
RxJava Push vs Pull
Estamos acostumbrados a un modelo donde le
pedimos al productor un nuevo elemento cada vez que
lo necesitamos (Pull) en vez de que el productor nos
avise de cuando está disponible (Pull). En ocasiones
provoca bloquear al usuario hasta que esté disponible.
Iterable/ Iterator Observable / Observer
T next() onNext(T)
throws Exception onError(Throwable)
returns onCompleted()
#paradigmarx
RxJava Eventos
Un elemento observable puede producir 3
tipos de eventos :
• Evento normal
• Evento de terminación
• Evento de error
#paradigmarx
RxJava Suscripción
Cuando se realiza una subscripción , se crea un objeto
Subscription que nos da acceso al control sobre el flujo
de la información, permitiendo saber si hay elementos
subscritos o terminar la conexión
#paradigmarx
RxJava Subscriber
Existe un elemento Subscriber que implementa ambos
interfaces, observer (lo que nos permite consumir los
eventos del observable) y subscription (con lo que
podremos controlar el flujo desde dentro del objeto)..
#paradigmarx
RxJava Subscriber
#paradigmarx
RxJava Creación de observables
• Vacíos : Observable.emtpy()
• Error : Observable.error()
• Con valores concretos : Observable,just(values)
• Custom : Observable.create(details)
• De una lista : Observable.from()
• Rango númerico : Observable.range(from,n)
#paradigmarx
RxJava Hot vs Cold Observables
Existe 2 tipos de Observables. Se distinguen principalmente
sobre la manera en la que emiten eventos. Los “calientes”
emiten eventos independientemente de si hay alguien
escuchando, mientras que los “fríos” sólo lo hacen cuando
tienen suscriptores, generando el evento para sus suscriptores
en exclusiva.
#paradigmarx
RxJava Operadores
RxJava tiene una serie de operadores que nos permiten
realizar acciones sobre los elementos del observable,
dominarlos, encadenarlos y realizar composiciones de los
mismos será lo que nos de potencia al usar esta librería. Por
citar algunos
#paradigmarx
RxJava Transformación
Son operadores que nos van a servir para aplicar
transformaciones a los elementos de origen de manera que
emitamos objetos distintos a la salida
#paradigmarx
RxJava Map
Nos permite aplicar una transformación a un elemento de
nuestro objeto para transformarlo en otra cosa.
#paradigmarx
RxJava Scan
Aplica una función a cada dato emitido y emite ese valor
secuencialmente
#paradigmarx
RxJava Reduce
Aplica una función a cada dato emitido y emite el resultado
#paradigmarx
RxJava Buffer
Permite almacenar un grupo de resultado y emitirlo como
grupo
#paradigmarx
RxJava FlatMap
Transforma cada elemento del observable en otra sucesión de
observable, se suscribe y los une en único observable
#paradigmarx
RxJava GroupBy
Divide el observable inicial en un conjunto de observables en
base a un criterio.
#paradigmarx
RxJava Cache
Almacena todos los resultados y los repite siempre igual.
Hay que tener cuidado con la memoria si estamos
manejando Observables infinitos
#paradigmarx
RxJava Filtrado
Permiten descartar ciertos elementos y emitir sólo un
subconjunto de los elementos iniciales.
#paradigmarx
RxJava Filter
Realiza un filtrado sobre los eventos de origen
#paradigmarx
RxJava Distinct
Elimina los duplicados
#paradigmarx
RxJava Otros
• First
• Last
• Take , TakeLast,TakeUntil, TakeWhile
• Skip, SkipLast, SkipUntil, SkipWhile
#paradigmarx
RxJava Combinacion de Observables
Es muy habitual trabajar con un conjunto de observables
que queramos combinar de alguna manera. Para ello
RxJava nos ofrece operadores que permiten combinarlos
para emitir un resultado.
#paradigmarx
RxJava Merge /Concat
Estos operadores se suscriben los observables que le
pasemos como parámetro y unifica los eventos en un
único stream de salida.
#paradigmarx
RxJava Switch
Muestra los eventos del último observable que ha
producido eventos. Cuando aparece un elemento en un
observable posterior, se borra la suscripción actual.
#paradigmarx
RxJava Zip
Combina elementos de distintos observables y los fusiona
en un único elemento
Es importante que estén lo más sincronizados posible.
#paradigmarx
RxJava CombineLatest/Amb
Permite realizar combinaciones con elementos sin que
estén sincronizados
#paradigmarx
RxJava Temporales
Permiten alterar el tiempo en la generación de eventos.
#paradigmarx
RxJava Timer
Crea un observable para que emita un evento determinado
en un tiempo predefinido.
#paradigmarx
RxJava Delay
Retrasa la emisión de eventos por un determinado tiempo
#paradigmarx
RxJava Interval
Emite una secuencia de números infinitos separados por
un intervalo definido
#paradigmarx
RxJava Repeat
Crea un Observable que repite un evento múltiples veces.
#paradigmarx
RxJava Retry
Permite reconectar cuando se produce un error
#paradigmarx
RxJava Single
Emite un único evento o da error
#paradigmarx
RxJava Timeout
Copia el Observable en la salida salvo que se produzca un
hueco mayor entre eventos al que se pasa por parámetro
#paradigmarx
RxJava Try/catch
RxJava nos permite varias formas de utilizar el try catch.
Quizás una de las más legibles sea OnErrorResumeNext
#paradigmarx
RxJava ¿Qué operador usar?
Para los principiantes existe un árbol de decisión que nos
ayuda a saber cual es el que deberíamos usar.
Podéis consultarlo en
http://reactivex.io/documentation/operators.html
#paradigmarx
RxJava Side effects
Podemos añadir comportamiento a lo que pasa cuando
suceden ciertos eventos. RxJava nos da muchos eventos a los
que suscribirnos, pero no se pueden alterar :
• doOnCompleted() )
• doOnEach()
• doOnError()
• doOnNext()
• doOnRequest()
• doOnSubscribe()
• doOnTerminate()
• doOnUnsubscribe() )
#paradigmarx
RxJava Concurrencia
Normalmente la concurrencia la va a decidir el que nos
consume.
Por ejemplo indicando suscribeOn(scheduler) o
ObserverOn(Scheduler)
#paradigmarx
RxJava Lazy vs Eager
Cuando utilizamos RxJava estamos aprovechando las ventajas
de una ejecución perezosa. La ejecución se pospone al último
momento posible, esto es cuando un usuario se suscribe.
Esto ayuda a no bloquear recursos innecesariamente
Cuando creemos Observables utilizaremos Defer, utiliza una
factoria de observable y lo hacer de forma perezosa
#paradigmarx
RxJava Bloqueante a No bloqueante
Con RxJava pasar de no bloqueante a bloqueante es muy
sencillo utilizando el operador toBlocking(). Lo contrario, es
más complicado porque implica un rediseño del algoritmo,
aunque RxJava da funciones para ello.
#paradigmarx
Paradigma + RxJava
Consumo bajo de recursos
Gran rendimiento
Buen compañero con Vert.x
Mejora de legibilidad separando la operación
de la orquestación
#paradigmarx
Ejemplos
#paradigmarx
#paradigmarx
#paradigmarx
#paradigmarx
http://developer.couchbase.com/documentation/server/4.1/sdks/java-2.2/documents-atomic.html
#paradigmarx
#paradigmarx
Muchas gracias
Buscamos talento : people@paradigmadigital.com

Más contenido relacionado

La actualidad más candente

Creando APIs REST con Spring Boot
Creando APIs REST con Spring BootCreando APIs REST con Spring Boot
Creando APIs REST con Spring Boot
José Antonio Escobar García
 
Microservicios, en qué lío me he metido
Microservicios, en qué lío me he metidoMicroservicios, en qué lío me he metido
Microservicios, en qué lío me he metido
Ernesto Hernández Rodríguez
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en Salesforce
Esteve Graells
 
De Threads a CompletableFutures
De Threads a CompletableFuturesDe Threads a CompletableFutures
De Threads a CompletableFutures
Rafael Antonio Gutiérrez Turullols
 
Thread 02
Thread 02Thread 02
Thread 01
Thread 01Thread 01
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
Agustin Ramos
 
Statement
StatementStatement
Statement
Patricia Reyna
 
Drupal8 & Symfony2
Drupal8 & Symfony2Drupal8 & Symfony2
Drupal8 & Symfony2
Magd Kudama
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
Monse Espinosa
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
Agustin Ramos
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
Tensor
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
Byron Quisquinay
 
Db autopwn backtrack_5
Db autopwn backtrack_5Db autopwn backtrack_5
Db autopwn backtrack_5
Jeffry Roldan
 
Estructuras de iteracion
Estructuras de iteracionEstructuras de iteracion
Estructuras de iteracionUVM
 

La actualidad más candente (20)

Máquina virtual en java
Máquina virtual en javaMáquina virtual en java
Máquina virtual en java
 
Creando APIs REST con Spring Boot
Creando APIs REST con Spring BootCreando APIs REST con Spring Boot
Creando APIs REST con Spring Boot
 
Microservicios, en qué lío me he metido
Microservicios, en qué lío me he metidoMicroservicios, en qué lío me he metido
Microservicios, en qué lío me he metido
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en Salesforce
 
De Threads a CompletableFutures
De Threads a CompletableFuturesDe Threads a CompletableFutures
De Threads a CompletableFutures
 
Thread 02
Thread 02Thread 02
Thread 02
 
Thread 01
Thread 01Thread 01
Thread 01
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
Statement
StatementStatement
Statement
 
Drupal8 & Symfony2
Drupal8 & Symfony2Drupal8 & Symfony2
Drupal8 & Symfony2
 
12integracion de tomcat con apache
12integracion de tomcat con apache12integracion de tomcat con apache
12integracion de tomcat con apache
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
 
Subprocesamiento Mùltiple
Subprocesamiento MùltipleSubprocesamiento Mùltiple
Subprocesamiento Mùltiple
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Db autopwn backtrack_5
Db autopwn backtrack_5Db autopwn backtrack_5
Db autopwn backtrack_5
 
Ios.s14
Ios.s14Ios.s14
Ios.s14
 
Estructuras de iteracion
Estructuras de iteracionEstructuras de iteracion
Estructuras de iteracion
 

Similar a Equipo de Marketing de Paradigma Digital

Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
Andres Almiray
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
Carlos Camacho
 
Java
JavaJava
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
GlobalLogic Latinoamérica
 
Rx js
Rx jsRx js
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
Pedro Gonzalez
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
Eudris Cabrera
 
Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math	Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math
Globant
 
Introduccion al Akelos Php Framework
Introduccion al Akelos Php FrameworkIntroduccion al Akelos Php Framework
Introduccion al Akelos Php Framework
Bermi Ferrer
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
Jyoc X
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
J Flex Cup
J Flex CupJ Flex Cup
J Flex Cup
Julio Santizo
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
Andres Almiray
 
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Marco Antonio Ordoñez Valverde
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
Adrian Diaz Cervera
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
Carlos Anibal Riascos Hurtado
 
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de JavaComandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Tania Tellez
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
Carlos Fernando
 

Similar a Equipo de Marketing de Paradigma Digital (20)

Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Java
JavaJava
Java
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
Rx js
Rx jsRx js
Rx js
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math	Reporting (Allure - Cucumber). Clear As The Math
Reporting (Allure - Cucumber). Clear As The Math
 
Introduccion al Akelos Php Framework
Introduccion al Akelos Php FrameworkIntroduccion al Akelos Php Framework
Introduccion al Akelos Php Framework
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Java
Java Java
Java
 
J Flex Cup
J Flex CupJ Flex Cup
J Flex Cup
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
 
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
Conociendo las tecnologías de TypeSafe (Primer meetup Scala Perú Nov 2015)
 
Ajax: introducción
Ajax: introducciónAjax: introducción
Ajax: introducción
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
 
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de JavaComandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
 

Más de Paradigma Digital

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
Paradigma Digital
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Paradigma Digital
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
Paradigma Digital
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
Paradigma Digital
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
Paradigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
Paradigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
Paradigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Paradigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
Paradigma Digital
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
Paradigma Digital
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
Paradigma Digital
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
Paradigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
Paradigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
Paradigma Digital
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
Paradigma Digital
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
Paradigma Digital
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
Paradigma Digital
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
Paradigma Digital
 

Más de Paradigma Digital (20)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 

Equipo de Marketing de Paradigma Digital

  • 3. 1. Qué es programación reactiva 2. RxJava 3. Experiencia en paradigma 4. Demo ÍNDICE #paradigmarx
  • 4. Qué es programación reactiva ¿Por qué ahora? ¿Qué tiene de nuevo? ¿Es la próxima moda pasajera? ¿Ahora se programa todo así? #paradigmarx
  • 5. RxJava ¿Qué es? Es una librería Java que implementa las ReactiveX (extensiones reactivas ) “Se basa en el en la composición asíncrona y programas basados en eventos , mediante el uso de secuencias observables.” #paradigmarx
  • 6. RxJava ¿Qué ventajas nos aporta? • Legibilidad • Simplifica la concurrencia (evitando errores de programación) • Composición de operadores y funciones • Permite añadir comportamiento al procesamiento asíncrono • Permite utilizar programación síncrona o asíncrona #paradigmarx
  • 7. RxJava Simplicidad Como gran ventaja resuelve los problemas que tenía Java hasta ahora con el manejo de la programación concurrente. La librería está disponible desde java 6. Callbacks & Future<T> #paradigmarx
  • 8. RxJava Fundamentos Para gestionar todo lo que ocurre, esta librería utiliza principalmente el patrón Observer #paradigmarx
  • 9. RxJava Patrón Observer “Es un patrón de diseño que define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, notifica este cambio a todos los dependientes.” #paradigmarx
  • 10. RxJava Observable Los observables son los elementos que notifican a todos sus observers los cambios. Para ello es necesario que estos observer se registren de alguna manera. #paradigmarx
  • 11. RxJava Push vs Pull Estamos acostumbrados a un modelo donde le pedimos al productor un nuevo elemento cada vez que lo necesitamos (Pull) en vez de que el productor nos avise de cuando está disponible (Pull). En ocasiones provoca bloquear al usuario hasta que esté disponible. Iterable/ Iterator Observable / Observer T next() onNext(T) throws Exception onError(Throwable) returns onCompleted() #paradigmarx
  • 12. RxJava Eventos Un elemento observable puede producir 3 tipos de eventos : • Evento normal • Evento de terminación • Evento de error #paradigmarx
  • 13. RxJava Suscripción Cuando se realiza una subscripción , se crea un objeto Subscription que nos da acceso al control sobre el flujo de la información, permitiendo saber si hay elementos subscritos o terminar la conexión #paradigmarx
  • 14. RxJava Subscriber Existe un elemento Subscriber que implementa ambos interfaces, observer (lo que nos permite consumir los eventos del observable) y subscription (con lo que podremos controlar el flujo desde dentro del objeto).. #paradigmarx
  • 16. RxJava Creación de observables • Vacíos : Observable.emtpy() • Error : Observable.error() • Con valores concretos : Observable,just(values) • Custom : Observable.create(details) • De una lista : Observable.from() • Rango númerico : Observable.range(from,n) #paradigmarx
  • 17. RxJava Hot vs Cold Observables Existe 2 tipos de Observables. Se distinguen principalmente sobre la manera en la que emiten eventos. Los “calientes” emiten eventos independientemente de si hay alguien escuchando, mientras que los “fríos” sólo lo hacen cuando tienen suscriptores, generando el evento para sus suscriptores en exclusiva. #paradigmarx
  • 18. RxJava Operadores RxJava tiene una serie de operadores que nos permiten realizar acciones sobre los elementos del observable, dominarlos, encadenarlos y realizar composiciones de los mismos será lo que nos de potencia al usar esta librería. Por citar algunos #paradigmarx
  • 19. RxJava Transformación Son operadores que nos van a servir para aplicar transformaciones a los elementos de origen de manera que emitamos objetos distintos a la salida #paradigmarx
  • 20. RxJava Map Nos permite aplicar una transformación a un elemento de nuestro objeto para transformarlo en otra cosa. #paradigmarx
  • 21. RxJava Scan Aplica una función a cada dato emitido y emite ese valor secuencialmente #paradigmarx
  • 22. RxJava Reduce Aplica una función a cada dato emitido y emite el resultado #paradigmarx
  • 23. RxJava Buffer Permite almacenar un grupo de resultado y emitirlo como grupo #paradigmarx
  • 24. RxJava FlatMap Transforma cada elemento del observable en otra sucesión de observable, se suscribe y los une en único observable #paradigmarx
  • 25. RxJava GroupBy Divide el observable inicial en un conjunto de observables en base a un criterio. #paradigmarx
  • 26. RxJava Cache Almacena todos los resultados y los repite siempre igual. Hay que tener cuidado con la memoria si estamos manejando Observables infinitos #paradigmarx
  • 27. RxJava Filtrado Permiten descartar ciertos elementos y emitir sólo un subconjunto de los elementos iniciales. #paradigmarx
  • 28. RxJava Filter Realiza un filtrado sobre los eventos de origen #paradigmarx
  • 29. RxJava Distinct Elimina los duplicados #paradigmarx
  • 30. RxJava Otros • First • Last • Take , TakeLast,TakeUntil, TakeWhile • Skip, SkipLast, SkipUntil, SkipWhile #paradigmarx
  • 31. RxJava Combinacion de Observables Es muy habitual trabajar con un conjunto de observables que queramos combinar de alguna manera. Para ello RxJava nos ofrece operadores que permiten combinarlos para emitir un resultado. #paradigmarx
  • 32. RxJava Merge /Concat Estos operadores se suscriben los observables que le pasemos como parámetro y unifica los eventos en un único stream de salida. #paradigmarx
  • 33. RxJava Switch Muestra los eventos del último observable que ha producido eventos. Cuando aparece un elemento en un observable posterior, se borra la suscripción actual. #paradigmarx
  • 34. RxJava Zip Combina elementos de distintos observables y los fusiona en un único elemento Es importante que estén lo más sincronizados posible. #paradigmarx
  • 35. RxJava CombineLatest/Amb Permite realizar combinaciones con elementos sin que estén sincronizados #paradigmarx
  • 36. RxJava Temporales Permiten alterar el tiempo en la generación de eventos. #paradigmarx
  • 37. RxJava Timer Crea un observable para que emita un evento determinado en un tiempo predefinido. #paradigmarx
  • 38. RxJava Delay Retrasa la emisión de eventos por un determinado tiempo #paradigmarx
  • 39. RxJava Interval Emite una secuencia de números infinitos separados por un intervalo definido #paradigmarx
  • 40. RxJava Repeat Crea un Observable que repite un evento múltiples veces. #paradigmarx
  • 41. RxJava Retry Permite reconectar cuando se produce un error #paradigmarx
  • 42. RxJava Single Emite un único evento o da error #paradigmarx
  • 43. RxJava Timeout Copia el Observable en la salida salvo que se produzca un hueco mayor entre eventos al que se pasa por parámetro #paradigmarx
  • 44. RxJava Try/catch RxJava nos permite varias formas de utilizar el try catch. Quizás una de las más legibles sea OnErrorResumeNext #paradigmarx
  • 45. RxJava ¿Qué operador usar? Para los principiantes existe un árbol de decisión que nos ayuda a saber cual es el que deberíamos usar. Podéis consultarlo en http://reactivex.io/documentation/operators.html #paradigmarx
  • 46. RxJava Side effects Podemos añadir comportamiento a lo que pasa cuando suceden ciertos eventos. RxJava nos da muchos eventos a los que suscribirnos, pero no se pueden alterar : • doOnCompleted() ) • doOnEach() • doOnError() • doOnNext() • doOnRequest() • doOnSubscribe() • doOnTerminate() • doOnUnsubscribe() ) #paradigmarx
  • 47. RxJava Concurrencia Normalmente la concurrencia la va a decidir el que nos consume. Por ejemplo indicando suscribeOn(scheduler) o ObserverOn(Scheduler) #paradigmarx
  • 48. RxJava Lazy vs Eager Cuando utilizamos RxJava estamos aprovechando las ventajas de una ejecución perezosa. La ejecución se pospone al último momento posible, esto es cuando un usuario se suscribe. Esto ayuda a no bloquear recursos innecesariamente Cuando creemos Observables utilizaremos Defer, utiliza una factoria de observable y lo hacer de forma perezosa #paradigmarx
  • 49. RxJava Bloqueante a No bloqueante Con RxJava pasar de no bloqueante a bloqueante es muy sencillo utilizando el operador toBlocking(). Lo contrario, es más complicado porque implica un rediseño del algoritmo, aunque RxJava da funciones para ello. #paradigmarx
  • 50. Paradigma + RxJava Consumo bajo de recursos Gran rendimiento Buen compañero con Vert.x Mejora de legibilidad separando la operación de la orquestación #paradigmarx
  • 56. #paradigmarx Muchas gracias Buscamos talento : people@paradigmadigital.com

Notas del editor

  1. Qué es : un paradigma de programación cuya base (y de ahí el nombre) es reaccionar a los cambios . Un ejemplo muy gráfico es una hoja de cálculo, cuando tu modificas una celda las demás se ven impactadas. Por qué ahora: queremos actuar muy rápido al cambio. En estos momentos tenemos muchos orígenes de información y todas ellas tienen velocidades muy distintas. Con esta aproximación podemos ser capaces de adaptarnos a productores muy lentos/rápidos con consumidores a velocidades muy distintas, maximizando el trabajo del procesador (evitando las esperas). Ejemplo : twitter y un consumidor local , Y lo contrario una secuencia de números primos elevados y por el otro lado algo que simplemente mande el número. Qué tiene de nuevo : está orientado a flujos de información y es una manera muy rápida de propagar los cambios, evita las esperas, y nos permite centrarnos en el qué hay que realizar más que en cuando. Es la próxima moda pasajera: no lo sé, dependerá de su uso, en cualquier caso , ahora mismo tiene un gran nicho de mercado, especialmente para gobernar interfaces de usuario. Se programa así : como todo en programación tiene sus casos de uso, y es allí donde debemos aprovechar esta tecnología, no tiene sentido aplicar lo mismo en todas partes.
  2. No es la única implementación de programación reactiva, tenemos por ejemplo en la capa front también reactjs , tenemos rxJx , tenemos Akka con su modelo de actores…. Empezo en .Net allá por el 2009 y lo portó a JVM la gente de Netflix en 2014 después de 2 años de desarrollo Se utiliza mucho en Android
  3. Legibilidad: Gestión de errores, códido centrado en lo que queremos hacer y n oen el cómo Paralelizar correctamente siempre es complicado Composicón : mismo principio que unix, haz poco y bien y luego encadena operadores para obtener cosas complejas Sincronía : normalmente utilizaremos asíncrona, pero de hecho por defecto es síncrono. Callback : conlleva al acllaback hell , adema´s no permite composición. STOP BLOCKING Future: en cuanto haces el get e convierte en bloqueante, y a partir del primer nivel de composición empieza a complicarse sobremanera Ahora estamos en un proceso de estandarización de estos temas que lo está llevando reactive-streams.org y que quiere estandarizar las ideas que an promovido akka , reactor o rxJava. En principio está pensado que se incluye en la JDK9. Esta estandarización se basa en el consumo de eventos asícnronos y el control del flujo. RxJava nos sigue dando el plus de la multitud de operadores.
  4. Callback : conlleva al acllaback hell , adema´s no permite composición. STOP BLOCKING Future: en cuanto haces el get e convierte en bloqueante, y a partir del primer nivel de composición empieza a complicarse sobremanera Ahora estamos en un proceso de estandarización de estos temas que lo está llevando reactive-streams.org y que quiere estandarizar las ideas que an promovido akka , reactor o rxJava. En principio está pensado que se incluye en la JDK9. Esta estandarización se basa en el consumo de eventos asícnronos y el control del flujo. RxJava nos sigue dando el plus de la multitud de operadores. Java 8 tiene CompletableFuture que tienen callbacks,tanto si va mal como bien. Lo más parecido son los singles. Y lo bueno que tienen los singles es que son completamente lazys Java 8 también tiene los parallel streams , que tienen muchas semejanzas (son lazy hasta que se utiliza un operador final) , permite filtrado, transformaciones, etc. Java 8 es pull based y Rxjava es push. Los streams no son reaprovechables y los observables si.
  5. Hablar del Push vs Pull . Los observers , no tienen que estar preguntando si hay un evento nuevo, es el observable quien anuncia al observer que existe un nuevo objeto. Por eso es necesario la suscripción. Pensemos por ejemplo en las interfaces , un ratón o un teclado. Tu te suscribes a los dispositivos y recibes el chorro de bytes que viene , y no estás preguntando continuamente si existe una nueva pulsación o click. También se puede hablar aquí de que Observable es el equivalente asíncrono de Iterable. Tendríamos que en síncrono para un objeto tendríamos T getData() y para asíncrono el Future<T> getData y en colleciones tendríamos Iterable y Observable
  6. Los naranjas significan estados finales Poner ejemplos . Una procesión , nazareno , nazareno , el paso , fin. Si llueve, finaliza con error, evento de terminación =) El interfaz observer lo que hace es cubrir estos 3 sucesos con onNext() , onCompleted() y onError().
  7. Muy importante, no percibiremos ningún evento de un observable hasta que nos suscribamos a él
  8. Muy importante, no percibiremos ningún evento de un observable hasta que nos suscribamos a él
  9. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  10. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas Ojo cada vez que aplicamos un operador obtenemos observable INMUTABLE
  11. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  12. Se puede utilizar para generar una sencuencia de fibonacci
  13. Se puede utilizar para generar una sencuencia de fibonacci
  14. Hablar también de concatMap
  15. Ojo con posibles out of memory Mencionar que tb existe el replay que tiene más parametrización
  16. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  17. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  18. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  19. En ocasiones se utiliza después de un fork.
  20. Ojo con utilizar retry , en los hot , ya que se producirá el error continuamente
  21. Ojo con utilizar retry , en los hot , ya que se producirá el error continuamente
  22. Ojo con utilizar retry , en los hot , ya que se producirá el error continuamente
  23. Generalmente lo usamos para mostrar mensajes de error o liberar recursos
  24. Como ejemplo de calientes tenemos un tick de reloj o los eventos de teclado, los frios pueden ser hacer llamadas a un servicio web o realizar una operación I/O que son mucho más costosas
  25. Generalmente lo usamos para mostrar mensajes de error o liberar recursos
  26. . Si nadie se suscribe , nada se ejecuta. Tampoco se reservan recursos, ni se abren conexiones ni nada de nada Explicar por ejemplo con un Observable.from (Base de datos query)
  27. Una proceso de venta que englobaba múltiple sistemas y que tenía problemas para escalar debido a los sistemas que estaba montado. Conseguimos pasar gracias a Vertxx + Rxjava conseguimos multiplicar por 5 las transacciones por segundo. Escalabilidad