Archive for maio \28\UTC 2010

Todo mundo trabalha

maio 28, 2010

Olá pessoal,

Semana passada eu li o livro Rework, do pessoal da 37 Signals. É um livro que segue a linha do primeiro, o Getting Real. É um livro com dicas de gestão de uma empresa, de um produto, baseado na experiência deles. Para quem não sabe, eles criaram o Basecamp, um software como serviço para gerenciamento de projetos e nada mais nada menos que o badalado framework de desenvolvimento Web, o Rails.

Em boa parte do livro eles focam no fato de fazer o simples, somente o necessário e principalmente trabalhar focado no seu objetivo. É um livro de leitura fácil, organizado em textos de pouco mais de uma página cada. Neste post vou traduzir um pequeno texto do livro, chamado: Todo mundo trabalha!

Todo mundo trabalha

Com um time pequeno, você precisa de pessoas que irão fazer o trabalho, não delegá-lo. Todo mundo deve estar produzindo. Ninguém deve estar acima do trabalho.

Isto significa que você deve evitar contratar delegadores, aquelas pessoas que amam dizer às outras o que fazer. Delegadores são peso morto para um pequeno time. Eles enchem os outros inventando trabalho. E quando eles estão sem trabalho para delegar, eles inventam mais – independente se o trabalho precisa ser feito.

Delegadores amam colocar pessoas em reuniões, também. Na verdade, reuniões são as melhores amigas de um delegador. Lá é onde ele parece importante. Enquanto isso, todos os outros que estão na reunião é impedido de resolver o trabalho real que precisa ser feito.

Antes de delegar uma atividade ou principalmente antes de contratar alguém, pense se você realmente precisa delegar, se não dar para você mesmo fazer esta atividade.

Quem quiser saber mais sobre o livro, o pessoal da Bluesoft fez um vídeo sobre o livro, no blog deles.

Até mais pessoal…

Encontro no:sql(br). – Eu fui!

maio 16, 2010

Ontem às 08:30 começou o no:sql(br)., um evento sobre banco de dados NoSQL (Not only SQL). Para quem não conhece o assunto, recomendo a leitura deste artigo.

O evento foi organizado pelo Alexandre Porcelli e inicialmente era para ser uma reunião de usuários de NoSQL. Porém, para a nossa sorte, acabou tomando maiores proporções, e uma reunião que poderia ser realizada sem maiores problemas numa sala de aula, teve que ser transferido para o auditório do Hotel Park Suites ITC Vila Olímpia, localizado na zona sul de São Paulo.

Eu e o Rodrigo Ribeiro tivemos a força de vontade e a nerdice, para acordar bem cedo em pleno sabadão, para ir a esse primeiro evento de NoSQL no Brasil (acredito que seja o primeiro).

Abaixo relato as minhas expectativas, impressões e falo um pouco sobre cada palestra que ocorreu. 🙂

Expectativas

Confesso que eu só fui me interessar pelo evento na última quinta-feira (hehe). Após ter tido que pesquisar sobre bancos NoSQL para um novo projeto que estamos desenvolvendo aqui na Voice. E ao pesquisar e estudar tive dificuldades em entender esse “novo” paradigma, e então, lembrei do no:sql(br). que foi divulgado pelo Rodrigo na lista do Ensinar. Só aí que fui me interessar pelo evento, justamente para clarear as minhas ideias sobre o assunto e poder aprender mais, uma vez que seria uma excelente oportunidade de aprender sobre NoSQL e principalmente, quando usar um NoSQL.

Abertura – Alexandre Porcelli (OpenSpotLight)

O Alexandre Porcelli, idealizador do evento, fez a abertura do mesmo, falando sobre como foi a origem do evento, que como disse antes, era para ser uma reunião de usuários NoSQL, e uma desculpa para ir num buteco depois. Porém, a conversa que começou no twitter, acabou tomando maiores proporções (o poder do twitter é incrível) e já no primeiro dia de inscrições foram mais de 100 inscritos!

O Strange Loop foi uma das inspirações para o evento, por sua característica mais simples e de baixo custo. E no caso do no:sql(br). o custo para os participantes foi ZERO!

O Alexandre lembrou que o evento não era para falar mal de banco relacionais, afinal NoSQL, é sobre escolha e não sobre ser contra algo. E depois o Alexandre fez um jabá de seu projeto open-source o OpenSpotLight, que objetiva ser um Google para a área de TI (Google4IT).

No final da abertura, o Porcelli informou que estará organizando um novo evento para o próximo semestre, que será sobre Linguagens Emergentes & DSLs.

noSQL anti-patterns – Gleicon Moraes (Locaweb)

Na verdade o tema correto da apresentação seria SQL anti-patterns, como foi lembrado pelo Luciano Ramalho.

O Gleicon fez uma apresentação bem legal, foi a que eu mais gostei. Falando sobre anti-patterns SQL, que muitas vezes ocorre não por má vontade do desenvolvedor e sim porque o mesmo não conhece outras alternativas (leia-se NoSQL).

Abaixo uma apresentação utilizada pelo Gleicon no evento da Locaweb, mas que é a base senão até igual a apresentação utilizada ontem.

Na apresentação Gleicon deixou bem claro a importância de conhecer NoSQL, pois muitas vezes fazemos a escolha errada, por não conhecer outras formas de implementação. Outros pontos frisados foram:

  • Não há bala de prata
    • considere alternativas;
    • pense fora da normalização;
    • considere a desnormalização como uma opção;
    • simplificar.
  • Algumas mudanças organizacionais são necessárias, o desenvolvedor precisa tomar conta dos dados;
  • “Estou otimizando”, quando na verdade a pessoa está aprendendo a fazer as coisas;
  • É importante conhecer/aprender as ferramentas certas;
  • Boa parte dos problemas ocorrem por causa da mentalidade “relacional”;
  • Verifique se você está muito dependente de cache, cache é bom, mas é remendo. Por isso a dependência de cache pode significar um alerta;
  • Pense mais sobre os seus dados.

Performance e simplicidade com Chave/Valor utilizando REDIS – Luiz Fernando Teston (OpenSpotLight)

O Teston, que também participa do projeto OpenSpotLight, começou a sua apresentação dando um introdução sobre chave/valor que é o modelo de dados utilizado pelo Redis.

Depois da introdução foi comentado que o Redis armazena os dados em memória, por isso é mais rápido. E é possível configurar de quanto em quanto tempo que ele irá persistir esses dados em disco. E além de poder adicionar strings, o Redis também pode armazenar uma lista de itens, set ordenado e array de bytes.

A respeito das chaves:

  • O index é pela chave;
  • Os ids são criados usando auto increment (como no banco relacional);
  • Chaves naturais podem ser usadas (ex.: nome do usuário do twitter);
  • Criar chave muito grande não é performático.

A instalação do Redis é bem simples e quem usa Windows precisa instalar o Cygwin.

Depois o Feston falou sobre os comandos existentes no Redis, maiores detalhes podem ser obtidos nessa página da documentação do Redis.

Qual cenário que você indica o uso do Redis?

Quando a busca por dados na memória é possível e quando o seu modelo de dados se adequa bem ao modelo chave/valor.

Por fim, o Feston deixou bem claro que o Redis não tem limitação de memória, uma vez que ele pode fazer uso de memória virtual.

O papel do REST no Neo4J e CouchDB, um comparativo – Guilherme Silveira (Caelum)

Um dos poucos palestrantes que eu já conhecia, embora não tenha visto nenhuma palestra ao vivo, só as gravadas (rs). O Guilherme Silveira é sem dúvidas um dos grandes entusiastas de REST, e aliás, ele é o desenvolvedor do Restfulie.

A palestra foi bem voltada para o mundo Web e focando em REST. E de início o Guilherme falou sobre escalabilidade, dizendo que “escalar é dá vazão para mais” e a web “é o maior sistema distribuído que o ser humano criou”, portanto, podemos aprender bastante coisas sobre escalabilidade com a Web.

Foi falado da importância de ser stateless, pois assim o servidor não precisa saber quem é você e o usuário pode ser “servido” por qualquer servidor (quando você faz uma pesquisa no Google, por exemplo, para o usuário a impressão é de está acessando o servidor do Google, quando na verdade ele está acessando e sendo servido por vários servidores).

O Guilherme lembrou que cache é fundamental para a escalabilidade, e podemos cachear tanto no cliente, intermediários e no servidor.

Dentre os pontos principais da apresentação destaco:

  • Evite bater no BD, ou seja, usar cache e perguntar só uma vez ou só para confirmar se a informação é a atual;
  • Ao ínves de usar uri pattern, usar links;
  • Há uma RFC para links, a 5829;
  • Usar melhor o header do html, por exemplo colocando um link de histórico nele;
  • O trabalho do BD não é cachear;

O auge da apresentação foi quando o Guilherme falou sobre visibilidade, o problema é que eu não me lembro muito bem o que ele falou (rs).

Pegar um sistema em camadas e tentar fazer tudo numa única camada, não é solução nenhum pouco inteligente, uma vez que é importante desaclopar os componentes da sua arquitetura.

No final o Guilherme ainda apresentou um exemplo usando Ruby e Sinatra, onde ele transformar os valores obtidos no CouchDB em links e depois ele falou sobre o QCon, que parece ser um evento bem interessante (estou pensando em ir).

A apresentação do Guilherme foi bem legal, mesmo ele não falando muito sobre o CouchDB, cuja interface é via REST. Ele fala de uma maneira bem empolgada e a apresentação tinha imagens que garantiam boas risadas da platéia.

Introdução ao MongoDB – direto da fonte! – Alberto Lerner (10gen)

A apresentação do Alberto, que veio de Nova York só para participar do evento, foi sobre o MongoDB do pessoal da 10gen, um banco de dados orientado a documentos open-source.

A palestra foi bem legal, principalmente pelo fato de ser introdutória (hehe) e ter mostrado as características e comandos do MongoDB.

O Alberto começou a apresentação falando sobre a origem do nome, que veio da palavra inglesa “humongous” que é usada de forma coloquial e significa gigante (para nós brasileiros não é um bom nome rs).

Os documentos são armazenados no formato JSON, e numa analogia com uma banco de dados relacional:

  • O documento JSON seria o registro;
  • As collections seria uma tabela;
  • Os índices seriam os índices mesmo;
  • O embedding e o linking seria o join.

Depois o Alberto apresentou os comandos principais do MongoDB, esclarencendo que o MongoDB não tem uma linguagem de consulta, o que existe são expressões/comandos, que são usados no formato JSON.

Algumas características interessantes do MongoDB:

  • É possível acrescentar dados, por meio de um update;
  • Não existe um schema dentro das coleções, ou seja, as collections podem ser dinâmicas;
  • Há upserts, que podem atualizar se documento já existe, ou cria se ele não existe;
  • Você pode armazenar o seu dado da forma que ele ocorre na “natureza”.

O Alberto também falou um pouco sobre replicação e sharding, onde deu para perceber que o MongoDB é bem flexível.

Dentre as empresas que já usam o MongoDB, destaque para o SourceForge e a FourSquare.

No final o Alberto convidou o pessoal a participar do projeto do MongoDB, dizendo que a língua não é uma barreira, o importante é a contribuição. E todo o código do MongoDB está disponível no GitHub.

Tio: um NoSQL made in Brasil – Rodrigo Strauss (1bit)

A apresentação do Rodrigo Strauss foi sobre o seu projeto chamado Tio, que é um servidor de estrutura de dados com publish subscribe.

Os slides da apresentação já foram disponibilizados pelo Rodrigo e podem ser conferidos no link abaixo:

http://docs.google.com/present/view?id=dg9kbfzn_73m4c7qvc6

O Tio é um projeto no qual o Rodrigo vem trabalhando já há 3 anos, e na época em que ele começou NoSQL ou não existia ou não era “mainstream”.

E a ideia do Tio é que o seu uso seja tão fácil quanto usar a sua linguagem de programação. O core do Tio, é o publish subscribe, onde qualquer um pode assinar para receber as mensagens da sua aplicação.

Algumas características do Tio:

  • Para usar o Tio você pode conectar via telnet/netcat;
  • Ocupa 700k de memória (com a base limpa é claro);
  • Você modela os dados igual você modela na sua aplicação;
  • Desenvolvido em C++;
  • Há uma api em Python, criada pelo próprio Rodrigo;

O Rodrigo ainda fez uma demostração do Tio fazendo um aplicação de chat, que depois basicamente só precisava da implementação do lado do cliente, e para isso ele utilizou a API em Python.

No final o Rodrigo ainda falou sobre as vantagens, limites e o que existe atualmente (tudo isso pode ser conferido no link que passei da apresentação).

Nas Nuvens com KVM, JBoss REST-Easy e InfiniSpan – Edgar Silva & Samuel Tauil (Red Hat Brasil)

A apresentação do Edgar Silva e do Samuel Tauil, começou com o Edgar falando sobre o KVM, que possibilita a virtualização nativa no SO. E a virtualização possibilita uma melhor utilização do hardware.

O Edgar lembrou que para NoSQL você precisa de uma:

  • Infraestrutura;
  • Armazenamento;
  • Acesso.

Depois foi falado um pouco sobre REST, onde a ideia é de mapeamento de verbos de serviços na Web usando URIs. Exemplo: tv/canal/121 [recurso|objeto|valor]

O Samuel falou sobre o Infinispan, que é uma plataforma dados em grid open-source, voltada para permitir o cache distribuído.

A parte da apresentação do Samuel foi focada em mostra o Infinispan na prática, mostrando a inserção de dados por meio de uma interface swing e visualizando os mesmos no navegador web.

No final o Edgar voltou e mostrou um pouco do REST-Easy.

Divide et impera – Processamento massivo com Hadoop, Pig e HBase – Vinicius Carvalho (SambaTech)

A minha expectativa para essa palestra estava alta, pois eu já tinha brincado/apanhado um pouco com o Hadoop (até fiz um post aqui no Ensinar), e queria saber como o pessoal da SambaTech está usando o Hadoop.

O Vinicius começou a apresentação explicando sobre o projeto Hadoop e depois contanto que eles usam ele para o processamento de logs, mas ainda a caráter de “prova de conceito”, embora executem toda sexta-feira o script escrito em Pig lá na Amazon.

O Hadoop é um framework de MapReduce mais utilizado, implementado em Java, capaz de executar Petabytes

Foi falado também sobre Grid Computing, onde a ideia principal é a distribuição da computação (processamento). E se formos pensar, uma arquitetura cliente-servidor já é um exemplo, embora “tosco”, de computação distribuída.

Depois o palestrante falou sobre o paradigma do MapReduce, no qual o objetivo é  mapear (map doh!)  dados que estão armazenanados de forma distribuída e depois processá-los (reduce).

O desafio do pessoal da SambaTech era fazer em Pig, o que antes era feito por um script em perl, que rodava em uma máquina.

Mais que raios é esse Pig, você deve está se perguntando… ele é uma linguagem de data-flow, de alto nível para você escrever as suas funções MapReduce.

Por que Hadoop?

O Vinicius falou as razões pelas quais eles investiram no Hadoop:

  • Dado está disponível (twitter. facebook)
  • Storage está barato
  • Web 2.0 demanda de inteligentes soluções
  • Cloud computing

O interessante da palestra foi a explicação sobre o Pig, que como disse antes é a linguagem utilizada para escrever as funções MapReduce, e a sua utilização adicionar 20% de overhead. Putz, então usar Pig é ruim!? Nem tanto, pois ele facilita bastante as coisas, uma vez que criar map/reduce não é fácil, pois o paradigma é diferente e na hora de criar o workflow que a coisa complica ainda mais.

A apresentação do Vinicius teve que ser encerrada antes dele falar sobre o HBase, que acredito que era o assunto principal para o evento. 😦 A respeito dos slides, a cor azul do texto no fundo branco, tornava praticamente impossível a leitura dos slides e havia muito texto.

Estudo de caso: avaliando o Apache Cassandra como cache distribuído – Julio Viegas (GlobalCode)

A apresentação do Julio foi sobre como eles estão trabalhando com NoSQL lá no SPC Brasil, para não substituir o Oracle e sim usar o Cassandra como cache. O sistema deles tem cerca de 100 transações por segundo, 22 processos, cache mutáveis com replicação via Ehcache + rmi, sendo esse cache chave + valor.

O Julio tentou usar o Terracotta, mas não foi uma experiência muito legal, devido a instrumentação.

Foram avaliados os seguintes NoSQL do tipo chave + valor:

Alguns pontos interessante sobre o Cassandra:

  • Criado pelo Facebook, e usado em parte dele;
  • Open-source;
  • Baseado no Amazon Dynamo;
  • Tem como usuários: digg, reddit, cisco webex, rackspace, twitter;
  • Baseado no modelo chave + valor;
  • Tipos dinâmicos versionados com timestamp;
  • Atomicidade por chave;
  • Configuração simples (isso é bem legal).

O pessoal do SPC precisava de:

  • Armazenamento descentralizado;
  • Tolerante a falhas;
  • Elástico: adicione mais servidores a quente;
  • Escala horizontalmente.

E o Cassandra trabalha justamente com disponibilidade e tolerância a perda de partições. sacrificando um pouco da consistência (afinal não é possível ter o máximo de disponibilidade, consistência e tolerância a falhas ao mesmo tempo CAP).

Com o Cassandra não é possível fazer order by, por isso é necessário gravar já de forma ordenada.

A apresentação do Julio foi bem interessante, deu para conhecer o Cassandra, que aliás, é o NoSQL que as pessoas mais usam ou tem interesse em usar.

Depois ainda teve um painel de discussão, no qual a pláteia e os palestrantes bateram um bate-papo sobre noSQL, falando desde de quando não usar um banco de dados relacional até as dificuldades em implantar um banco noSQL, que em boa parte das vezes, ocorre por causa da cultura da empresa, ou melhor, das pessoas.

No final ainda teve o happy/breja hour, mas eu não participei, pois já estava cansado (dia todo com o note no colo é osso) e a viagem para casa era longa 😦

Conclusão

O no:sql(br). foi muito bom! Uma organização EXCELENTE, melhor que muito evento pago (e uns até bem pagos) por aí. Os coffee breaks foram sensacionais (pensou que eu tinha esquecido de falar deles rs). A galera que estava presente estava realmente a fim de saber sobre o assunto (acho que todos que estavam lá, era por interesse próprio e foram por vontade própria) e mostraram ter o espírito de comunidade, muitos contribuiram com doações antes do evento e durante o evento, quando o chapéu do Borcelli passou (hehe).

As palestras foram muito boas, e a grade estava bem diversa, então deu para ter uma boa visão geral do mundo de NoSQL. Só senti falta de uma apresentação introdutória, embora o foco do evento tenha sido para as pessoas que já tinham um conhecimento/experiência prévia sobre NoSQL.

Minhas expectativas foram superadas, agora eu entendi melhor o paradigma do NoSQL e nessa semana estarei fazendo mais testes com o CouchBD de início, e talvez depois com o MongoDB, os dois que tem o modelo de dados por documentos, que parecem que se adequam melhor para a nossa necessidade (relatórios de chamadas).

Além disso, pude rever um pessoal do Guru-SP (dia 29 tem o Ruby on Rails no Mundo Real 2010, estaremos lá!) e ainda conhecer e conversar um pouco com o Akita, que deu uma dica que pode ser bem útil para nós. 🙂

Para terminar o post, gostaria de dá os parabéns ao Alexandre Porcelli, pelo excelente evento! E também a todos que foram, afinal como o Porcelli falou “é um evento da comunidade para a comunidade”. 😀

-Se o seu modelo de dados se adequa bem ao modelo chave/valor

3º Desembucha Aí! Lean

maio 8, 2010

No dia 30 de abril ocorreu a terceira apresentação do Desembucha Aí! Desculpe por só hoje ter colocado o slide.

Nesta apresentação eu falei sobre Lean e como eliminar desperdícios. Diversas pessoas compareceram.

Abaixo, compartilho a apresentação utilizada:

Valeu pessoal!

E o próximo “Desembucha Aí!”  deve ocorrer esta semana, mas ainda não sabemos o tema.

Até a próxima!

JBoss In Bossa – Apresentação Mobicents

maio 8, 2010

Pessoal,

Hoje eu e o Antonio fomos ao JBoss In Bossa 2010 palestrar sobre Mobicents.Estávamos meio ansiosos em relação a palestra porque telefonia não é um assunto que seja do conhecimento e do cotidiano da maioria dos desenvolvedores.

Estavam presentes cerca de 20 pessoas e como a maioria não conhecia de telefonia, que é o esperado neste tipo de evento, fizemos uma apresentação que apresentou mais conceitos nos 45 minutos iniciais e na cerca de 1 hora e 15 minutos restantes mostramos o código necessário para esta implementação.

Espero que as pessoas presentes  gostaram da palestra e fiquem à vontade para entrar em contato. Quem quiser acesso ao código é só ir no Git Hub do Antonio: http://github.com/antonioams .

Segue a apresentação que foi utilizada no evento. Maiores informações podem ser obtidas na página com detalhes da Palestra.

Mobicents: Arquitetura de uma plataforma de comunicações

maio 6, 2010

Como já foi dito no post inicial da série o Mobicents é um servidor de aplicação focado em aplicações de convergentes, entende-se por aplicações de convergentes aquelas que demandam de todos os recursos que um servidor de aplicações padrão (Web Container, Message Driven Beans, Enterprise JavaBeans, ORM, etc.) fornecem, e além disto, demandam de suporte a diversos protocolos de comunicação Real Time (SIP, XMPP/Jabber, MGCP, etc.), possibilitando a implementação de aplicações que integram recursos web com recursos de telecomunicações.

O Mobicents é a primeira implementação Opensource da JSR-240 JAIN SLEE (Service Logic Execution Environment) esta JSR define uma padrão para o desenvolvimento de um container para aplicações de telecomunicações que exigem um ambiente de execução de aplicações de alta capacidade de Throughput, com baixa latência, e alta escalabilidade, mais detalhes sobre o JAIN SLEE pode ser visto em: http://www.jainslee.org

Neste post iremos fornecer uma visão geral sobre a arquitetura do Mobicents, e também sobre os recursos fornecidos pelo mesmo.

O Mobicents foi desenvolvido em cima do JBoss, portanto ele desfruta de todos os recursos que o mais famoso servidor de aplicações open source fornece, tais como: console de gerenciamento Web, interface de gerenciamento JMX, SNMP, Container Web, JMS, EJB, ORM, etc.

A novidade que o Mobicents traz, fica por conta dos Resource Adapters ou simplesmente RA, pois todos os protocolos de comunicações suportados por ele são implementados como um RA, na figura abaixo temos as principais camadas da arquitetura do Mobicents:

Arquitetura Mobicents

JSLEE + J2EE Application Server

Container de aplicações, nesta camada temos o JBoss como um servidor de aplicações JavaEE, e além disto temos a implementação do JAIN SLEE, esta camada é responsável pela hospedagem das aplicações e gerenciamentos dos seus diversos recursos.

Management Interfaces

Nesta camada temos todas as interfaces de gerenciamento fornecidas pelo JBoss, Web Management Console, JMX Console, SNMP, etc. desta forma todos os recursos e aplicações disponíveis no Mobicents podem ser gerenciadas por todas as interfaces fornecidas pelo mesmo.

External Resources

Esta é a camada responsável por trazer todos os protocolos de comunicações, e/ou recursos necessários para o desenvolvimento de aplicações de telecomunicações para dentro do Application Server possibilitando as aplicações se utilizarem deste recursos externos que são chamados de RA ou Resource Adapters.

Cada Resource Adapter é responsável pela implementação de um protocolo de comunicação, ou de controle de um recurso externo, desta forma, temos RA’s para implementar protocolos como: SIP, Jabber, XMPP, MGCP, Diameter, dentre outros, e temos RA’s para controlar o Asterisk, e o próprio Mobicents MediaServer para agregar a capacidade de processamento de media (gravação, reprodução de aúdio e vídeo, reconhecimento de dígitos, transcodificação, etc.) dentro das aplicações.

Abaixo temos um exemplo, de qual componente roda em qual camada, além de exemplificar como as mesma se comunicam:

Funcionalidades fornecidas pelo Mobicents:

Protocolos de comunicações suportados

  • SIP
  • Jabber
  • XMPP/Jingle
  • Parlay
  • Diameter
  • MGCP
  • SMPP
  • SS7
  • Camel
  • XCAP
  • TCAP

Recursos de Media

  • RTP formats: G711, G729, GSM, SPEEX, PCM 16bit 8-44kHz (Mono/Stereo)
  • Audio Codecs: G711,G729,GSM, SPEEX
  • Geração e Detecção de sinais DTMF, BUSY, etc. for inband and outofband (RFC-2833) mode
  • Media files *.wav (G711, GSM, PCM), *.spx(SPEEX), *.gsm

Recursos JavaEE

  • JSP Container
  • JMS
  • MDB
  • EJB
  • LDAP
  • HTTP/HTTPS
  • JMX
  • SNMP
  • Etc.

Alta disponibilidade

  • Load Balancer
  • Multi node cluster
  • Session replication

Performance

  • Capacidade de processar até 750 Caps em um único servidor.
  • Possbilidade de montar um cluster com multiplos servidores em Load Balance

Aplicações que podem ser implementadas sob o Mobicents

  • Aplicações IVR
  • Voicemail
  • Unified Messaging
  • Plataforma de Pré pago
  • Plataforma de 0800
  • Softswitch
  • Location Based Services
  • Instant Messaging
  • Presence Server
  • Etc.

Como vocês podem ver quando se trata de aplicações para a Telecom o céu é o limite do Mobicents, pois com todos os recursos que ele já tem embutido mais as possibilidade que o próprio JBoss tem, é uma questão de criatividade, e tempo para implementar uma aplicação.

Abraços,

Antonio Anderson Souza

Colocando o Mobicents com SeamTelcoFramework para rodar

maio 6, 2010

Este post é um tutorial que visa guiar a instalação completa do ambiente de desenvolvimento de aplicações de telecomunicações com foco no protocolo SIP e tratamento de recursos de Media, utilizando o Mobicents e o SeamTelcoFramework o exemplo mais clássico deste tipo de aplicações são as tão famosas URA’s.

Estou utilizando um CentOS 5.4 como base para este tutorial, para quem estiver utilizando este tutorial em outro S.O. só tome cuidado com os caminhos de diretórios, pois podem ser diferentes.

Instalando o Eclipse

Efetue o Download do Eclipse Galileo Eclipse IDE for Java EE Developers para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/eclipse

Instalando o Mobicents

Efetue o Download do Mobicents 1.0 com Jboss 4.2.3 (estamos utilizando esta versão pois o SeamTelcoFramework ainda não é compatível com o Mobicents 2 e JBoss 5), para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/mss-1.0-jboss-4.2.3.GA

Instalando plugins necessários para o eclipse

  1. Adicione o Jboss tools update site através do menu “Window” > “Preference” > “Install/Update” > “Available Software”
  2. Vá no menu “Help” > “Intall Software”
  3. Selecione o site “Jboss Tools” (site que foi adicionado no passo 1)
  4. Selecione os pulgins listados abaixo que estão dentro de “All JBoss Tools” e prossiga com a instalação dos mesmos:
  • JBoss Tools RichFaces
  • JBossAS Tools
  • JBoss Seam

Instalar o Seam Runtime

Efetue o Download do JBoss Seam 2.1.1GA, para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/jboss-seam-2.1.1.GA

Configurando o JBoss Runtime Environment no Eclipse

Vá em “Window”> “Preferences” > “Server” > “Runtime environments” e adicione o Mobicents como um JBoss Community 4.2

Vá em “Window” > “Show view” > “Servers” Adicione um novo servidor baseado no JBoss 4.2 Runtime environment.

Configurando o Seam Runtime no Eclipse

Vá em “Window”> “Preferences” > “JBoss Tools” > “Web” > “Seam” e adicione o JBoss Seam 2.1.1

Pronto neste momento o seu ambiente de desenvolvimento está totalmente instalado, agora é começar a brincar com um projeto.

Criando o primeiro projeto

Crie um novo projeto do tipo “Seam web project”, clique em next até o formulário “Configure Seam Facts Settings”, neste formulário faca as seguintes configurações:

  • Crie um datasource
  • Renomeia os pacotes padrão para um nome apropriado
  • Desative a checkbox “create test project” (Não abordarei sobre os testes neste tutorial).
  • Feito isto clique em “Finish”

Ativar o SeamTelcoFramework em nosso projeto

Adicione os seguintes arquivos a pasta “WEB-INF/lib” do projeto:

Adicione o arquivo sip.xml ao diretório “WEB-INF” do projeto.

Pronto neste momento já temos tudo pronto para começarmos a implementar a lógica da aplicação.

Criando uma Classe para tratar as chamadas SIP

Adicione a classe FirstTelcoClass.java dentro do pacote “<seu pacote>.session”, esta classe implementa uma simples lógica de observar as requisições SIP (INVITE, BYE), quando receber um INVITE atender a chamada e anexar uma sessão de media do Mobicents a mesma, reproduzir um arquivo wav para que você possa ouvir a aplicação funcionando, e depois fazer um eco dos dígitos recebidos (a cada DTMF que você discar a aplicação reproduzirá o mesmo audio).

Inicie a o Servidor, aguarde até 0 Seam iniciar, pois as vezes ele demora algums segundos para subir, para ter certeza que o Seam iniciou verifique a seguinte mensagem no console “13:39:41,641 INFO  [SipApplicationDispatcherImpl] SipApplicationName : FirstTelcoProject/ServletName : SeamEntryPointServlet

Configurando o Mobicents para rotear as request INVITE para nossa aplicação

Após o servidor ter iniciado abra um browser com o seguinte endereço: http://127.0.0.1:8080/sip-servlets-management na coluna que tem o header INVITE adicione a nossa aplicação, apos adicionar clique em save.

Agora nossa aplicação esta pronta para atender chamadas e falar conosco.

Configurando o Ekiga para fazer chamadas

Adicione uma nova conta no Ekiga “Edit” > “Accounts”  > “New” e configure a mesma igual a imagem ao lado (senha pode colocar qualquer coisa).

Não esqueća de ativar a conta criada, deixando ativo a checkbox da mesma.

Hora de testar se tudo isto que fizemos esta funcionando

Utilizando o Ekiga digite qualquer string na caixa de texto na tela principal do mesmo, e clique no icone localizado a direita desta caixa de texto, neste momento o Ekiga enivará uma request INVITE para a nossa aplicaćão, que da forma que esta programada atendera a chamada e reproduzira um audio.

Bom pessoal é isto, agora já temos uma aplicaćão de telefonia baseada no SeamTelcoFramework rodando dentro do Mobicents, agora é hora de botar a sua cachola para funcionar e modificar esta aplicaćão adicionando novas funcionalidades, se quiser depurar a mesma é só colocar um breakpoint no eclipse e fazer a chamada no Ekiga.

Espero que este conetúdo seja util para vocês, qualquer duvida, sugestão, whatever deixa o seu comentário aqui, pois teremos prazer em responder.

Referencias:

http://groups.google.com/group/mobicents-public/web/seam-telco-framework-for-sip-servlets

http://groups.google.com/group/mobicents-public/web/user-guide

Abraços,

Antonio Anderson Souza