Asterisk

Transcrição

Asterisk
Asterisk
Emerson Santos de Lima
Thiago de Souza Rios
GSORT - Grupo de Sistemas Distribuídos, Otimização,
Redes e Tempo Real
IFBA – Instituto Federal da Bahia
Salvador, Bahia, Brasil
[email protected]
GSORT - Grupo de Sistemas Distribuídos, Otimização,
Redes e Tempo Real
IFBA – Instituto Federal da Bahia
Salvador, Bahia, Brasil
[email protected]
Abstract— This paper presents and discusses the architecture
of Asterisk, a software for implementing telephony servers on
common PCs. This architecture is presented in the form of
diagrams containing their views of the structure and deployment.
Keywords—component;
software
architeture;
architeture style; open source telephony platform
I.
software
INTRODUÇÃO
Este artigo apresenta a arquitetura da plataforma de
telefonia Asterisk, através da análise de como as principais
decisões arquiteturais tomadas no projeto adequam-se para
atender seus requisitos funcionais e não-funcionais.
O presente trabalho divide-se em: descrição do sistema,
projeto arquitetural e projeto de implementação e implantação.
Na descrição do sistema são mostrados conceitos gerais sobre a
plataforma, sua história de criação e aspectos relevantes para
um entendimento inicial da plataforma.
Em seguida, é apresentado o seu projeto arquitetural,
incluindo as visões arquiteturais de estrutura e de implantação,
componentes e conectores identificados. Também são
discutidos os detalhes de implantação e possíveis soluções
COTS (Commercial Off The Shelf) utilizadas em sua
arquitetura. Por fim, são apresentadas as conclusões a respeito
das características arquiteturais do Asterisk.
II.
DESCRIÇÃO DO ASTERISK
O Asterisk é uma plataforma open source de telefonia,
distribuída sob a licença GPLv2 para desenvolvimento e
implantação de centrais telefônicas utilizando um PABX
(Private Automatic Branch Exchange). O Asterisk é
implementado utilizando C em toda a sua estrutura de
codificação, sendo que foi originalmente concebido para ser
utilizado em conjunto com o sistema operacional Linux. O
objetivo central do Asterisk é transformar um simples
computador em um servidor de comunicações [1].
Com o Asterisk é possível construir aplicações de
comunicação de tempo real para vários protocolos, pois seu
conjunto de módulos permite abstração da complexidade de
lidar com diferentes tecnologias de comunicação.
O projeto foi iniciado em 1999 como forma de suprimir
uma demanda tecnológica de uma empresa fundada por Mark
Spencer e tornou-se o projeto principal desta, devido à
popularidade da plataforma [1].
O Asterisk utiliza anos de conhecimento da área de
telefonia em conjuntos integrados de telecomunicações. O
grande diferencial do projeto está na sua natureza
personalizável, permitindo que uma central seja implementada
de diversas maneiras. Esse diferencial é complementado com o
cumprimento de normas técnicas como nenhuma outra
ferramenta de cárater semelhante no mercado [2].
O projeto do Asterisk foi idealizado de forma que o
processamento de chamadas possa ser personalizado, seja pelo
uso de módulos simples como o de ligações, e-mail por voz
(voicemail) ou através da combinação de outros recursos para
aplicações mais complexas, como reconhecimento de voz.
Outros tipos de aplicações comumente utilizadas como
conferências e filas de espera para chamadas são características
embutidas em seu software padrão.
A. Aspectos da plataforma
O Asterisk é muito diferente das outras plataformas de
telefonia tradicionais, porque ele trata todos os canais de
entrada da mesma maneira. Em um PABX tradicional, há uma
diferença lógica entre estações (aparelhos telefônicos) e troncos
(recursos para conexão com o mundo exterior). Se houver a
necessidade, por exemplo, de rotear chamadas externas, será
necessário que os usuários utilizem um prefixo para isso. Além
disso, um PABX tradicional não permitirá que recursos
externos acessem funcionalidades internas [2].
Muitas soluções existentes não oferecem a capacidade de
inclusão de novos recursos sem a necessidade da aquisição e
instalação de software proprietário, o que pode tornar a
implantação de uma central telefônica uma tarefa mais
complexa e limitada em recursos.
No Asterisk, por outro lado, não existem conceitos de
estações ou troncos, pois qualquer tipo de dado que entra no
sistema é tratado por um tipo de canal (channel), seja um
celular ou um aparelho comum, conforme exibido na Figura 1.
Há vários tipos de canais, contudo o Asterisk lida com eles de
maneira semelhante.
podem oferecer melhor consumo de CPU, qualidade de mídia
transmitida ou requisitos de tráfego de rede.
B. Requisitos arquiteturais atendidos
Como forma de análise da arquitetura proposta, nesta seção
serão apresentados os requisitos não-funcionais que o Asterisk
atende ou aqueles que são parcialmente atendidos, de acordo
com definições presentes em [4].
Figura 1: Comparação entre um PABX tradicional e o Asterisk [2]
A Figura 2 ilustra uma conexão entre um simples ponto de
telefonia e o sistema do Asterisk, quando um usuário realiza
uma ligação e um determinado canal é utilizado na chamada.
Figura 2: Exemplo de conexão no Asterisk [3]
A conexão entre dois telefones é chamada de ligação de
canal (channel bridging), que consiste na transmissão de dados
entre esses dois pontos. Há duas formas de conexão: ligação
genérica (generic bridging) e ligação nativa (native bridging).
• Eficiência - Como discutido anteriormente, o núcleo do
Asterisk detecta se as tecnologias utilizadas nos canais
no momento de uma ligação são semelhantes,
permitindo invocar funções, por exemplo, de uma
ligação nativa (native bridging) para canais com o
mesmo tipo de fluxo.
A utilização de diferentes tipos de ligação entre canais
permite, entre outros casos, que canais semelhantes não
necessitem de uma camada adicional para transmissão
de sinais de controle. Esse recurso é importante para
ganho de performance durante as chamadas.
• Facilidade de Evolução – O Asterisk é baseado em
módulos que são carregados de acordo com uma
configuração prévia, ou seja, se houver necessidade de
modificar o software de acordo com mudanças nos
requisitos de um projeto, basta mudar essa
configuração. Isso permite flexibilidade quanto a
dependência de módulos utilizados tradicionalmente,
facilitando a inclusão de novos recursos compatíveis
com os padrões do Asterisk.
Para suportar a adição de novos recursos, o Asterisk
disponibiliza um diretório para armazenar módulos
desenvolvidos pela sua comunidade (recurso
caracterizado como Addon Module), que também pode
ser utilizado para desenvolvimento de novas
funcionalidades.
A ligação genérica é utilizada no momento em que os dois
canais usam tecnologias diferentes, devendo o Asterisk utilizar
suas interfaces para lidar com as diferenças na transmissão.
Por outro lado, a ligação nativa ocorre nas chamadas entre
pontos dentro do Asterisk que usam a mesma tecnologia de
transporte de dados. A decisão de usar um tipo ou outro de
ligação é feita no momento de efetuar a conexão entres os
pontos.
O Asterisk é uma aplicação altamente modularizada, devido
ao uso de sua aplicação núcleo localizada no diretório principal
da plataforma. Essa aplicação funciona como registro dos
módulos que serão usados para realizar as chamadas,
carregando em tempo de execução as interfaces necessárias
para abstrair as tecnologias existentes para processamento de
ligações telefônicas [3].
Dentro do Asterisk há várias funções e módulos que podem
ser usados para configurar as ligações, como o Dialplan. Esse
módulo é responsável principalmente por lidar com os
diferentes tipos de canais, carregando as configurações
necessárias para determinadas ligações, usando o número
discado no canal. Quando isso ocorre, o Asterisk busca em seus
registros todas as aplicações ou módulos que podem ser usados
na chamada [3].
Para realizar a comunicação de nós diferentes na rede, o
Asterisk conta também com codecs usados para codificar dados
quando necessário na rede. Existem vários tipos de codecs que
• Suporte à heterogeneidade - A arquitetura do Asterisk
fornece interfaces para realizar processamento de
chamadas independente da tecnologia utilizada pelos
canais. Em casos onde os nós da ligação utilizam
tecnologias e protocolos de transmissão diferentes, os
módulos que realizam essa abstração de funcionalidades
são carregados em tempo de execução e utilizados no
processamento.
•
Escalabilidade - Uma área em que a arquitetura do
Asterisk não tem um bom alcance é a de escalar o
sistema para múltiplos servidores. Empresas que
utilizam o Asterisk em larga escala normalmente usam
técnicas de balanceamento de carga entre servidores,
pois sua arquitetura foi construída para suportar um
único processo em um único servidor.
Há um projeto em desenvolvimento de uma nova
versão do Asterisk, chamada de Asterisk SFC (Scalable
Communications Framework), que tem como objetivo
torná-lo mais escalável. Contudo, o projeto foi
interrompido.
• Adaptação em runtime - As interfaces de comunicação
e processamento são carregadas em runtime, ou seja, o
o carregamento dos módulos necessários à adaptação da
comunicação para qualquer tecnologia usada nas
chamadas é feita no momento em que as ligações dos
canais são criadas.
•
Gerenciamento de complexidade – A arquitetura do
Asterisk possui um conjunto de módulos bem definidos
e distintos, sendo que cada módulo lida com um
aspecto específico do gerenciamento de ligações, como
por exemplo, o módulo de codecs.
A sintaxe fornecida para utilização dos módulos
também é bastante simples. As estruturas de dados
presentes no Asterisk, apresentam convenções de
nomes que lembram funcionalidades de um sistema de
telefonia.
Tal
característica
permite
aos
desenvolvedores um certo grau de abstração,
escondendo o funcionamento do nível de comunicação
com o hardware.
III.
os módulos utilizam um conector do tipo procedure call
para requisitar suas funções.
•
• Bridging Modules - Módulo responsável por realizar a
ponte de ligação entre canais e determinar qual tipo de
chamada deverá ser estabelecida de acordo com o tipo
de canal usado nas chamadas: ligação nativa (native
bridging) ou genérica (generic bridging).
•
Dialplan Applications - Esse módulo é usado para
definir várias ações que podem ser aplicadas em uma
chamada, como por exemplo conexões de saída para
recursos externos. Utiliza basicamente procedure calls
com o main.
•
PBX Modules - Os módulos PBX são módulos
periféricos que proporcionam controle nos mecanismos
de configuração. É o modulo que carrega o Dialplan,
pois ele efetua a leitura dos arquivos de configuração
dentro do Asterisk que o fazem funcionar. O PBX
utiliza um distributor, pois ele fornece a localização
das aplicações do dialplan para execução da chamada
de acordo com o tipo de protocolo do canal.
•
Resource Modules - Módulo responsável por integrar
recursos externos ao Asterisk, como por exemplo,
estabelecer uma conexão com um banco de dados
ODBC. Basicamente opera com um conector
composite procedure call e distributor, por fornecer
dados relativos a caminhos para recursos externos.
•
Addon Modules - Esse componente apresenta módulos
que foram desenvolvidos pela comunidade de
desenvolvedores do Asterisk e que não fazem parte da
distribuição padrão. Utiliza basicamente um conector
procedure call.
PROJETO ARQUITETURAL
O Asterisk possui uma arquitetura híbrida que une dois
estilos: main program e client-server. Essencialmente, usa subrotinas invocando um programa principal, característica
principal do estilo main program. Os módulos dentro do
Asterisk são carregados dinamicamente e fornecem uma
funcionalidade específica.
A. Visão Estrutural
A Figura 3 exibe o diagrama de visão estrutural para o
Asterisk. Através dessa visão, podemos distinguir duas
camadas de aplicação, sendo que a primeira é dividida em dois
módulos: o núcleo (core) e o módulo de funções auxiliares
(extended). O núcleo realiza o processamento principal de
chamadas, funcionando como um main program, enquanto que
o módulo auxiliar é utilizado para configurar parâmetros de
processamento das chamadas realizadas.
Esses dois módulos em conjunto formam a camada de
aplicação Asterisk Server, utilizada pela camada Asterisk Client
na requisição de chamadas telefônicas. Essa divisão caracteriza
um estilo client-server, já que temos duas camadas distintas
(servidor e cliente) comunicando-se entre si.
A camada Asterisk Server contém módulos básicos que
realizam procedimentos de comunicação com o hardware. A
seguir, serão detalhados os módulos com seus componentes e
conectores utilizados [2].
O Core é a divisão da camada que abriga os módulos
básicos para funcionamento do Asterisk. Os módulos do core
são:
• Main - Componente principal com funcionalidades
gerais usadas por outros módulos. Basicamente, todos
Channel Drivers - Módulo responsável pela realização
das chamadas. O Channel Driver funciona como um
gateway para o núcleo do Asterisk. Cada driver
representa um tipo específico de protocolo de canal,
como SIP, por exemplo.
Na divisão Extended, temos módulos que fornecem
aplicações adicionais ao core, como armazenamento e
transformação de dados, que são:
•
Channel Event Logging Modules (CEL) - Fornece o
controle sobre o registro de eventos durante as
chamadas, ou seja, implementa um serviço de log
dentro do Asterisk. Utiliza um conector data access,
pois lida com fluxo de dados que são persistidos em
arquivos.
•
Codec Translators - Esse módulo permite que o
Asterisk converta formatos de fluxos de áudio entre
chamadas. Se um canal utiliza um formato diferente do
canal em que pretende realizar a chamada, então o
codec correspondente é utilizado. Os codecs são
comumente usados nas conexões genéricas (generic
bridging). Esse módulo utiliza um conector adaptor,
para adaptar os dados transmitidos no canal.
Figura 3: Visão estrutural
•
Format Interpreters - Esse módulo exerce as mesmas
funções do Codec Translators, mas ao invés de realizar
a conversão em canais são utilizados arquivos,
utilizando para isso um conector do tipo stream.
•
Dialplan Functions - Esse módulo é complementar ao
Diaplan Aplications e serve para fornecer
funcionalidades extras como manipulação de strings,
data e conexão com fonte de dados, através de
procedure calls.
A camada Asterisk Client representa qualquer elemento de
comunicação (um telefone ou um PC com VoIP) com o
Asterisk Server. A comunicação é estabelecida através de um
conector procedure call, conforme mostrado na Figura 3.
B. Visão de Implantação
Na Figura 4 temos a visão de implantação do Asterisk.
Como mostrado anteriormente, o núcleo é mantido na mesma
camada (asterisk server) comunicando-se com a camada
cliente através uma rede de comunicação.
No diagrama, o servidor conecta-se à uma base de dados
para casos onde configura-se a necessidade de armazenamento
e controle de informações sobre as ligações efetuadas.
Um cliente no Asterisk pode ser qualquer dispositivo de
comunicação: telefones e computadores que façam uso de
VoIP, ou até mesmo celulares.
O Asterisk é capaz de comunicar-se com diferentes
tecnologias. Em geral, essas conexões são feitas através de uma
conexão em rede. Para utilização de tecnologias tradicionais de
telefonia, é necessária a instalação de hardwares específicos.
Muitos fabricantes produzem esses dispositivos, contudo, a
Digium (empresa responsável pelo Asterisk), possui seus
próprios dispositvos de rede, usados para funcionar em
conjunto com uma interface proprietária denominada de
Digium Asterisk Hardware Device Interface (DAHDI).
Os requisitos mínimos de instalação do Asterisk dependem
do propósito de uso. A Tabela 1 mostra configurações mínimas
de servidores para ambientes de implantação do Asterisk, de
acordo com o número de canais [5].
Objetivo
Canais
Mínimo recomendado
Sistemas domésticos
De 1 a 5
400MHz x86, 256MB RAM
Escritórios
De 5 a 10
1GHz x86, 512MB RAM
Sistemas de pequenas
empresas
Até 25
3GHz x86, 1GB RAM
Sistemas de médio ou
grande porte
Acima de 25
Duas CPU’s, possivelmente
múltiplos servidores numa
arquitetura distribuída
flexível e compatibilidade com aplicações de comunicações de
terceiros em ambientes heterogêneos.
Tabela 1: Requisitos mínimos de instalação do Asterisk
IV.
PROJETO DE IMPLEMENTAÇÃO E IMPLANTAÇÃO
No seu processo de implantação, o Asterisk possui algumas
dependências de software para sua correta instalação. As
dependências para os sistemas operacionais Ubuntu e CentOS
são:
•
GNU C++: compilador para o código do Asterisk;
•
Subversion: sistema de controle de versões onde
encontra-se a versão mais recente do código do
Asterisk.
•
OpenSSL: toolkit open source que implementa os
protocolos SSL/TSL para criptografia de dados na
internet.
Para a implementação das interfaces de hardware do
Asterisk (DAHDI), são necessárias duas bibliotecas:
•
•
LibPRI: biblioteca que fornece suporte ao uso de
ISDN (Integrated Services Digital Network),
conjunto de padrões para transmissão digital de
voz, dados e outros serviços em rede.
DAHDI: software que o Asterisk usa para
comunicar-se com o hardware de telefonia.
Na visão de implantação, o CentOS Server foi escolhido
por ser uma distribuição Linux gratuita baseada no Red Hat,
que suporta tanto ambientes de servidores para aplicações de
missão crítica quanto ambientes desktop. O que a difere das
outras versões é um nível maior de segurança e suporte, através
de updates totalmente compatíveis com os pacotes de softwares
preparados especificamente para os sistemas da Red Hat
Enterprise Linux.
Os switches Fast Ethernet (10/100BaseTX - RJ 45) levam o
tráfego de dados à taxa nominal de 100 Mbit/s, e fazem a
comutação automaticamente para taxas de transmissão de 10
Mbit/s, quando necessário. Esses switches são do tipo full
duplex, ou seja, permitem o tráfego de dados bidirecional. O
BaseTX representa o padrão de cabeamento de par trançado
categoria 5 ou 5e, conforme estabelecido pelas normas
TIA/EIA-568-B, T568A e T568B, e o RJ45 o tipo de conector
empregado na conexão do meio físico.
O IP Phone Yealink apresenta uma interface de usuário
fácil para usuários comuns e funcionalidades melhoradas que
maximizam a produtividade. O seu chipset possui mecanismos
preparados para a tecnologia de voz VoIP, que permite áudio
de alta definição, opções de gerenciamento, implantação
Figura 4: Visão de implantação
Como opção de banco de dados, o Asterisk fornece como
padrão em sua implementação o MySQL, conforme mostrado
na visão de implantação. Há ainda a opção de utilizar outros
bancos de dados, visto que há suporte de diferentes tipos de
conectores para esse fim.
V.
CONCLUSÃO
A partir das visões apresentadas e da descrição detalhada
dos módulos do Asterisk, pode-se notar que os principais
requisitos funcionais e não-funcionais do Asterisk são
atendidos dentro da plataforma, como eficiência na velocidade
de processamento de ligações graças ao carregamento de
algumas funções em run-time.
O Asterisk é um software totalmente modular e seu nível de
acoplamento é alto, pois o funcionamento de alguns dos
módulos estão ligados diretamente ao core. Justamente por
essa característica é que o Asterisk consegue bom desempenho
no processamento de dados que uma rede telefônica necessita,
pois seus módulos requisitam poucos arquivos externos.
Apesar do software atender demandas para construir uma
rede de telefonia altamente heterogênea, sua arquitetura foi
construída para suportar um único serviço em apenas um
servidor, logo, ele não garante alta disponibilidade em caso de
falha. Essas características tornam inviáveis a escalabilidade do
sistema para projetos maiores em empresas de grande porte.
Para atingir esse objetivo de escalabilidade, podem ser usadas
técnicas de balanceamento de carga em arquiteturas
distribuídas de servidores.
Por esse motivo, foi pensada em uma nova versão, o
Asterisk SCF, com uma arquitetura orientada à objetos,
escalável, modularizada com serviços individuais ou blocos
funcionais, permitindo que várias instâncias dos seus núcleos
de serviços sejam implementados em servidores diferentes.
Essa seria a opção que cumpriria a maioria dos requisitos que
um software deve atender hoje em dia e transformaria o
Asterisk em uma aplicação ainda mais confiável, escalável e de
alta disponibilidade.
REFERÊNCIAS
[1]
[2]
[3]
[4]
[5]
Asterisk – Site Oficial. Em <http://www.Asterisk.org/get-started>.
Acesso em 26 de maio de 2013.
R. Bryant, L. Madsen, J. V. Meggelen. Asterisk: The Definitive Guide.
O’Rilley, 2011.
R. Bryant, “Aosabook - The Architecture of Open Source Applications”.
Em <http://www.aosabook.org/en/Asterisk.html>. Acesso em 22 de
maio de 2013.
I. Sommerville, Engenharia de Software, São Paulo, Pearson, 2011.
Asterisk Book. Em
<http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-htmlchunk/asterisk-CHP-2.html>. Acesso em 22 de maio de 2013.

Documentos relacionados

Baixar este arquivo PDF - Portal de Revistas do SENAI/SC

Baixar este arquivo PDF - Portal de Revistas do SENAI/SC O protocolo UDP possui maior velocidade no processo de envio de dados, pois além de ter um cabeçalho bem menor que o cabeçalho TCP, é não orientado a conexão, isto é, não precisa estabelecer entre...

Leia mais

Sangoma Signalling and Media Gateway

Sangoma Signalling and Media Gateway Você não encontrará os circuitos R2 no Canadá, nos E.U.A. ou na maior parte da Europa, mas MFC/R2 é amplamente utilizado em outras partes do mundo, especialmente na América Latina.

Leia mais

Aprendendo Asterisk – Manual para Iniciantes

Aprendendo Asterisk – Manual para Iniciantes dentro do diretório home, que é criada para cada usuário. Dentro do Linux as partições, pendrives, cdrom não aparecem como: C: , D: , E:… Tudo faz parte do diretório raiz, ou seja, para o sistema t...

Leia mais