Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio

47
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio. Carlos Cruz Gorka Gorrotxategi

Transcript of Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio

  • Escalabilidad horizontal en soluciones VoIP basadas en Asterisk / Kamailio.

    Carlos CruzGorka Gorrotxategi

  • Charla VOIP2DAY 2016

    Objetivos de la presentacin

    Puesta en comn de los desafos y soluciones para el escalado horizontal en soluciones VozIP basadas en Kamailio / Asterisk.

    Especial atencin a las nuevas posiblidades con PJSIP.

    Siempre hablando desde la perspectiva IP PBX !

    Dangerous Demos ;) Un poco de emocin para empezar este

    segundo da del fantstico voip2day 2016!

  • Antes de comenzar ... La idea principal es que no sea una

    charla comercial ;) Esperamos no aburriros ;)

    Quizs nos recordis del VOIP2DAY 2009 ;) La primera charla del Irontec Engineering Team ;)

    Primicia mundial! MCTL.

    Con la aprobacin incluso de IBC!

    No se atrevi a desafiarnos con una mejor implementacin, como cuenta la leyenda que no puede evitarlo ;)

    Production ready XD!

  • En aquellos tiempos ...

  • Para esta ocasin . IVOZ Provider!

    Exposicin previa de nuestro compi Gorka Rodrigo en el workshop ;)

    En esta charla no nos centraremos en ello, no pretende ser una exposicin de producto, sino una puesta en comn de lo que hemos aprendido.

    Keypoints generales Open Source, liberado ayer. Diseado con la mente en:

    Crecer horizontalmente. Crecer horizontalmente. Crecer horizontalmente. Integrable en entornos de operador.

    APIs, Provisin y conceptos clave OSS/BSS Multi-(marca|empresa|usuario)

  • IVOZ Provider Perspectiva de niveles

  • Arquitectura General

    IVOZ Provider

  • Componentes genrales

  • IVOZ Provider: Soft Techs usadas

    RTPENGINE

  • Entrando en harina: Elasticidad / Crecimiento horizontal IVOZ Provider! Exposicin previa de nuestro compi Gorka Rodrigo en el

    workshop ;)

    Keypoints generales

    Open Source, GPL Diseado con la mente en:

    Crecer horizontalmente. Crecer horizontalmente. Crecer horizontalmente. Integrable en entornos de operador. Multi-(marca|empresa|usuario)

    elstic@: Del lat. mod. elasticus, y este del gr. elasts 'maleable' y el lat. - cus ' ico'.

  • Crecimiento con Asterisk y Kamailio Escalabilidad

    Antes de nada, lo habitual: De verdad queremos escalar de una forma diferente a aadir ms hierro?

    Mas de un nodo: HA! Discovering, dolores de cabeza con Split Brains, Fencing si o si (STONITH or DIE!).

    No suele ser mucho aadir y fin, como si fuera una chimenea ms madera ?

    Una vez decidido que queremos si o si escalar:

    Generalmente, se habla de poner un Kamailio por delante y balancear

    Kamailio gestionando Register/Nat/Auth

    Asterisk como IP PBX EOF.

  • Entrando en harina: Elasticidad / Crecimiento horizontal Escalabilidad horizontal Generalmente, se habla de poner un Kamailio por delante y

    balancear

    Kamailio gestionando Register/Nat/Auth

    Asterisk como IP PBX EOF.

  • Proceso habitual de escalado Kamailio liberando a Asterisk

    Dispatcher module Check AS are alive Call load distribution!

    Registrar + usrloc + nathelper nat_bflag + sipping_bflag for NAT handling

    Path module Outboundproxy for REGISTERs

    Rtpengine / rtpproxy Keep audio away from Asterisk!

  • Espera un instante...No tan rpido!

    Esto significa ...

  • Simplemente msSoft-Hard Asterisk

    boxesy c'est fini ?

  • Podemos grabar esto en piedra?Cualquier llamada, a cualquier Asterisk?

    Verdad verdadera?

  • Kamailio delante de Asterisk en el mundo IP PBX Problemticas esperadas

    Call pickup.

    Presencia (blf ;) )

    S, DEVICE_STATUS

    ConfBridge

    Refers!

    S, transferencias, de todos los

    colores ;)

    Queues!

    Dividimos por Empresas?

    Volvemos aActivo-Pasivo yfin de la charla? Quitamos

    Features, BOFH mode

    ON?

    De verdadhabamos dicho

    eso?Seguro

    que la piedraNo se borra?

  • Any Call to Any Asterisk Primer Desafo: Call Pickup

    Llamada a una extensin especial: e.g. *95

    Aplicacin pickup en Asterisk:

    pickup(endpoint) Captura directa

    pickup() Captura indirecta

    1 endpoint n pickupGroups

    Qu pasa si la llamada a *95 se gestiona en un AS distinto al que est procesando la llamada a capturar?

  • Any Call to Any Asterisk Primer Desafo: Call Pickup

    ds_next_dst() on failure_route (sequential vs parallel)

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

    En versiones previas de Asterisk, posibilidades: CoroSync + OpenAIS XMPP PubSub

    Con PJSIP / Asterisk > 13 la cosa cambia: pjsip.conf:

    Para enviar estado: Objetos asterisk-publication Objetos outbound-publish

    Para recibir estado: Objetos inbound-publication

    Fuente: https://wiki.asterisk.org/wiki/display/AST/Exchanging+Device+and+Mailbox+State+Using+PJSIP

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

    Publicar cambios de DEVICE-STATE:

    Asterisk enviara PUBLISH con sus cambios de device-state a 172.16.10.2 Recibir cambios de DEVICE-STATE:

    Los PUBLISH que reciba Asterisk de instance2 con informacin de estado, actualizarn los device-state propios.

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

    Este ejemplo vale para 2 instancias de Asterisk.

    Que un Asterisk avise al resto no escala: El nmero de Asterisk no es fijo. Un Asterisk no sabe si est solo o si hay 100 Asterisk ms. El trfico de PUBLISH cargara Asterisk (que tiene que gestionar la

    llamada!)

    Solucin empleada: Cada Asterisk enva a Kamailio los PUBLISH con sus cambios. Kamailio reenva el PUBLISH al resto de AS-es:

    Dispatcher modules rocks!

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

    Kamailio redistribuye (utilizando dispatcher):

    Asterisk actualiza device-state:

  • Any Call to Any Asterisk Segundo desafo: Distributed Device State

    Flujo tras reiniciar un AS (o aadir uno nuevo):

    En caso de crash, los device-states vuelve a NOT_INUSE.

  • Any Call to Any Asterisk Conclusiones del Segundo desafo:

    No se requiere SW adicional (PJSIP powered!)

    Todos los Asterisk tienen los mismos DEVICE STATE

    Los DEVICE STATE son clave para:

    Hints (BLF)

    Saber si un usuario est ocupado o no

    Colas

    NOTIFY/SUBSCRIBE: cada AS gestiona los que le lleguen (al igual que los INVITEs, los SUBSCRIBE tambin se reparten).

  • Any Call to Any Asterisk Tercer desafo: ConfBridge

    Long time ago Aplicacin Asterisk que sustituye a MeetMe

    Mltiples Asterisk: posibles problemas de sincrona

    1) El primer participante tiene que generar la conferencia en el AS que le toque

    2) El siguiente participante tiene que entrar en la conferencia creada, no crear una propia!

    3) Y si entran muy muy a la par?

  • Any Call to Any Asterisk Tercer desafo: ConfBridge

    Solucin 1: Salas de conferencias anidadas Crear la conferencia all donde caiga la llamada Anidar los Asterisk por medio de chanlocals (va Kamailio)

    Es tcnicamente viable pero

    Y si quiero echar a alguien de

    la conferencia?

    Visualizacin web realtime

    Voluntarios para mantener esto?

    Tiene que haber una solucin ms simple!!

  • Any Call to Any Asterisk Tercer desafo: ConfBridge

    Solucin 2: PJSIP AL RESCATE!

    PJSIP crea automticamente un DEVICE STATE por sala de conferencia

    Pero siempre tras meter el PIN.

    La introduccin de PIN puede provocar colisiones.

    Patch para poner en RINGING durante la peticin de PIN

    Liberado en github ;)

  • Any Call to Any Asterisk Cuarto desafo: Refers

    REFER es el mtodo SIP clave para las transferencias de llamada.

    2 tipos de transferencia de llamadas:

    Transferencia ciega: in-dialog REFER instando al B2BUA a crear otra llamada y conectar la actual.

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Transferencia atendida:

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Transferencia atendida:

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Dibujemos ...

    (va AS01)

    (va AS02)

    #define anycall2anyasterisk

    Alice llama a Bob+Alice llama a Bofh+Alice les quiere poner en contacto--------------------------------------------= 481 Call/Transaction Does Not Exist

    Todas las llamadas delmismo usuario,

    Mismo AS?

    Quita ese#define!

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Solucin 1: las llamadas de un usuario a un AS Te pones triste porque pierdes escalado pero.. qu le vas a hacer? Al menos sigue habiendo un cierto reparto Pero

    A llama a B (AS001) A llama a C para transferir (AS001 forzado) C tena otra llamada en curso con D (AS002) C inicia otra llamada:

    Uso AS001 por si transfiere a B? Uso AS002 por si transfiere a D?

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Solucin 2: las llamadas de una empresa a un AS Asignacin esttica empresa AS ?

    No era esto lo que queramos evitar? XD Asignacin dinmica!

    Primera llamada: AS que ms libre est Mientras haya en curso: ese mismo AS Una vez que cuelgan todos: AS ms libre

    Al menos sigue habiendo un cierto reparto :( Pero

    Y si llaman justo a la par? Adems: podremos mirarnos al espejo? y decirnos:

    Oh yeah, hay crecimiento horizontal. Y venir aqu a contar la batallita del escalado.

    Quitamos la feature XFER y fin ?

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Solucin 3: PJSIP REPLACER LOGIC!! Cuando Asterisk 13 PJSIP recibe REFER con:

    Y no reconoce el Call-ID de Replaces, permite ejecutar dialplan en un contexto especial:

    Hacemos que este bloque llame al Kamailio que, al saber dnde se gestiona la llamada, lo manda al AS oportuno.

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Charlie llama a 101 (dlg1 as003):

    Charlie llama a 102 para transferir (dlg2 as002):

    Sobre dlg1 llega el siguiente REFER:

    as003 no conoce este CallID...

  • Any Call to Any Asterisk Cuarto desafo: Refers

    Dilogo adicional entre AS:

  • Any Call to Any Asterisk Queues!

    Las colas plantean retos similares.

    En lo que respecta IVOZ Provider:Todava no hemos tomado una decisin.

    Posibles enfoques: Una cola Un AS (dislike)

    shared last call? Weight? Todas las colas Un AS (peor) Todas las colas en todos los AS-es, Any Call to Any Asterisk !!!

    En su momentos nos enfocamos (mala idea?) Votaciones con Corosync2

    Concepto de other Asterisk en queue_ent Distributed Stasis Core?

    Se ha comentado que Matt Jordan ya est en ello!

  • Escalado ms all de Asterisk Asterisk escala horizontalmente...

    Ya podemos escalar nuestra instalacin para trabajar con mltiples Asterisk.

    Pero una vez que la llamada est establecida, Asterisk no es un problema para soportar altos niveles de concurrencia de llamadas.

    S para soportar altos niveles de call-per-seconds ;) Quin es el nuevo cuello de botella? Los media-relay que se

    encargan de gestionar el audio.

    Conclusin: hay que escalar los media-relay tambin!

  • Escalado ms all de Asterisk RTPProxy escala horizontalmente...

    Se puede crear tantos perfiles media-relay como sean necesarios.

    La ubicacin de estos elementos tendr que ser lo ms prxima posible a los usuarios finales:

    Hasta que llegue ICE, hay que minimizar el media-path! Actualmente:

    Los media-relays se agrupan en sets. La asociacin set empresa es manual.

    Evolucin: Asignar ubicacin a los sets. Asignar los sets en funcin de la ubicacin del llamante (geoIP

    Kamailio module).

  • Escalado geogrfico

    SIP

    RTP

  • to be continued No nos da tiempo a hablar de todo No hay que olvidarse

    de: Topic Information Sharing (AMQP?)

    Containers! LXC, Docker?, Network Overlaying?

    Orchestration Orchestra Director? Launch AS on peak times?

    Asterisk High CPS / Dynamic Flow Strategys [A?]GIs vs Pseudo static Dialplan?

  • Probando IVOZ Provider ! AnyCall2AnyAsterisk: Queues xx

    DEMO TIME!

  • Esto que vamos a ensear IVOZ Provider is free! Lo podis probar vosotr@s mism@s

    Entry point: https://github.com/irontec/ivozprovider

    Debian packages disponibles

    ISO disponible Single machine quick test.

    Documentacin

    SOS / Contribute Users Mailing List Dev Mailing List

    https://github.com/irontec/ivozprovider

  • Basta de charla !

    AhhPero haba

    que ensearlo?

    Bob!Prepara el

    cartonpiedra!

    Bob!Prepara el

    cartonpiedra!

    Seguro que Queda tiempo?

    Mejor acabamos,Demo en otro momento ...

  • Muchas gracias por vuestra atencin! Gracias por escucharnos!

    Preguntas?

    Irontec Engineering Team

    www.irontec.comblog.irontec.com

    @irontec

    http://www.irontec.com/

    Diapositiva 1Diapositiva 2Diapositiva 3Diapositiva 4Diapositiva 5Diapositiva 6Diapositiva 7Diapositiva 8Diapositiva 9Diapositiva 10Diapositiva 11Diapositiva 12Diapositiva 13Diapositiva 14Diapositiva 15Diapositiva 16Diapositiva 17Diapositiva 18Diapositiva 19Diapositiva 20Diapositiva 21Diapositiva 22Diapositiva 23Diapositiva 24Diapositiva 25Diapositiva 26Diapositiva 27Diapositiva 28Diapositiva 29Diapositiva 30Diapositiva 31Diapositiva 32Diapositiva 33Diapositiva 34Diapositiva 35Diapositiva 36Diapositiva 37Diapositiva 38Diapositiva 39Diapositiva 40Diapositiva 41Diapositiva 42Diapositiva 43Diapositiva 44Diapositiva 45Diapositiva 46Diapositiva 47