Qual melhor Arquitetura para monitoramento online

Boa tarde pessoal!

Estou com a seguinte dúvida:

Preciso desenvolver um Sistema para monitoramento de produção, será assim:

Um equipamento eletrônico monitora a fabricação de um dado produto.

Este equipamento estará ligado em um PC local

Junto com esse PC vai ter uma tela com interface gráfica da quantidade de produtos fabricados por hora em um turno de trabalho, que ficará disponivel para consulta no próprio posto de trabalho.

Toda vez que o funcionário terminar um produto, o equipamento eletrônico automaticamente enviará informações para o PC local.

Essas informações devem ser enviadas para um servidor.

A interface gráfica local deve ser atualizada para mostrar a nova realidade da quantia de produtos fabricados.

Os dados que ficarem no servidor poderam ser analizados a qualquer tempo pela gerência, mesmo tendo acabado o turno, ou seja, deve ser mantido um histórico de todo o processo.

O que eu pensei:

Na máquina [ PC ] local, rodar um aplicativo ( em java ) em background para ficar ouvindo o equipamento eletrônico ( comunicação porta serial entre os dois ).

Assim que receber informações desse equipamento, o aplicativo entre em contato com uma aplicação no servidor via http ( java - talvez gerenciado pelo mentawai) e essa aplicação no servidor chama o SGBD H2 database para gravar os dados.

De tempo em tempo a interface gráfica ( uma aplicação usando ajax e jquery - Browser ) solicita ao servidor uma atualização de dados.

A duvida é:

Estou mais ou menos no caminho?

Serão varios clientes ( +/- uns 50 ) mandando informações e lendo tb em um tempo bem curto, tipo de segundo em segundo.

Será que o Servidor aguenta?

Com ajax serão abertas e fechadas as conexões não é ( de um em um segundo )? Isso causa degradação do sistema servidor?

Quais são os riscos de um sistema assim?

Gravar dados concorrentemente, obviamente dados distintos uns dos outros, no SGBD H2, dá certo, funciona, ou pode dar deadlock?

Alguém pode me orientar?

Agradeço!!!

Jogando algumas idéias a serem consideradas:

Os teus clientes/gerentes precisam destes dados em tempo real? Com certeza eles querem saber sobre os problemas graves imediatamente, e até alguns alertas de importância um pouco maior também na hora, mas esses dados estatísticos, precisam ser avalidados agora?

Se não precisar de tanto imediatismo, pode considerar um sistema que mande os dados coletados, por exemplo, de 1 em 1 minuto, diminuindo a tua carga.

Fiquei confuso sobre estes teus 50 clientes mandando e recebendo os dados. Essas 50 máquinas vão querer relatórios da fábrica toda, ao mesmo tempo, a todo segundo?

Olá

Separe em 2 coisas distintas:

  1. Usar os dados para atualizar a tela o mais rápido possível

  2. Persistir os dados em um BD ou um NoSQL

Em (1) você pode usar o ESPER caso precise fazer coisas do tipo que faria com SQL e um pouco mais (soma, juntar em dados similares, janelas de tempo, etc.). Caso contrário jogue direto da memória para a tela.

Em (2) você pode fazer sem se preocupar com o mesmo instante em que as coisas vão para a tela.

Provavelmente o servidor aguenta. Eu não faria com AJAX puro. Já ouviu falar em COMET (tipo de projeto em que o Scala/Lift mostra seu valor)? Ou em websockets ou node.js?

[]s
Luca

[quote=Bruno Laturner]Jogando algumas idéias a serem consideradas:

Os teus clientes/gerentes precisam destes dados em tempo real? Com certeza eles querem saber sobre os problemas graves imediatamente, e até alguns alertas de importância um pouco maior também na hora, mas esses dados estatísticos, precisam ser avalidados agora?

Se não precisar de tanto imediatismo, pode considerar um sistema que mande os dados coletados, por exemplo, de 1 em 1 minuto, diminuindo a tua carga.

Fiquei confuso sobre estes teus 50 clientes mandando e recebendo os dados. Essas 50 máquinas vão querer relatórios da fábrica toda, ao mesmo tempo, a todo segundo?[/quote]

Bruno, desde já lhe agradeço pela ajuda…

Respondendo suas perguntas:

Os gererentes vão sim querer saber o exato momento, ou seja, em tempo real.

O que eu quis dizer com os clientes [ 50 ] é que cada linha de produção, no caso as 50, vão ter uma tela onde vão estar em forma de gráfico de barras o quanto aquela linha está em relação a produtividade. Ou seja essas telas tem que ser atualizadas conforme o servidor vai sendo tb.

Será que consegui explicar melhor?

Mesmo assim obrigado desde já!

Rodrigo,

Nesse tipo de caso, um BAM (Business Activity Monitoring) é um tipo de ferramenta ideal. Essa ferramenta monitora dados passados e cria dashboards em tempo real (o usuário vê o gráfico se mexendo). E é tudo feito via web, ou seja, seus clientes podem acessar de qualquer lugar. Num tipo de solução dessas, o Oracle SOA Suite é ideal (usa BPEL para alimentar o BAM). Ou seja, você teria um web service para receber os dados (pode ser o BPEL, mesmo) que alimenta o BAM. Não tenho certeza do custo x benefício pra você, mas sem dúvida nenhuma ficaria extremamente robusto, escalável e … bem , o BAM impressiona, também (seu chefe iria gostar :wink: ).

[]´s

[quote=asaudate]Rodrigo,

Nesse tipo de caso, um BAM (Business Activity Monitoring) é um tipo de ferramenta ideal. Essa ferramenta monitora dados passados e cria dashboards em tempo real (o usuário vê o gráfico se mexendo). E é tudo feito via web, ou seja, seus clientes podem acessar de qualquer lugar. Num tipo de solução dessas, o Oracle SOA Suite é ideal (usa BPEL para alimentar o BAM). Ou seja, você teria um web service para receber os dados (pode ser o BPEL, mesmo) que alimenta o BAM. Não tenho certeza do custo x benefício pra você, mas sem dúvida nenhuma ficaria extremamente robusto, escalável e … bem , o BAM impressiona, também (seu chefe iria gostar :wink: ).

[]´s[/quote]

Olá asaudate,

Me parece muito bom, mas meu caso é um pouco diferente.

Deixa eu me explicar:

Um amigo meu presta serviços para uma empresa, ele tem um equipamento que verifica e testa os produtos que essa empresa fabrica.

Ele quer um software que se comunique com o dele para executar todas essas atividades que eu postei acima.

O pessoal da empresa quer algo não muito caro, e outra, eu gostaria de desenvolver algo não tão complexo para aprender mais sobre java e tb e ganhar um troco é claro.

Portanto, infelizmente não seria o caminho para mim, mas poxa, muito obrigado por me ajudar.

Agradeço a atenção

[quote=Luca]Olá

Separe em 2 coisas distintas:

  1. Usar os dados para atualizar a tela o mais rápido possível

  2. Persistir os dados em um BD ou um NoSQL

Em (1) você pode usar o ESPER caso precise fazer coisas do tipo que faria com SQL e um pouco mais (soma, juntar em dados similares, janelas de tempo, etc.). Caso contrário jogue direto da memória para a tela.

Em (2) você pode fazer sem se preocupar com o mesmo instante em que as coisas vão para a tela.

Provavelmente o servidor aguenta. Eu não faria com AJAX puro. Já ouviu falar em COMET (tipo de projeto em que o Scala/Lift mostra seu valor)? Ou em websockets ou node.js?

[]s
Luca[/quote]

Luca, obrigado pela ajuda tb…

Gostei bastante dessas alternativas que sugeriu, gostaria apenas de dizer que sou iniciante em java e tb tenho trabalhado um pouco com mentawai, conhece?

Tenho pouco tempo para estar estudando novas tecnologias no momento, pois se aprovado o projeto, vão quere-lo em prazo de 2meses ( um piloto ).

Portanto, algo que não fuja muito da minha realidade é o que eu gostaria de implementar, pois tenho pouco tempo.

Acredita que eu consiga fazer com ajax simples sem derrubar o servidor?

Teria alguma ideia para eu seguir nessa linha de raciocinio ou cuidado que deva tomar?

E se puder tb me dar mais explicações do que são essas outras tecnologias : websockets, node.js …, enfim que me aparentaram muito boas e que pretendo sim estar estudando e me preparando melhor para novas oportunidades.

Desde já lhe agradeço novamente!

Valeu mesmo!

Olá

Sabe aquele conselho que vale muito?

Pois é, vou lhe dar um:

Quando a gente não sabe fazer o mais barato é contratar quem sabe. Esta regra pode ser acompanhada de outro conselho: A gente só ganha dinheiro quando outros trabalham para nós.

[]s
Luca

o Luca deu uma dica importante. Voce precisa avaliar o seu grau de conhecimento em java web, somado ao tempo e recursos que dispõe para desenvolver algo desse tipo. Eu vou fazer algo parecido por aqui. Tenho servidores em producao alimentando tabelas que criei justamente para serem lidas por monitores. Ou seja, meus monitores vao de tempos em tempos nessas tabelas para lerem e alimentarem gráficos de acesso e tal. A parte de insercao de dados já estando pronta, o que me falta é ler os dados. Vou criar um sistema maven + jsf para ler e gerar os graficos. O jsf dispoe de componentes ajax ótimos para isso. É só entrar no site do RichFaces e aprender a usar.

Preciso insistir: já existe uma ferramenta (na verdade, uma classe de ferramentas) especializada nisso, e se chama BAM (Business Activity Monitoring).

[]´s

companheiro sabe me dizer uma ferramanta BAM free ?

Achei essa: http://planet.jboss.org/view/post.seam;jsessionid=969B9217E2F16DAD2D239438D91738E9?post=first_look_in_jbpm_bam_console

Confesso que nunca usei, então, não tenho muito a dizer. Eu costumava usar o Oracle BAM e devo dizer que vale a grana.

[]´s

Oi Rodrigo Ribaldo!

Se entendi direito o que vc precisa digo o seguinte:

  1. Pense no conselho que o Luca lhe deu no ultimo post.
  2. Pense de no nos conselhos do Luca.
  3. Se vc chegar neste item lhe dou a seguinte dica:

a) Construa o modelo de seu dominio (ver DDD).
b) Coloque o modelo sob o dominio de um web server.
c) Construa posibilidades de acesso a seu modelo via RMI e HTTP ( o que importa aqui é vc ter flexibilidade de acesso)
d) Considere o uso de JMS (mensagens), assim vc otimiza o tempo; quando o “equipamento eletronico” entrar em contato envie uma mensagem para os modulos interessados - vc não vai precisar ficar lendo tabelas em tempos pré-determinados.
e) Considere envios de emails e SMS em situações criticas - não é dificil de fazer e o resultado chama bastante a atenção alem de ajudar muito tambem.
f) Considere o uso do spring nesta solução.
g) Lembre-se de fazer as coisas de forma modular com o mínimo de dependencia possível.
h) Pense em como vc irá atualizar as versões neste ambiente; geralmente são um pouco hard core - uma troca de versão pode gerar muita raiva na galera.

Acho que é isso aí…estes itens são apenas uma direção, algo para pensar.

flws

asaudate vlw vou tentar essa… vamos ver se é boa mesmo !