Kamailio - Modulo DISPATCHER y el nuevo algoritmo basado en la latencia de los Gateway

En la versión 5.5 de Kamailio, que ha sido liberada el pasado 5 de mayo, el modulo DISPTACHER trae una novedad bastante interesante; un nuevo algoritmo para distribuir las llamadas basado en la latencia de los Gateway utilizados. De esta forma será mucho más sencillo distribuir de manera dinámica y automática todas las solicitudes SIP solamente a los GATEWAY que están ofreciendo en cada momento un buen desempeño.

Un limite del modulo DISPATCHER antes de este algoritmo era que la única forma de desactivar un GATEWAY estaba basado en los PING (SIP OPTIONS) enviados y no contestados; como se pueden dar cuenta un sistema útil pero bastante ineficiente ya que el hecho que un GATEWAY vuelva a funcionar (contesta los OPTIONS) no significa que esté prestando el mejor desempeño (alta latencia, perdida aleatoria de paquetes, etc.)

En este articulo vamos a intentar explicar como funciona el nuevo algoritmo. En el modulo DSPATCHER para la configuración de los Gateway se puede utilizar un archivo de texto o una tabla de la base de datos que se puede crear al momento de la instalación de Kamailio. Esa tabla contiene los siguientes campos:

  • id: es un numero progresivo que automáticamente se asignará a cada entrada presente en la tabla

  • setid: es posible que se quiera utilizar un grupo de Gateway para una determinada solicitud y otro grupo de Gateway para otro tipo de solicitud. En este campo se indica el grupo a que pertenecerá el Gateway que se está añadiendo

  • destination: es la SIP URI del Gateway en el formato sip:IP:puerto

  • flags: se utiliza para configurar determinadas banderas que serán aquellas utilizadas por defecto. Estas banderas, como veremos más adelante, se pueden modificar desde la consola de Kamailio con comandos específicos. Las distintas banderas que se pueden configurar

    • 0: Gateway activo por defecto (A) sin la bandera probing (P) activada

    • 1: Gateway inactivo por defecto (I) sin la bandera probing (P) activada

    • 2: Gateway en estado de probando (T) sin la bandera probing (P) activada

    • 4: Gateway desactivado por defecto (D) sin la bandera probing (P) activada

    • 8: Gateway activo por defecto (A) con la bandera probing (P) activada por defecto

  • priority: a cada Gateway es posible asociar una prioridad y de esta forma indicar el orden en que van utilizados para una determinada solicitud siempre y cuando como algoritmo de distribución se utiliza el valor 8 (destino seleccionado en base a la prioridad asociada) o el valor 13 basado en la latencia

  • attrs: se utiliza para indicar una serie de atributos, separados con un punto y coma, que luego se utilizarán según el tipo de algoritmo utilizado para la distribución de las solicitudes. Los posibles valores:

    • duid: utilizado por el algoritmo de balanceo de carga de llamadas. Por cada Gateway hay que indicar una valor único que permita identificarlo de manera univoca

    • maxload: utilizado por el algoritmo de distribución de balanceo de carga de llamadas. Se indica un valor numérico que representa el numero máximo de solicitudes/llamadas que puede recibir el Gateway

    • weight: utilizado por el algoritmo de distribución basado en el peso de cada Gateway. Tiene que ser un valor entre 0 y 100 y representa el porcentaje de llamadas que recibirá el Gateway.

    • rweight: utilizado por el algoritmo de distribución basado en el peso relativo de cada Gateway. Tiene que ser un valor entre 1 y 100. Para calcular la probabilidad de uso de un determinado Gateway, se utiliza la siguiente formula: “peso relativo del Gateway/la suma de todos los pesos relativos de todos los Gateway activos pertenecientes al mismo grupo”

    • socket: utilizado para definir desde que IP llegarán las solicitudes SIP al Gateway. Se utiliza cuando en Kamailio se han configurados distintas direcciones IP y se quiere especificar cual dirección utilizar por un Gateway en especifico

    • sockname: usado para configurar un nombre para el socket utilizado con el Gateway. Si configurado tiene prioridad sobre el atributo socket

    • ping_from: utilizado para la From URI de donde llegarán los OPTIONS generados por el modulo hacia los GATEWAY

    • obproxy: se define la SIP URI donde enviar los OPTIONS para el Gateway configurado

    • latency: una valor inicial de latencia que se quiere asociar al GATEWAY, en milisegundos

  • description: una descripción para el Gateway que se está configurando

Ahora para añadir un GATEWAY a la tabla, la sintaxis es:

kamctl dispatcher add <setid> <destination> [flags] [priority] [attrs] [description]

Un ejemplo podría ser:

kamctl dispatcher add 0 sip:1.2.3.4:5060 2 30 'latency=30' sip.kamailio.org

Con este comando se ha añadido al grupo 0 el GATEWAY con SIP URI sip:1.2.3.4:5060, flag 2 relativo a como recibirá los OPTIONS, prioridad 30, latencia inicial 30, descripción.

Antes de reiniciar Kamailio, otro parámetro importante que va configurado en el modulo es:

modparam("dispatcher", "ds_ping_latency_stats", 1)

que activa la medición de la latencia para todos los GATEWAY Configurados. Si se reinicia Kamailio después de unos cuantos minutos se podrá ver el desempeño del GATEWAY configurado:

kamcmd dispatcher.list

DEST: {

URI: sip:1.2.3.4

FLAGS: AX

PRIORITY: 30

ATTRS: {

BODY: latency=24

}

LATENCY: {

                  AVG: 24.250000

                 STD: 1.035000

                 EST: 25.000000

                MAX: 26

               TIMEOUT: 0

     }

}

Los datos:

  • BODY – El valor de latencia configurado en el campo attrs de la tabla dispatcher

  • AVG: latencia promedio desde la ultima vez que se ha recargado el modulo

  • STD: desviación máxima de la media

  • EST: estimado de la latencia a corto plazo calculado a través del parámetro ds_latency_estimator_alpha que se basa en un algoritmo especifico para pronosticar el estimado de latencia. Si el parámetro no se configura su valor per defecto es 900 (0,9)

  • MAX: latencia máxima registrada

  • TIMEOUT: numero de paquetes que no han recibido respuesta

Ahora supongamos que tenemos 7 Gateway configurados con el mismo valor de prioridad:

La formula para calcular la prioridad real basada en la latencia o Prioridad Ajustada es:

Prioridad Ajustada = PioridadConfigurada – (LatenciaEstimada / Prioridad)

Si tomamos por ejemplo el Gateway numero 2, la formula sería:

PA = 30 – (91 / 30) = 30 – 3 = 27

Como el valor se encuentra por debajo de la prioridad configurada, ese GATEWAY no recibirá ninguna solicitud SIP. Todos los que tengan un Prioridad Ajustada de 30 (3) recibirán todas los solicitudes de manera Round Robin es decir distribuida de manera uniforme (33,3% cada uno).

Otra cosa que se puede configurar, como atributo del GATEWAY es el valor cc=1 que modifica el calculo de la Prioridad Ajustada de la siguiente manera:

Prioridad Ajustada = PioridadConfigurada – (CongestiónMS / Prioridad)

es decir teniendo en cuenta el concepto de congestión; la Congestión MS se calcula de la siguiente manera:

CongestiónMS = LatenciaActual – LatenciaenCondicionesNormales

Ejemplo:

LatenciaActual = 90

LatenciaCondicionesNormales = 30

CongestiónMS = 90 – 30 = 60

Prioridad Ajustada = 30 – (60 /30) = 30 – 2 = 28

EL GATEWAY no recibirá ninguna solicitud SIP.

Para utilizar el nuevo algoritmo, nada más indicarlo en la función que normalmente se utiliza en el script de enrutamiento de Kamailio:

if(!ds_select_dst("0", "13")) {

        send_reply("404", "No destination");

exit;

}

Cualquier duda me Comentan

Subscribe to Comments for "Kamailio - Modulo  DISPATCHER y el nuevo algoritmo basado en la latencia de los Gateway" Subscribe to VozToVoice - All comments