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
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...
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.
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...