scala @ real life
DESCRIPTION
Slides de la charla "Scala @ Real life" del meetup Scala Madrid (http://www.meetup.com/Scala-Programming-Madrid/). 27 de junio de 2014TRANSCRIPT
Scala Programming @ Madrid
Scala @ Real Life
Madrid
Junio 2014
Scala Programming @ Madrid
¿Quiénes somos?
• Javier Santos– Ing. Téc. Informática– Máster en Sist.
Telemáticos.
• David Vallejo– Ing. Téc. Informática– Ing. Telecomunicaciones.
Scala Programming @ Madrid
¿Qué contamos?
• Experiencia personal (Scala + allá de los tutoriales)– Trayectoria con Scala
• Habla Computing
• Tecsisa– ¿Cloud? ¿BigData?
– Arquitectura, subsistemas
– Herramientas de desarrollo
– Conclusiones
Scala Programming @ Madrid
¿Qué es ?
• Características– Lenguaje funcional– Orientado a objetos– Herencia múltiple– Tipado estático– Notación infija– Funciones de orden superior– Opera con la JVM
• Documentación, comunidad, foros, cursos, …
Scala Programming @ Madrid
Scala Programming @ Madrid
Trayectoria con Scala
• Habla Computing– Speech (DSL embebido en Scala)
• Arquitectura– SBT sin documentación (Integración continua)– Sist. Reactivo (Monádico,Sin Akka)– Serialización, Persistencia, actualización de entidades … ¡Home
made!
• Aplicaciones– Evolución constante del lenguaje = refactorización de apps
constante.– Pintxapp, BigBrothapp, Twitter, Trac, …
Scala Programming @ Madrid
Scala Programming @ Madrid
Trayectoria con Scala
• Tecsisa– Sistemas orientados a la nube
– Problemas de big data
– Sistema «T» para operadoras móviles.
– Motivación: • Importación de tarifas móviles públicas
• Cálculo de precios con distintas tarifas
• Facturación
Scala Programming @ Madrid
¿Qué es el Cloud Computing?
• Tendencia de on-Prem software a SaaS.
• Consumo en base al uso
• Escalabilidad.
• Transparente al usuario.
• Distribuido
• Tendencia a que la aplicación cliente sea el browser
Scala Programming @ Madrid
¿Y el Big Data?
• Sistemas que manejan grandes volumenes de datos
• De TBs a PBs• Principales problemas que aborda
– Obtención– Búsquedas/Analyticis– Visualización
• Ejemplos: Genética, Meteorología.
Scala Programming @ Madrid
Arquitectura general
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
Canal de eventos: Apache Kafka
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
Canal de eventos: Apache Kafka
• No sigue estándares: AMQP, STOMP, …
• Origen: Linkedin
• Performance: 100-500k mensajes/segundo
• Semántica operacional– Basado en journal/log.
– Clusterizable. Brokers/particiones
– Grupos de usuarios: lectura At-most-once.
Scala Programming @ Madrid
Canal de eventos: Wrapper Akka para Kafka
• Cliente Java síncrono
• Simular asíncronía mediante Comettechnique: Long polling.
• Idea: crear conectores para los subsistemas Akka de manera que se conecten al canal de eventos a través de mecanismos asíncronos.
Scala Programming @ Madrid
Scala Programming @ Madrid
Scala Programming @ Madrid
Scala Programming @ Madrid
Subsistema – Calculador
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
Subsistema – Calculador:Concepto
Datos
Datos
Tarifas
Llamadas
Facturas
Scala Programming @ Madrid
Subsistema – Calculador:Apache Spark
• MapReduce.• Dos funciones:
– Distribución de datos– Analytics de los mismos
• Mayor rapidez que Hadoop (no es necesario usar HDFS para los cálculos). Serialización en memoria
• RDDs (Resilient Distributed DataSet’s)– Parallelize, fromCassandra– DSL Calliope (Cassandra)– Operaciones map, flatMap, reduce, …
• Paralelizar cálculos: ¿Cómo? → Envío al worker node de la operación serializada
Scala Programming @ Madrid
Subsistema – Calculador:Apache Spark. Ejemplo
Scala Programming @ Madrid
Scala Programming @ Madrid
Subsistema – Persistencia
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
Subsistema – Persistencia:Concepto
• Grandes volúmenes de datos
• BBDD relacionales no escalan (Mantenimiento de integridad referencial).
• BBDD NoSQL: Pocas tablas, gran volumen de registros
• MongoDB, Cassandra.
Scala Programming @ Madrid
Subsistema – Persistencia:Wrapper Akka & cliente Datastax
Scala Programming @ Madrid
Scala Programming @ Madrid
Scala Programming @ Madrid
Scala Programming @ Madrid
Subsistema – Ingestión de datos
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
Subsistema – Ingestión de datos:Concepto
IngestiónDatos
WebServices
FTPAPI
(ManualUpload)
Scala Programming @ Madrid
Subsistema – Ingestión de datos:Integración con WS. ESB’s
• Obtención de datos vía servicios web• Opción 1: Construir los XML's a mano y gestionar manualmente las
peticiones HTTP.• Opción 2: Usar herramientas de integración para arquitecturas
complejas.• ESBs (Enterprise Service Bus) - Orquestación, enrutamiento,
...(ServiceMix, Mule, Camel, ...)• Usamos:
– Camel (rutas, endpoint, processors, ...)– Cxf: Framework OpenSource de servicios. Generación de clases java
anotadas con JAXB.
Scala Programming @ Madrid
Subsistema – Ingestión de datos:Akka Camel
Scala Programming @ Madrid
Subsistema: API REST
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
APIs REST con SPRAY
• Comunicación con el exterior• Capas de integración.• Akka-HTTP• Módulos principales:
– Spray-can– Spray-http– Spray-routing– Spray-json
Scala Programming @ Madrid
Funcionamiento interno de Spray
Su arquitectura se basa en actores.
Scala Programming @ Madrid
Creando rutas con Spray
Scala Programming @ Madrid
Testeando que es gerundio
Spray test-kit:
Scala Programming @ Madrid
Subsistema: Datos Maestros
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
Scala Programming @ Madrid
In-memory Data Grid
Motivaciones:
• Datos maestros comunes
• Caché de una BD
Solución:
• Hazelcast
Scala Programming @ Madrid
¿Qué es Hazelcast?
• Estructuras en memoria distribuida
• Cambios dinámicos
• Open source
• Clustering
• Scalable
• Map Stores
Scala Programming @ Madrid
Infraestructura
OPENSTACK
BOSH
CLOUD FOUNDRY
SCALA APP
SERVICE
Scala Programming @ Madrid
Scala Programming @ Madrid
Cloud Foundry
• Open PaaS
• Permite escalar apps facilmente.
• SSO y OAUTH2
• Buildpack para Java
• Despliegue de servicio:– Servicio
– Broker
Scala Programming @ Madrid
Escalando los subsistemas
Canal de eventos
API
IngestiónDatos
Calculador
Persistencia
DatosMaestros
APIAPIAPI
x10
PersistenciaPersistenciaPersistencia
x5
Scala Programming @ Madrid
Herramientas de desarrollo
• «Dos» formas de desarrollar:– IDE’s : Eclipse (Scala IDE) , IntelliJ– Editor + SBT– Editor + Scalac (?!)
• Integración continua: Jenkins• Subversion/ Git• Artifactory• Metodologías ágiles: Scrum
Scala Programming @ Madrid
Conclusiones
Scala Programming @ Madrid
Conclusiones: aprendizaje
• Dos enfoques– Principiantes: sin experiencia extensa en lenguajes como
C++ o Java. ¿Mayor facilidad para cambiar al «chip» funcional?
– Gente del mundo Java: facilidad de adaptarse progresivamente (Uso de var’s, bucles while, …).
• En cualquier caso: «A escribir se aprende leyendo»
• Jugar y consultar la REPL siempre en caso de duda.
Scala Programming @ Madrid
Conclusiones: tecnologías
• Tecnologías nuevas
• Poca documentación
• Comunidad escasa
• Escalables y distribuidas
• Posibilidad de clustering
Scala Programming @ Madrid
Conclusiones: ámbito laboral
• Para la empresa:– Desarrolladores escasos
– Dificultad para formar a otros desarrolladores
– Miedo al cambio
• Para los programadores:– Poca oferta nacional
Scala Programming @ Madrid
Futuro de Scala
• En España:– Crece lentamente
– Portings
– Cloud
• Fuera:– Crece
– Crecerá más con Java 8?
Scala Programming @ Madrid
Scala Programming @ Madrid
Experiencia personal
Scala Programming @ Madrid
Scala Programming @ Madrid
Conferencias
Scala Programming @ Madrid
Scala Programming @ Madrid
Scala Programming @ Madrid