O blog da AWS

Comunicações em Real-time com a CrazyCall usando o AWS Global Accelerator

Por Pratik R. Mankad, Sr.Network Arquiteto de Soluções

 

Na indústria de Telecomunicações, o termo comunicação em tempo real (Real-time communication – RTC) está relacionado com sessões ao vivo entre dois endpoints, com a menor latência e jitter possíveis. Essas sessões podem ser de voz, mensagens instantâneas ou vídeo ao vivo.

Cada uma dessas soluções consiste na troca de uma ou mais mensagens de sinalização que controlam a chamada (por exemplo, autenticação, autorização e controle de acesso, transcoding ou buffering) e um ou mais fluxos de mídia transportando áudio, vídeo ou outros tipos de dados. Juntos, esses fluxos formam uma sessão, que é colocada dentro de pacotes de protocolo de internet (Internet Protocol – IP).

Para aplicações que não são em tempo real, como baixar um arquivo ou acessar um website a partir de um navegador, os atrasos podem ser inconvenientes, mas não prejudicam o resultado final da interação. As aplicações em tempo real, no entanto, são sensíveis ao tempo. Atrasos que podem ser aceitáveis em aplicações não real-time podem degradar o desempenho e a experiência do usuário a ponto de uma aplicação real-time tornar-se inutilizável. Por exemplo, imagine uma conversa por telefone onde você precisa esperar um ou dois segundos para receber uma resposta a uma questão. Claramente isso não seria aceitável.

Aplicações real-time funcionam melhor quanto a conexão de internet que a transporta reduz a latência e o jitter. Uma performance de rede consistente e confiável ajuda a assegurar que os dados em tempo real dentro de pacotes IP sejam entregues mais rápido e na ordem correta. O AWS Global Accelerator é um serviço que ajuda a reduzir a latência e o jitter da rede.

O Global Accelerator melhora a disponibilidade e performance de aplicações para usuários locais ou globais. Ele fornece endereços IP estáticos que atuam como pontos de entrada fixos para seus aplicativos, em uma ou várias regiões da AWS. Esses pontos de entrada incluem Application Load BalancersNetwork Load Balancers, ou instâncias Amazon Elastic Compute Cloud (Amazon EC2).

O Global Accelerator usa a rede global AWS para otimizar o caminho de seus usuários até seus aplicativos, melhorando o desempenho de seu tráfego TCP e UDP. O Global Accelerator também monitora continuamente a integridade dos endpoints de seu aplicativo, detecta se existe um endpoint com falha e redireciona o tráfego para endpoints funcionais ​​em menos de um minuto.

Neste blog post eu descrevo como a CrazyCall, uma empresa de telecomunicações baseada na nuvem, melhorou a performance de suas aplicações real-time para seus clientes usando o Global Accelerator.

O software de chamadas baseado em nuvem da CrazyCall permite que seus clientes criem facilmente um serviço de suporte ao cliente, entrem em contato com os clientes rapidamente e gerem leads diretamente de sites. A CrazyCall atende empresas de todos os tipos, com foco em pequenas e médias empresas que desejam usar o poder do sistema telefônico e alcançar seu público em todo o mundo. A CrazyCall se empenha em fornecer uma experiência de alta qualidade a todos os seus clientes ao redor do mundo.

O sistema da CrazyCall é baseado no Kamailio e no FreeSWITCH. O Kamailio é um servidor  SIP (Session Initiation Protocol) open source, que é executado sobre o GPL, e é capaz de gerenciar milhares de chamadas por segundo. O FreeSWITCH é uma plataforma de comunicação open source que permite conectar os clientes e pode ser executado sobre qualquer plataforma moderna.

 

Solução:

A CrazyCall opera em um ambiente multi-regiões. O ambiente é executado a partir de duas regiões da AWS: eu-central-1 e eu-west-1. Trata-se de um sistema distribuído com o Kamailio sendo executado sobre o serviço Amazon Elastic Container Service (Amazon ECS), e RTPEngine e o FreeSWITCH sendo executado sobre instâncias EC2.

  • A CrazyCall usa o Kamailio como session border controllers (SBC) em frente aos servidores FreeSWITCH. Isso permite que a implementação da CrazyCall se comporte como um web proxy com um gateway UDP, além de fornecer todos os recursos de SBC.
  • O cliente SIP WebRTC se conecta com o Kamailio via um WebSocket HTTPS.
  • O Kamailio faz todas as verificações de integridade e segurança do tráfego de sinalização de entrada e roteia a sinalização do browser/widget/aplicativo móvel diretamente para a frota de servidores FreeSWITCH.
  • O FreeSWITCH atua como processador de mídia e permite que a CrazyCall forneça vários recursos para seus usuários, tais como gravação de ligações, URA e música de espera.

 

Fluxo do tráfego antes da integração com o Global Accelerator:

 

Figura 1: CrazyCall sem o uso do Global Accelerator

 

Antes de integrar o Global Accelerator à sua solução, a CrazyCall utilizava o roteamento com base em latência do Amazon Route 53 com o Elastic Load Balancer (ELB) e sondagens de latência HTTP, para encontrar o link menos congestionado entre o usuário e a região da AWS.

  1. O usuário envia um request para sip.example.com.
  2. O Amazon Route 53, baseado na latência, direciona o tráfego para o ELB da região AWS mais apropriada.
  3. O ELB direciona o tráfego para o Kamailio (SIP Proxy) e o RTPEngine.
  4. O Kamailio então direciona o tráfego para o FreeSWITCH.

 

Desafios com a solução existente:

Para que a sua aplicação em tempo real funcione de forma otimizada, a CrazyCall precisava de uma conexão de internet confiável, com performance consistente ao longo do tempo. Uma forma de reduzir a latência e o jitter é diminuir o número de saltos entre o usuário e a aplicação. É importante reforçar que os pontos mencionados a seguir neste post são inerentes a todas as técnicas de roteamento baseada em DNS e não específicas do Amazon Route 53.

  • Com o roteamento baseado em latência, sistemas de DNS como o Amazon Route 53, baseado no endereço IP do usuário, podem direcionar os usuários para os endpoints da CrazyCall com a menor latência. Os servidores DNS decidem, baseado nas condições de rede observadas recentemente, qual endpoint em qual região AWS pode atender um determinado usuário. Um usuário em Londres provavelmente será direcionado para um endpoint em eu-west-1, enquanto que um usuário na Alemanha provavelmente será direcionado a um endpoint em eu-central-1.
  • O roteamento baseado em latência utiliza a latência aproximada entre o usuário e a Região AWS e não entre o usuário e o serviço hospedado. Além disso, um serviço de DNS como o Amazon Route 53 recebe o endereço IP do DNS de seu provedor de serviço, ou, se o provedor suportar o edns-client-subnet extension para EDNS0, ele receberá uma versão truncada do endereço IP do usuário. O que realmente interessa é a latência entre o usuário e o endpoint ao qual ele está tentando se conectar.
  • A latência entre dois hosts na internet depende do caminho da rede e o número de saltos entre os hosts. Este caminho também pode mudar com o tempo, como resultado de mudanças na conexão de rede e do roteamento.
  • O tráfego de usuário percorrerá a maior parte do caminho até o endpoint da CrazyCall através da internet pública e provedores de trânsito de internet (Internet Transit Providers) antes entrar na rede global da AWS. Isso pode representar uma conexão originada do outro lado do mundo. Como resultado, a qualidade depende do caminho do tráfego percorrido pelo pacote, como demonstrado na Figura 2: Caminho da Rede

 

Figura 2: Caminho da Rede

 

  • Os nomes dos domínios da internet permanecem em cache por um tempo pré-determinado, chamado Time to Live (TTL) em cada passo do processo de resolução de DNS. Como os usuários se conectam a partir de diferentes redes e servidores DNS, encontrar o limite adequado para o TTL é difícil. O cache de DNS pode ajudar a acelerar a entrega, mas em caso de alteração na rede, ele pode retardar a mudança para outro endpoint disponível, dado que é necessário esperar para que o cache do DNS expire. Por este motivo a CrazyCall não queria depender to TTL de cache do DNS dos dispositivos dos clientes. Todos esses fatores exigem gerenciamento de configurações de roteamento, configurações de DNS, de rede, além de uma grande complexidade operacional.
  • Os endereços IP para pesquisa de DNS e obtenção do domínio da CrazyCall também podem mudar. Os usuários podem não ter os endereços cadastrados em uma lista de permissões. Nessas situações a mudança de um endereço IP pode tornar difícil a configuração de permissões de recursos externos baseados em IP.
  • Um Application Load Balancer aberto para a internet também aumenta a exposição a ataques vindos da internet.

Para endereçar todos esses desafios a CrazyCall começou a explorar o roteamento Anycast. O roteamento Anycast é uma regra de roteamento e endereçamento de rede na qual um único endereço de destino tem múltiplas rotas para dois ou mais endpoints. Foi quando eles souberam que o Global Accelerator utiliza roteamento Anycast.

 

Como o Global Accelerator ajuda a CrazyCall:

  • O Global Accelerator fornece um endereço IP estático, que serve de ponto de entrada fixo para a aplicação real-time da CrazyCall, hospedado em quaisquer regiões da AWS.
  • Esses endereços estáticos são Anycast das Edge Locations da AWS. Eles distribuem o tráfego de entrada das aplicações entre múltiplos endpoints em uma ou mais regiões da AWS, o que aumenta a disponibilidade da aplicação da CrazyCall.
  • Os endereços IP do Global Accelerator são estáticos, e funcionam como o front-end da aplicação. O Global Accelerator consegue detectar a indisponibilidade dos endpoints e rapidamente direcionar o tráfego IP para outra Região AWS. O tráfego é direcionado sobre uma rota otimizada para a nova localidade em vez de continuar usando a rota original. Isso ajudou a CrazyCall a obter ganho de performance sem precisar lidar com a configuração de sua rede ou outras complexidades operacionais.
  • O Global Accelerator permitiu que a CrazyCall adicionasse um Application Load Balancer interno como endpoint. Ao utilizar o Global Accelerator como o único ponto de conexão com a internet, a CrazyCall conseguiu proteger sua aplicação hospedada na AWS de ataques de DDOS (distributed denial of service), graças ao uso do AWS Shield.

 

Fluxo do tráfego após a integração com o Global Accelerator:

A CrazyCall integrou seu ambiente com o Global Accelerator e o Amazon Route 53 para melhorar a performance da sua rede. O Global Accelerator direciona o tráfego do usuário para o endpoint da aplicação mais próximo, reduzindo assim a latência e o jitter. O tráfego de VoIP do usuário é roteado para a Edge Location mais próxima através de Anycast. O tráfego é então roteado através da rede global da AWS para a Região AWS mais próxima onde o ambiente da CrazyCall estiver sendo executado.

 

Figura 3: CrazyCall com o Global Accelerator

 

Como descrito na Figura 3, a CrazyCall:

  1. Utiliza o Global Accelerator Anycast IP.
  2. Utiliza o Amazon Route 53 para criar um registro CNAME para sip.example.com, referenciando o hostname do DNS do Global Accelerator DNS.
  3. Configura um ALB interno como o endpoint do Global Accelerator.
  4. O usuário envia um request para sip.example.com.
  5. Usando o Global Accelerator Anycast IP, o tráfego entra na rede global da AWS através da Edge Location mais próxima do usuário.
  6. A partir da Edge Location, o tráfego é encaminhado para o Global Accelerator.
  7. O Global Accelerator encaminha o tráfego VoIP para um ELB na Região AWS mais próxima.
  8. O ALB encaminha o tráfego VoIP para o Kamailio (SIP Proxy) e para o RTPengine.
  9. O Kamailio encaminha o tráfego de VoIP para o FreeSWITCH.

 

Conclusão:

Com o Global Accelerator e o Amazon Route 53, a CrazyCall foi capaz de utilizar endereços IP Anycast em minutos. O Global Accelerator permitiu que o tráfego do usuário entre na rede global da AWS mais perto do usuário. O Global Accelerator permitiu que a CrazyCall implementasse seu software com baixa latência e performance melhorada em alguns dias. Sem o Global Accelerator, provavelmente levaria alguns meses para implantar serviços Anycast. Além disso, a solução teria sido mais complexa, e mais cara para a CrazyCall manter e crescer. Desde a integração com o Global Accelerator, a CrazyCall notou uma redução no volume de chamadas de clientes pedindo ajuda com desempenho e qualidade no seu serviço de suporte.

“Nós usamos o endereço IP estático Anycast do Global Accelerator’s e a rede global da AWS para lidar com o tráfego de Voz sobre IP (VoIP), garantindo assim que nossos clientes obtenham uma melhor qualidade de serviço.”

—Marcin Kowalczyk, AWS Architect, CrazyCall

 

Este artículo fue traducido del Blog de AWS en Inglés

 


Sobre o autor

Pratik Mankad é Sr.Network Arquiteto de Soluções.

 

 

 

 

Revisor

Rodrigo Ramos é Senior Customer Solutions Manager.