Gostaria de saber qual a melhor arquitetura de comunicação para desenvolver um sistema que deve rodar em locais diferentes (distantes - por exemplo SP e RJ) e que deve possuir uma base de dados comum. Os sistemas são idênticos e cada local possui uma conexão ADSL. Não sei se a melhor forma é ter uma base de dados remota ou fazer a atualização (sincronização) dos dados em determinado intervalo de tempo, etc. O sistema será implementado em java com mysql.
Conheço a solução usando socket.
Mas se eu simplesmente realizasse a conexão com o mesmo servidor de banco de dados para todas as aplicações, serah que seria uma solução possível?
O problema eh que fazer integracao atraves de banco de dados em uma aplicacao geograficamente distribuida custa bem mais caro pra manter, ou eh uma pessima ideia:
Da Maneira Cara:
Voce tem diversos servidores de banco de dados replicados em diversas localizacoes, em cima de um link de rede MUITO estavel
Voce tem um banco de dados bom pra esse tipo de coisa (o que ja exclui o MySQL da jogada)
Da Maneira Barata:
Voce poe o banco em um lugar so, e todo mundo se conecta ali. Cai o banco, e a sua aplicacao inteira sai do ar. Se der um problema de comunicacao entre a filial A e a matriz, um pedaco da sua rede sai do ar, mas se o problema for na matriz, boom!
Dai, vai da sua verba, e dos requisitos funcionais da sua app…
[quote=“cv”]O problema eh que fazer integracao atraves de banco de dados em uma aplicacao geograficamente distribuida custa bem mais caro pra manter, ou eh uma pessima ideia:
Da Maneira Cara:
Voce tem diversos servidores de banco de dados replicados em diversas localizacoes, em cima de um link de rede MUITO estavel
Voce tem um banco de dados bom pra esse tipo de coisa (o que ja exclui o MySQL da jogada)
Da Maneira Barata:
Voce poe o banco em um lugar so, e todo mundo se conecta ali. Cai o banco, e a sua aplicacao inteira sai do ar. Se der um problema de comunicacao entre a filial A e a matriz, um pedaco da sua rede sai do ar, mas se o problema for na matriz, boom!
Dai, vai da sua verba, e dos requisitos funcionais da sua app… ;)[/quote]
Então, supondo que eu necessite que os dados estejam sempre on-line e que mesmo com um problema de conexão a aplicação local ainda continue operando com funcionalidades básicas. Devo manter então bases de dados locais e ficar realizando a atualização dos dados constantemente? Como manter a integridade dos dados dessa forma? Alguém tem um exemplo de aplicação distribuída geograficamente ou referências para eu pesquisar?
Avalia a seguinte situação:
Eu nunca fiz isto porém me pareceu interessante.
app cliente <-> http <-> servlet <-> “um framework de persistência” <-> db
A porção cliente do seu aplicativo (front-end) bem pensadinha fazendo toda a parte de consistência de entrada de dados e tratando se o servidor está no ar ou não.
Em algumas situações de entrada de dados o cliente poderia continuar funcionando mesmo com o servidor fora do ar (como um pdv por exemplo).
Uma boa implementação de servidor baseado em servlets instanciando classes com toda a regra do negócio.
Quer dizer, você teria flexibilidade na implementação do cliente (liguagem e dispositivo) e do banco de dados também.
É uma ídéia. Quem sabe pode ficar legal …
Como não conheço o suficiente para saber o que poderia complicar numa implementação desse tipo, com a palavra o grupo.
Bom, utilizar o banco de dados como middleware “puro” nunca é legal, as vezes é necessário [ou pior: é legado!!!], mas legal nunca é.
Você poderia utilizar um banco leve, tipo hsqldb, para fazer cache deste banco matriz nos clientes, mas se sua aplicação precisar de updates frequentes, o ideal é que ambos os clietnes trabalhem na mesma base, se não você vai se perder em controle de concorrência [hajam Observers!!].
Acho que a primeira coisa é definir qual tipo de clientes você precisa. Se precisar de coisas que HTML não te oferece, e creio que só nestes raros casos [comunicação com serial, etc.], você deveria largar uma estrutura web-based, utilizando browsers.
Se não puder fazer algo assim, por que não colocar sua camada de lógica de negócios em um servidor remoto e deixar só a apresentação no cliente? Os cliente se conectam, enviam dados e recebem resposta. Conheço gente que implementou um ERP terceirizado com EJB num Oracle AS em Santa Catarina, tem cliente pelo país todo conectando via ADSL ou linha discada, utilizando um front-end gráfico em Delphi. O troço até que funciona legalzinho… Você poderia tentar algo na linha utilizando algo mais leve, talvez conexões em HTTP/HTTPS com um Servlet “Façade”, antes que alguém me xingue por falar em EJB aqui
PS:
ô, cv, qual a birra com o MySQL :?: :!: :?: :!: :?: :!: