Categorias
Desenvolvimento Web eventos

Aplicações heterogêneas e a busca por conhecimento

Estive muito tempo sem escrever neste espaço por dois motivos: falta de tempo hábil e de um tema “supimpa”, que não fosse o mesmo abordado milhões de vezes por milhões de outros blogs.

Felizmente a falta de tempo ainda é um problema, graças aos trabalhos na Radig. Digo felizmente por que é muito bom trabalhar no que você gosta, com grandes amigos e possibilidades infinitas. Mas agora os assuntos estão fervilhando na minha cabeça.

Hoje quero falar um pouco de aplicações heterogêneas. Não sei nem se o termo é utilizado, busquei  no oráculo e não encontrei referências, tentei por sistemas heterogêneos mas o que vem são informações sobre química e soluções heterogêneas.

Mas se o termo não existe, o que quero dizer com aplicações heterogêneas? São aplicações que mesclam tecnologias diferentes com um mesmo propósito, por exemplo: uso de dois modelos de SGDB’s ou duas linguagens de programação server-side, mas que compartilham informações de modo altamente acoplado.

Venho trabalhando em alguns produtos (um deles é o Juris, conhece?) e um dos recursos que implementamos são notificações em tempo real sobre ações dentro do sistema para os usuários de interesse.

No projeto do sistema de notificações nós tínhamos os requisitos:

  • Baixo tempo de resposta entre a ação e o disparo de notificação
  • Escalabilidade – suportar, sem sobrecarregar o servidor, mais de 1000 conexões simultâneas
  • Fácil manutenção
  • Independência do sistema – acoplamento baixo em código, mas alto em relação aos dados

Nossos principais sistemas foram desenvolvidos em PHP, portanto parecia natural escolher a triad PHP+APACHE+(MySQL/PostgreSQL) para o sistema de notificação. Parecia.

Em abril deste ano tive a felicidade de participar do evento BrazilJS, onde pude ver feras como Mike Taylor, Richard Worth e seu irmão* Guilherme Chapiewski, o lendário Maujor, os gaúchos Jaydson e Felipe Nascimento que organizaram um evento do outro lado do país, o Ricardo Coelho – segundo maranhense mais conhecido e influente do país (perde só para nosso querido² Sarney) além do velho conhecido PorKaria.

Duas coisas realmente me chamaram atenção durante o evento: o extensivo uso que tem sido feito da linguagem JavaScript para rodar aplicações no servidor, através do Node.js, e a possibilidade de criação de aplicações com resposta em tempo real com baixo custo computacional através de bibliotecas como Socket.io e PubSub.io ou mesmo protocolos adicionados aos browsers recentes como o websocket.

Estes dois ingredientes (JavaScript no servidor + Websocket) atenderiam perfeitamente os requisitos de minhas aplicações. E a escolha foi feita. Desenvolvi, com poucas linhas de código, toda a aplicação, porém uma parte ficou nebulosa: como compartilhar as notificações geradas em um sistema com outra aplicação? E como saber se a pessoa que está conectada ao servidor de notificações é realmente o usuário autorizado a acessar o sistema? A resposta que encontrei foi compartilhar as sessões.

Como fiz isso? Armazenando a sessão do sistema principal em um banco de dados (escolhi para isso o MongoDB, pela velocidade e escalabilidade), enquanto no servidor de notificação só acesso as sessões disponíveis no banco e verifico se o usuário que tenta acessar notificações está realmente autenticado.

Para implementar isso foi preciso um pouco de pesquisa e adaptação tanto no servidor de notificações quanto no sistema principal, mas os detalhes deixarei para uma próxima oportunidade.

Quero deixar registrado aqui meu tardio parabéns a organização e aos palestrantes do BrazilJS, o evento foi sensacional.
E que o texto sirva de inspiração para aqueles que acreditam na “bala de prata” (ela não existe).
Não deixe de participar de eventos, comunidades ou fóruns. Nunca pare de estudar, algo que era uma boa solução à 1 ano hoje pode ser uma péssima alternativa perto das demais.

* Piada interna do evento.
² – [/sarcasm]