OpenSIPs y los diferentes balanceamientos de carga

OpenSIPs tiene algunos módulos que permite distribuir las llamadas entre distintos destinos.

Según los desarrolladores de OpenSIPs no se debería hablar de Balanceamiento de carga sino de distribución de trafico.

En OpenSIPs tenemos dos formas de hacerlo:

  • manteniendo una información en tiempo real acerca de la carga enviada a cada destino
  • enviando el trafico sin conocer el estado de los destinos (método de probabilidad)

En el primer caso la carga se puede conocer a través del numero de llamadas enviadas a cada destino; esto se realiza con el modulo LOAD_BALANCER que mantiene la cuenta de diálogos SIP activos por cada destino.

En el segundo caso se utilizan los módulos DISPATCHER y/o DROUTING. EL primero puede distribuir el trafico SIP basándose en distintos algoritmos y/o partes de la solicitud SIP recibida. El segundo distribuye el trafico basándose en los prefijos de las llamadas realizadas y el peso asignado a cada Gateway para procesarlas.

Desde la versión 2.3 de OpenSIPs hay otra forma de Hacerlo: recibiendo retroalimentación desde los servidores destinatarios del trafico.

Esto utilizando FreeSWITCH como destino. Freeswitch, a través de su ESL (Event Socket Layer) envía cada 20 segundos estadísticas acerca de su carga y estado:

{
 "Core-UUID": "8e16a74f-194d-4414-8c76-77a208ed8eb0",
 "Event-Calling-File": "switch_core.c",
 "Event-Calling-Function": "send_heartbeat",
 "Event-Calling-Line-Number": "74",
 "Event-Date-GMT": "Mon, 30 Jan 2017 14:44:00 GMT",
 "Event-Date-Local": "2017-01-30 14:44:00",
 "Event-Date-Timestamp": "1485787440021923",
 "Event-Info": "System Ready",
 "Event-Name": "HEARTBEAT",
 "Event-Sequence": "86536",
 "FreeSWITCH-Hostname": "pbx2",
 "FreeSWITCH-IPv4": "172.17.0.3",
 "FreeSWITCH-IPv6": "::1",
 "FreeSWITCH-Switchname": "pbx2",
 "FreeSWITCH-Version": "1.6.9+git~20160613T181044Z~d574870720~64bit", 
 "Idle-CPU": "78.400000", 
 "Max-Sessions": "1000", 
 "Session-Count": "0", 
 "Session-Peak-FiveMin": "0", 
 "Session-Peak-Max": "0", 
 "Session-Per-Sec": "30", 
 "Session-Per-Sec-FiveMin": "0", 
 "Session-Per-Sec-Last": "0", 
 "Session-Per-Sec-Max": "0", 
 "Session-Since-Startup": "0", 
 "Up-Time": "0 years, 3 days, 3 hours, 16 minutes, 39 seconds, 516 milliseconds, 854 microseconds", 

Estas estadísticas se capturan en OpenSIPs y permiten distribuir el trafico conociendo el estado de cada servidor en tiempo real. Esto porque la carga del servidor destino, además que con el trafico recibido por OpenSIPs, puede estar relacionada con otros tipos de llamadas (internas) o pueden correr otros servicios que están consumiendo parte de los recursos.

Esta nueva integración se puede realizar en los modulos DISPATCHER y LOAD_BALANCER configurando oportunamente el modulo FREESWITCH de OpenSIPs 2.3. Un ejemplo para LOAD_BALANCER; antes en la tabla donde se configura el modulo, los distintos destinos se indicaban de la siguiente forma:

image

Ahora sería:

image

Donde en lugar de indicar el numero de canales, se indica directamente la dirección IP del servidor FreeSWITCH y la contraseña para conectarse al ESL de FreeSWITCH.

Interesante, ¿verdad?