2. 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.
3. 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
4. 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, …
8. 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
9. 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
10. 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.
11. Scala Programming @ Madrid
Arquitectura general
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
12. Scala Programming @ Madrid
Canal de eventos:
Apache Kafka
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
13. 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.
14. Scala Programming @ Madrid
Canal de eventos:
Wrapper Akka para Kafka
• Cliente Java síncrono
• Simular asíncronía mediante Comet
technique: 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.
18. Scala Programming @ Madrid
Subsistema – Calculador
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
19. Scala Programming @ Madrid
Subsistema – Calculador:
Concepto
Datos
Datos
Tarifas
Llamadas
Facturas
20. 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
23. Scala Programming @ Madrid
Subsistema – Persistencia
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
24. 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.
29. Scala Programming @ Madrid
Subsistema – Ingestión de datos
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
30. Scala Programming @ Madrid
Subsistema – Ingestión de datos:
Concepto
Ingestión
Datos
Web
Services
FTP
API
(ManualUpload)
31. 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.
43. Scala Programming @ Madrid
Cloud Foundry
• Open PaaS
• Permite escalar apps facilmente.
• SSO y OAUTH2
• Buildpack para Java
• Despliegue de servicio:
– Servicio
– Broker
44. Scala Programming @ Madrid
Escalando los subsistemas
Canal de eventos
API
Ingestión
Datos
Calculador
Persistencia
Datos
Maestros
APIAPIAPI
x10
PersistenciaPersistenciaPersistencia
x5
45. 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
47. 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.
48. Scala Programming @ Madrid
Conclusiones: tecnologías
• Tecnologías nuevas
• Poca documentación
• Comunidad escasa
• Escalables y distribuidas
• Posibilidad de clustering
49. 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
50. Scala Programming @ Madrid
Futuro de Scala
• En España:
– Crece lentamente
– Portings
– Cloud
• Fuera:
– Crece
– Crecerá más con Java 8?
Es necesario comunicar el sistema con el mundo exterior. Para ello se usan APIs
Spray (futuro Akka-HTTP) permite construir capas de integración REST/HTTP.
En un futuro cercano formará parte del módulo de Akka -> Akka-HTTP
Módulos: c
can: cliente y servidor HTTP
http: cabeceras Http (GET; POST …)
routing: Creación de rutas (path, PathPrefix). DSL
json: marshaller y unmarshaller de json
Es necesario comunicar el sistema con el mundo exterior. Para ello se usan APIs
Spray (futuro Akka-HTTP) permite construir capas de integración REST/HTTP.
En un futuro cercano formará parte del módulo de Akka -> Akka-HTTP
Módulos: c
can: cliente y servidor HTTP
http: cabeceras Http (GET; POST …)
routing: Creación de rutas (path, PathPrefix). DSL
json: marshaller y unmarshaller de json
PaaS: Platform as a Service. Un Open PaaS nos ofrece la posibilidad de elegir libremente el IaaS y los frameworks de desarrollo para ejecutar nuestra plataforma de White Rabbit.