Servicios de Internet de Próxima Generación utilizando Programación Funcional con Erlang por Juan José Comellas Novamens

1 Servicios de Internet de Próxima Generación utilizando ...
Author: Natalia Moya Castilla
0 downloads 0 Views

1 Servicios de Internet de Próxima Generación utilizando Programación Funcional con Erlang por Juan José Comellas Novamens {mailto,xmpp,sip}:[email protected]

2 Tendencias en hardware para aplicaciones web Procesadores multi-core: 32 cores por CPU para 2010* Clustering Redundancia en base a hardware económico (propenso a fallas) ‏ * Proyecto Keifer de Intel

3 Tendencias en software para aplicaciones web Web 2.0 (AJAX + interactividad comparable a aplicaciones nativas) ‏ HTTP long-polling Lenguajes de programación simples y robustos Tiempos de desarrollo “cortos” Servicio 7x24

4 Desafíos para el desarrollo de aplicaciones web Aplicaciones con alto grado de concurrencia Distribuidas en muchos servidores Manteniendo estado de los “objetos vivos” en tiempo real Desarrollo guiado por tests (test-driven development) ‏ Librerías con interfases asincrónicas para escalar a gran cantidad de requerimientos HTTP bloqueantes simultáneos Actualización de código en ejecución (hot code loading) ‏

5 Lenguajes de programación Haskell, MirandaLenguajes funcionales puros Lenguajes funcionales híbridosLisp, Erlang, Ocaml, Scala, Scheme, Standard ML, Python*, Perl* C, C++, Java, C#, D, Smalltalk, Objective-C, Python*, Perl*, Ruby Lenguajes tradicionales (imperativos) ‏ Ejemplos de lenguajes de programación clasificados según su tipo: *Python y Perl no son lenguajes funcionales, pero un subconjunto de los mismos lo es.

6 Problemas con los lenguajes tradicionales Problema Corrupción de memoria ante errores de sincronización Propensas a deadlocks Interfases sincrónicas no son aptas para accesos remotos Downtime innecesario Threads bloqueados por cada requerimiento HTTP en espera Estado Actual Memoria compartida entre threads Primitivas de sincronización de bajo nivel (mutex, monitor) ‏ Invocaciones remotas con la misma facilidad que las locales Actualización de código en ejecución difícil o engorroso Interfaz sincrónica para requerimientos HTTP

7 Algunas características de los lenguajes funcionales Más parecidos a la matemática que aprendimos en la escuela y la universidad Las “variables” puede ser asignadas una sola vez El estado de la aplicación se mantiene en los argumentos pasados a funciones En general, las funciones sólo modifican aquello que reciben como argumentos (no tienen efectos secundarios) ‏ Mayor uso de recursividad Uso intensivo de pattern-matching

8 ¿Qué es Erlang/OTP? Diseñado para construir sistemas distribuidos, tolerantes a fallas, con respuesta en tiempo real (soft) ‏ Distribución open source desde 1998 Máquina virtual muy estable (Linux, Solaris, Mac OS X, Windows) ‏ Framework para construir aplicaciones tolerantes a fallas (OTP) ‏ Compilador JIT disponible para Intel x86 y AMD64 (HiPE) ‏ Uptime de 99.9999999% sobre switch Ericsson AXD301 (31 ms/año) ‏ Lenguaje funcional diseñado por Joe Armstrong y desarrollado por un equipo de trabajo en Ericsson desde 1987

9 Concurrencia en Erlang No comparten memoria Sólo pueden comunicarse con otros procesos enviándoles mensajes La comunicación es asincrónica Muy livianos (~300 bytes/proceso por defecto) ‏ No están asociados 1 a 1 a los procesos del kernel Para soporte de concurrencia se usa el modelo “Actor” donde la unidad básica de ejecución es el proceso, con las siguientes características:

10 Características de Erlang Gran número (miles) de procesos concurrentes Sistema de tipos dinámico Misma sintaxis para envío de mensajes a procesos locales y remotos Recursividad con optimización de llamada final Actualización de código en ejecución simple y efectiva Polimorfismo resuelto a través de pattern-matching

11 Framework para desarrollar aplicaciones tolerantes a fallas Modelo de control de procesos que los reinicia cuando fallan (árboles de supervisión) Módulos para distintos tipos de servidores (gen_server, gen_event, gen_fsm) ‏ Mnesia: base de datos con replicación multi-master y respuesta en tiempo real con interfase Erlang nativa Asistencia para instalación y actualización de aplicaciones Características de la Open Telecom Platform (OTP) ‏

12 Algunos sitios y servicios que usan Erlang amazon.com web services: SimpleDB, base de datos no relacional provista como complemento al servicio de Elastic Compute Cloud (EC2) y Simple Storage Service (S3) de Amazon facebook.com: sistema de chat interno para 70 M usuarios meebo.com: sitio web para conexión a múltiples clientes de mensajería instantánea usado por 35 M usuarios jabber.org: servidor de mensajería instantánea para más de 10.000 usuarios concurrentes sobre 185.000 registrados (usando ejabberd) ‏

13 Algunos productos hechos con Erlang ejaberrd: servidor XMPP; http://www.ejabberd.imhttp://www.ejabberd.im Yaws: servidor web; http://yaws.hyber.orghttp://yaws.hyber.org RabbitMQ: servidor de colas que implementa el estándar AMQP; http://www.rabbitmq.comhttp://www.rabbitmq.com Scalaris: repositorio tipo clave/valor con arquitectura P2P; primer premio en la IEEE International Scalable Computing Challenge (SCALE 2008) con una réplica de wikipedia.org; 2.500 queries/segundo con 16 CPUs (64 cores); http://www.onscale.eu/scalaris.htmlhttp://www.onscale.eu/scalaris.html CouchDB: base de datos no relacional con interfase REST HTTP; http://www.couchdb.orghttp://www.couchdb.org

14 Yaws vs. Apache 2.0.39 Cantidad de conexiones simultáneas KBytes/seg Benchmark entre Apache (sobre NFS y sobre filesystem local) y Yaws (sobre NFS) ‏ Yaws continúa respondiendo a muchos miles de sesiones gracias a los procesos livianos de Erlang

15 Caso de estudio: Aptela Servicio de central teléfonica de voz sobre IP (SIP) en modo ASP (hosteada) ‏ Montado sobre infraestructura open source (Linux, OpenSER, FreeSWITCH, Asterisk, PostgreSQL, MySQL, etc.) y commodity hardware (x86, AMD64) ‏

16 Características del servicio de Aptela Extensiones con múltiples teléfonos de destino, correo de voz, departamentos, conferencias, fax, ACD, notificaciones por email, grabación de llamadas, etc. Aplicación web que muestra llamadas en tiempo real, reportando eventos de telefonía a medida que se producen; lista de mensajes; lista de contactos

17 Aptela antes del cambio ~5.000 empresas cliente ~25.000 usuarios ~2000 llamadas concurrentes ~8 millones de minutos consumidos por mes Sistema desarrollado en Java y C

18 Razones para el cambio Diseño anterior llegando al límite de su capacidad Capacidad para soportar 10x el volumen de llamadas actuales Usar un lenguaje que simplificara los problemas de concurrencia Necesidad de enviar notificaciones a clientes web de manera eficiente Lograr distribuir fácilmente el sistema en múltiples servidores

19 Costo del cambio a Erlang 2 desarrolladores senior comenzaron a estudiar Erlang y rediseñar el sistema 3 meses antes del comienzo oficial del proyecto Duración estimada del proyecto: 8 meses Equipo de trabajo: 1 arquitecto, 3 senior, 4 semi-senior, 6 junior 1 semana para comprender la sintaxis y librerías básicas de Erlang 3-4 semanas para entender OTP y comenzar a contribuir al proyecto Capacitación en base a presentación del lenguaje al inicio, lectura de documentación, prácticas sobre problemas similares a los del sistema en producción y revisiones de código

20 Principales desafíos encontrados en el cambio Sintaxis “rara”; distinta de la usada en lenguajes derivados de C Requiere un cambio en la forma de pensar los algoritmos debido a diferencias con los lenguajes (imperativos) tradicionales Menos oferta de librerías que en otras plataformas Algunos desarrolladores se mostraron reticentes a incorporarse al proyecto por no ser una tecnología “popular” Difícil encontrar programadores ya capacitados

21 Resultados preliminares Muy satisfechos con el lenguaje Librerías open source disponibles de muy buena calidad Mejoras muy significativas de productividad, sobre todo en las partes más complejas del sistema Mejor performance en el sistema nuevo (aún antes de optimizarlo) que en el que se encuentra en producción En 3 meses de pruebas en entorno de test, el sistema nunca se cayó

22 Conclusiones Erlang provee herramientas para el desarrollo de aplicaciones con un alto grado de concurrencia de manera simple y segura No hay ningún otro lenguaje/máquina virtual con estas características y el nivel de madurez que tiene Erlang Requiere de programadores con ganas de aprender nuevas tecnologías, convenciones y formas de trabajo

23 Sitios de interés Sitio principal de Erlang http://www.erlang.org http://www.erlang.org Uso intensivo de pattern-matching“Functional Programming for the Rest of Us” http://www.defmacro.org/ramblings/fp.htmlhttp://www.defmacro.org/ramblings/fp.html Sitio de comunidad Erlang http://www.trapexit.org http://www.trapexit.org Benchmark entre Apache 2.0.39 y Yaws por Joe Armstrong: http://www.sics.se/~joe/apachevsyaws.html http://www.sics.se/~joe/apachevsyaws.html