SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Gestión de llamadas con
             Erlang/OTP
    Manuel Ángel Rubio Jiménez
¿Quién soy?
Programador desde hace 20 años
  Basic, Modula-2, Pascal, C, C++, Ensamblador, Java,
  Perl, PHP, Python, Ruby, JavaScript, Lua, ... y
  Erlang.
Desarrollador desde hace 7 años
  Metodologías clásicas, Métrica-3, RUP, Scrum, Xtreme
  Programming, Kan-ban, DSDM, ASD, …
Gerente de Desarrollo de Voz en Jet Multimedia
  Red Inteligente (900, 901, 902, 905, 806, …),
  sistemas virtuales de telefonía y VoIP.
Blog
  http://bosqueviejo.net
La Red Inteligente

               Inteligencia
                Inteligencia
               en la gestión
               en la gestión
              de las llamadas
              de las llamadas




              90X, 80X
              90X, 80X
                                9X, 6X

Usuarios
Soluciones antes de 2008

Caso del 1414




        90X, 80X
        90X, 80X     9X, 6X
                     9X, 6X
Soluciones antes de 2008

Caso del 1414



                                 Asterisk
                                 Asterisk
                                 Código C
                                 Código C
                                Semáforos
                                Semáforos
                            Listas enlazadas
                             Listas enlazadas
                   Límite software de 20 a 30 llamadas
                   Límite software de 20 a 30 llamadas




        90X, 80X
        90X, 80X                    9X, 6X
                                    9X, 6X
Soluciones antes de 2008

Caso del 1414



                                 Asterisk
                                 Asterisk
                                 Código C
                                 Código C
                                Semáforos
                                Semáforos
                            Listas enlazadas
                             Listas enlazadas
                   Límite software de 20 a 30 llamadas
                   Límite software de 20 a 30 llamadas




        90X, 80X
        90X, 80X                    9X, 6X
                                    9X, 6X
Soluciones antes de 2008

Caso Cetelem




                     X   9X
                         9X
                    6X
                 ,, 6      ,, 6
                              6X
               9X
               9X               X
Soluciones antes de 2008

   Caso Cetelem
Diseño en PHP inoperante
Diseño en PHP inoperante
el sistema funciona bien
el sistema funciona bien
  con poca carga, pero
  con poca carga, pero
Cetelem pide campañas de
Cetelem pide campañas de
    10.000 contactos
    10.000 contactos



                                 X   9X
                                     9X
                                6X
                             ,, 6      ,, 6
                                          6X
                           9X
                           9X               X
Soluciones antes de 2008

   Caso Cetelem
Diseño en PHP inoperante
Diseño en PHP inoperante
el sistema funciona bien
el sistema funciona bien
  con poca carga, pero
  con poca carga, pero
Cetelem pide campañas de
Cetelem pide campañas de
    10.000 contactos
    10.000 contactos



                                 X   9X
                                     9X
                                6X
                             ,, 6      ,, 6
                                          6X
                           9X
                           9X               X
Soluciones antes de 2008




Diseño de procesos
Diseño de procesos
 para uso con PHP
 para uso con PHP
Soluciones antes de 2008




Diseño de procesos
Diseño de procesos
 para uso con PHP
 para uso con PHP
Soluciones con Erlang
            Concepto de ACD
Hacemos que la lógica
permanezca en un núcleo




                            Núcleo     Asterisk
                          Erlang/OTP
Soluciones con Erlang
            Concepto de ACD
El núcleo se encarga de obtener la información
de configuración, así como mantener datos
de informes, estadísticas, etc.




      PostgreSQL            Núcleo               Asterisk
                          Erlang/OTP
Soluciones con Erlang
            Concepto de ACD
Y ya que estamos, damos información a
los agentes a través de XMPP, en una aplicación
de escritorio Java.




      PostgreSQL                Núcleo        Asterisk
                              Erlang/OTP




                   ejabberd
Datos Numéricos
                              Asterisk + MySQL           Asterisk + Erlang
      Máquinas de Asterisk              1                       2+
Llamadas simultáneas H.323         20-30                   80~ x NºMáq.
  Llamadas simultáneas SIP          ???                    200~ x NºMáq.



                     Pruebas de Stress

                                            Asterisk + Erlang
                   Llamadas entrantes             230
                   Nivel de Carga CPU             0.36
Prueba de fuego

Censo del Campo con 200 agentes
Atendiendo llamadas.




               90X, 80X
               90X, 80X           9X, 6X
                                  9X, 6X
Prueba de fuego

Censo del Campo con 200 agentes
Atendiendo llamadas.

                          La solución es acogida con éxito
                          y el INE aún sigue con nosotros.




               90X, 80X
               90X, 80X                     9X, 6X
                                            9X, 6X
Soluciones con Erlang
           Concepto de Colas
Hacemos que la lógica
permanezca en un núcleo




                            Núcleo     Asterisk
                          Erlang/OTP
Soluciones con Erlang
           Concepto de Colas
El núcleo se encarga de obtener la información
de configuración, así como mantener datos
de informes, estadísticas, etc.




      PostgreSQL            Núcleo               Asterisk
                          Erlang/OTP
Desafío

Volvemos al 1414, para comprobar
la potencia de nuestra solución.




           90X, 80X
           90X, 80X                9X, 6X
                                   9X, 6X
Desafío

Volvemos al 1414, para comprobar
la potencia de nuestra solución.



                       La solución es acogida con éxito
                       y nos dan el tráfico del 1472, así
                       como dar más servicios que antes no
                       era posible dar.




           90X, 80X
           90X, 80X                      9X, 6X
                                         9X, 6X
Soluciones con Erlang
            Concepto de JCM
El núcleo toma información de los contactos
y los gestiona pare realizar las llamadas.




      PostgreSQL            Núcleo
                          Erlang/OTP
Soluciones con Erlang
            Concepto de JCM
Lanza las llamadas para contactar
y anota los resultados en la base de datos.




      PostgreSQL            Núcleo            Asterisk
                          Erlang/OTP
Soluciones con Erlang
                Concepto de JCM


                            Núcleo
                          Erlang/OTP




PostgreSQL       Núcleo                Operador   Asterisk
Datos Numéricos


                               PHP                 Erlang
  Llamadas a gestionar        3000                 22000+
Tiempos de comprobación      1-5 seg               1 seg




   ✔ PHP se cuelga con frecuencia.
   ✔ El procesado de datos en PHP es muy costoso
     (tiempo + memoria).
Potenciando

Las campañas pueden ser mayores,
más contactos, y más campañas
simultáneas.




                          X        9X
                                   9X
                         6X
                      ,, 6           ,, 6
                                        6X
                    9X
                    9X                    X
Potenciando

Llegamos a procesar campañas
de hasta 50.000 contactos en
un solo día... otro éxito más.




                          X      9X
                                 9X
                         6X
                      ,, 6         ,, 6
                                      6X
                    9X
                    9X                  X
La Tentación
JVM vs BEAM
                      JVM      BEAM
    Soft-realtime     No        Sí
     Distribución     No        Sí
  Multiplataforma     Sí        Sí
    Multi-Proceso    Hilos   Procesos
    Código Nativo     No*      HiPE
Tolerante a fallos    No*       Sí
JVM vs BEAM
                       JVM      BEAM
    Soft-realtime      No        Sí
     Distribución      No        Sí
  Multiplataforma      Sí        Sí
    Multi-Proceso     Hilos   Procesos
    Código Nativo      No*      HiPE
Tolerante a fallos     No*       Sí




                 ¿ Erjang ?
JVM vs BEAM
                       JVM      BEAM
    Soft-realtime      No        Sí
     Distribución      No        Sí
  Multiplataforma      Sí        Sí
    Multi-Proceso     Hilos   Procesos
    Código Nativo      No*      HiPE
Tolerante a fallos     No*       Sí




                 ¿ Erjang ?
JVM vs BEAM
                         JVM      BEAM
    Soft-realtime        No        Sí
     Distribución        No        Sí
  Multiplataforma        Sí        Sí
    Multi-Proceso       Hilos   Procesos
    Código Nativo        No*      HiPE
Tolerante a fallos       No*       Sí




                     Jarlang
Beneficios

✔ Distribución
Beneficios

✔ Distribución

✔ Alta Disponibilidad
Beneficios

✔ Distribución

✔ Alta Disponibilidad                S
                                     S
✔ Tolerancia a Fallos

                               P
                               P     P
                                     P   P
                                         P
Beneficios

✔ Distribución
                            ➢ gen_server
✔ Alta Disponibilidad

✔ Tolerancia a Fallos       ➢ gen_fsm
✔ ¡¡¡ Behaviours !!!
                            ➢ gen_event

                            ➢ application

                            ➢ supervisor
¿Preguntas?
Agradecimientos
➢ Universidad Complutense de Madrid

➢ Grupo de Usuarios de Erlang Madrid

➢ Jet Multimedia España, S.A.

➢ A todos vosotros

Weitere ähnliche Inhalte

Ähnlich wie Gestión de Llamadas con Erlang/OTP

Computación evolutiva no tradicional
Computación evolutiva no tradicionalComputación evolutiva no tradicional
Computación evolutiva no tradicionalJuan J. Merelo
 
Alta disponibilidad en Integración de Elastix con Centrales Legacy
Alta disponibilidad en Integración de Elastix con Centrales LegacyAlta disponibilidad en Integración de Elastix con Centrales Legacy
Alta disponibilidad en Integración de Elastix con Centrales LegacyPaloSanto Solutions
 
20120926 web perf-dns_v1
20120926 web perf-dns_v120120926 web perf-dns_v1
20120926 web perf-dns_v1Sergim
 
Diseño experimental
Diseño experimentalDiseño experimental
Diseño experimentaljtjcinvestav
 
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbao
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP BilbaoPresentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbao
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbaoopenerpsite
 
Sistema Operativo RedHat
Sistema Operativo RedHatSistema Operativo RedHat
Sistema Operativo RedHatDraven Draven
 
0. sistemas microprocesados
0. sistemas microprocesados0. sistemas microprocesados
0. sistemas microprocesadosDavid Narváez
 

Ähnlich wie Gestión de Llamadas con Erlang/OTP (10)

Computación evolutiva no tradicional
Computación evolutiva no tradicionalComputación evolutiva no tradicional
Computación evolutiva no tradicional
 
Alta disponibilidad en Integración de Elastix con Centrales Legacy
Alta disponibilidad en Integración de Elastix con Centrales LegacyAlta disponibilidad en Integración de Elastix con Centrales Legacy
Alta disponibilidad en Integración de Elastix con Centrales Legacy
 
Final
FinalFinal
Final
 
20120926 web perf-dns_v1
20120926 web perf-dns_v120120926 web perf-dns_v1
20120926 web perf-dns_v1
 
Diseño experimental
Diseño experimentalDiseño experimental
Diseño experimental
 
Fun programacion-00-introduccion-algoritmos
Fun programacion-00-introduccion-algoritmosFun programacion-00-introduccion-algoritmos
Fun programacion-00-introduccion-algoritmos
 
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbao
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP BilbaoPresentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbao
Presentación caso de éxito Fernando Sarriá Jornadas OpenERP Bilbao
 
Sistema Operativo RedHat
Sistema Operativo RedHatSistema Operativo RedHat
Sistema Operativo RedHat
 
Red hat Linux
Red hat LinuxRed hat Linux
Red hat Linux
 
0. sistemas microprocesados
0. sistemas microprocesados0. sistemas microprocesados
0. sistemas microprocesados
 

Mehr von Manuel Rubio

Creating your Non-Stop Elixir Application
Creating your Non-Stop Elixir ApplicationCreating your Non-Stop Elixir Application
Creating your Non-Stop Elixir ApplicationManuel Rubio
 
PHP over Erlang - Code BEAM STO 2019
PHP over Erlang - Code BEAM STO 2019PHP over Erlang - Code BEAM STO 2019
PHP over Erlang - Code BEAM STO 2019Manuel Rubio
 
¡Mejora el Rendimiento de tu Webapp con Elixir!
¡Mejora el Rendimiento de tu Webapp con Elixir!¡Mejora el Rendimiento de tu Webapp con Elixir!
¡Mejora el Rendimiento de tu Webapp con Elixir!Manuel Rubio
 
Manejando Millones de Usuarios Concurrentes con Erlang/OTP
Manejando Millones de Usuarios Concurrentes con Erlang/OTPManejando Millones de Usuarios Concurrentes con Erlang/OTP
Manejando Millones de Usuarios Concurrentes con Erlang/OTPManuel Rubio
 
Chicago boss - Altenwald - Betabeers X Córdoba
Chicago boss - Altenwald - Betabeers X CórdobaChicago boss - Altenwald - Betabeers X Córdoba
Chicago boss - Altenwald - Betabeers X CórdobaManuel Rubio
 
Erlang/OTP - Altenwald - CodeMotion Madrid 2013
Erlang/OTP - Altenwald - CodeMotion Madrid 2013Erlang/OTP - Altenwald - CodeMotion Madrid 2013
Erlang/OTP - Altenwald - CodeMotion Madrid 2013Manuel Rubio
 
Erlang/OTP - V Taller de Programación Funcional
Erlang/OTP - V Taller de Programación FuncionalErlang/OTP - V Taller de Programación Funcional
Erlang/OTP - V Taller de Programación FuncionalManuel Rubio
 
Erlang otp yuilop - ieee developer days 2013
Erlang otp   yuilop - ieee developer days 2013Erlang otp   yuilop - ieee developer days 2013
Erlang otp yuilop - ieee developer days 2013Manuel Rubio
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaManuel Rubio
 

Mehr von Manuel Rubio (9)

Creating your Non-Stop Elixir Application
Creating your Non-Stop Elixir ApplicationCreating your Non-Stop Elixir Application
Creating your Non-Stop Elixir Application
 
PHP over Erlang - Code BEAM STO 2019
PHP over Erlang - Code BEAM STO 2019PHP over Erlang - Code BEAM STO 2019
PHP over Erlang - Code BEAM STO 2019
 
¡Mejora el Rendimiento de tu Webapp con Elixir!
¡Mejora el Rendimiento de tu Webapp con Elixir!¡Mejora el Rendimiento de tu Webapp con Elixir!
¡Mejora el Rendimiento de tu Webapp con Elixir!
 
Manejando Millones de Usuarios Concurrentes con Erlang/OTP
Manejando Millones de Usuarios Concurrentes con Erlang/OTPManejando Millones de Usuarios Concurrentes con Erlang/OTP
Manejando Millones de Usuarios Concurrentes con Erlang/OTP
 
Chicago boss - Altenwald - Betabeers X Córdoba
Chicago boss - Altenwald - Betabeers X CórdobaChicago boss - Altenwald - Betabeers X Córdoba
Chicago boss - Altenwald - Betabeers X Córdoba
 
Erlang/OTP - Altenwald - CodeMotion Madrid 2013
Erlang/OTP - Altenwald - CodeMotion Madrid 2013Erlang/OTP - Altenwald - CodeMotion Madrid 2013
Erlang/OTP - Altenwald - CodeMotion Madrid 2013
 
Erlang/OTP - V Taller de Programación Funcional
Erlang/OTP - V Taller de Programación FuncionalErlang/OTP - V Taller de Programación Funcional
Erlang/OTP - V Taller de Programación Funcional
 
Erlang otp yuilop - ieee developer days 2013
Erlang otp   yuilop - ieee developer days 2013Erlang otp   yuilop - ieee developer days 2013
Erlang otp yuilop - ieee developer days 2013
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la Práctica
 

Gestión de Llamadas con Erlang/OTP

  • 1. Gestión de llamadas con Erlang/OTP Manuel Ángel Rubio Jiménez
  • 2. ¿Quién soy? Programador desde hace 20 años Basic, Modula-2, Pascal, C, C++, Ensamblador, Java, Perl, PHP, Python, Ruby, JavaScript, Lua, ... y Erlang. Desarrollador desde hace 7 años Metodologías clásicas, Métrica-3, RUP, Scrum, Xtreme Programming, Kan-ban, DSDM, ASD, … Gerente de Desarrollo de Voz en Jet Multimedia Red Inteligente (900, 901, 902, 905, 806, …), sistemas virtuales de telefonía y VoIP. Blog http://bosqueviejo.net
  • 3. La Red Inteligente Inteligencia Inteligencia en la gestión en la gestión de las llamadas de las llamadas 90X, 80X 90X, 80X 9X, 6X Usuarios
  • 4. Soluciones antes de 2008 Caso del 1414 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 5. Soluciones antes de 2008 Caso del 1414 Asterisk Asterisk Código C Código C Semáforos Semáforos Listas enlazadas Listas enlazadas Límite software de 20 a 30 llamadas Límite software de 20 a 30 llamadas 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 6. Soluciones antes de 2008 Caso del 1414 Asterisk Asterisk Código C Código C Semáforos Semáforos Listas enlazadas Listas enlazadas Límite software de 20 a 30 llamadas Límite software de 20 a 30 llamadas 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 7. Soluciones antes de 2008 Caso Cetelem X 9X 9X 6X ,, 6 ,, 6 6X 9X 9X X
  • 8. Soluciones antes de 2008 Caso Cetelem Diseño en PHP inoperante Diseño en PHP inoperante el sistema funciona bien el sistema funciona bien con poca carga, pero con poca carga, pero Cetelem pide campañas de Cetelem pide campañas de 10.000 contactos 10.000 contactos X 9X 9X 6X ,, 6 ,, 6 6X 9X 9X X
  • 9. Soluciones antes de 2008 Caso Cetelem Diseño en PHP inoperante Diseño en PHP inoperante el sistema funciona bien el sistema funciona bien con poca carga, pero con poca carga, pero Cetelem pide campañas de Cetelem pide campañas de 10.000 contactos 10.000 contactos X 9X 9X 6X ,, 6 ,, 6 6X 9X 9X X
  • 10. Soluciones antes de 2008 Diseño de procesos Diseño de procesos para uso con PHP para uso con PHP
  • 11. Soluciones antes de 2008 Diseño de procesos Diseño de procesos para uso con PHP para uso con PHP
  • 12. Soluciones con Erlang Concepto de ACD Hacemos que la lógica permanezca en un núcleo Núcleo Asterisk Erlang/OTP
  • 13. Soluciones con Erlang Concepto de ACD El núcleo se encarga de obtener la información de configuración, así como mantener datos de informes, estadísticas, etc. PostgreSQL Núcleo Asterisk Erlang/OTP
  • 14. Soluciones con Erlang Concepto de ACD Y ya que estamos, damos información a los agentes a través de XMPP, en una aplicación de escritorio Java. PostgreSQL Núcleo Asterisk Erlang/OTP ejabberd
  • 15. Datos Numéricos Asterisk + MySQL Asterisk + Erlang Máquinas de Asterisk 1 2+ Llamadas simultáneas H.323 20-30 80~ x NºMáq. Llamadas simultáneas SIP ??? 200~ x NºMáq. Pruebas de Stress Asterisk + Erlang Llamadas entrantes 230 Nivel de Carga CPU 0.36
  • 16. Prueba de fuego Censo del Campo con 200 agentes Atendiendo llamadas. 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 17. Prueba de fuego Censo del Campo con 200 agentes Atendiendo llamadas. La solución es acogida con éxito y el INE aún sigue con nosotros. 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 18. Soluciones con Erlang Concepto de Colas Hacemos que la lógica permanezca en un núcleo Núcleo Asterisk Erlang/OTP
  • 19. Soluciones con Erlang Concepto de Colas El núcleo se encarga de obtener la información de configuración, así como mantener datos de informes, estadísticas, etc. PostgreSQL Núcleo Asterisk Erlang/OTP
  • 20. Desafío Volvemos al 1414, para comprobar la potencia de nuestra solución. 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 21. Desafío Volvemos al 1414, para comprobar la potencia de nuestra solución. La solución es acogida con éxito y nos dan el tráfico del 1472, así como dar más servicios que antes no era posible dar. 90X, 80X 90X, 80X 9X, 6X 9X, 6X
  • 22. Soluciones con Erlang Concepto de JCM El núcleo toma información de los contactos y los gestiona pare realizar las llamadas. PostgreSQL Núcleo Erlang/OTP
  • 23. Soluciones con Erlang Concepto de JCM Lanza las llamadas para contactar y anota los resultados en la base de datos. PostgreSQL Núcleo Asterisk Erlang/OTP
  • 24. Soluciones con Erlang Concepto de JCM Núcleo Erlang/OTP PostgreSQL Núcleo Operador Asterisk
  • 25. Datos Numéricos PHP Erlang Llamadas a gestionar 3000 22000+ Tiempos de comprobación 1-5 seg 1 seg ✔ PHP se cuelga con frecuencia. ✔ El procesado de datos en PHP es muy costoso (tiempo + memoria).
  • 26. Potenciando Las campañas pueden ser mayores, más contactos, y más campañas simultáneas. X 9X 9X 6X ,, 6 ,, 6 6X 9X 9X X
  • 27. Potenciando Llegamos a procesar campañas de hasta 50.000 contactos en un solo día... otro éxito más. X 9X 9X 6X ,, 6 ,, 6 6X 9X 9X X
  • 29. JVM vs BEAM JVM BEAM Soft-realtime No Sí Distribución No Sí Multiplataforma Sí Sí Multi-Proceso Hilos Procesos Código Nativo No* HiPE Tolerante a fallos No* Sí
  • 30. JVM vs BEAM JVM BEAM Soft-realtime No Sí Distribución No Sí Multiplataforma Sí Sí Multi-Proceso Hilos Procesos Código Nativo No* HiPE Tolerante a fallos No* Sí ¿ Erjang ?
  • 31. JVM vs BEAM JVM BEAM Soft-realtime No Sí Distribución No Sí Multiplataforma Sí Sí Multi-Proceso Hilos Procesos Código Nativo No* HiPE Tolerante a fallos No* Sí ¿ Erjang ?
  • 32. JVM vs BEAM JVM BEAM Soft-realtime No Sí Distribución No Sí Multiplataforma Sí Sí Multi-Proceso Hilos Procesos Código Nativo No* HiPE Tolerante a fallos No* Sí Jarlang
  • 35. Beneficios ✔ Distribución ✔ Alta Disponibilidad S S ✔ Tolerancia a Fallos P P P P P P
  • 36. Beneficios ✔ Distribución ➢ gen_server ✔ Alta Disponibilidad ✔ Tolerancia a Fallos ➢ gen_fsm ✔ ¡¡¡ Behaviours !!! ➢ gen_event ➢ application ➢ supervisor
  • 38. Agradecimientos ➢ Universidad Complutense de Madrid ➢ Grupo de Usuarios de Erlang Madrid ➢ Jet Multimedia España, S.A. ➢ A todos vosotros