Olá senhores,

Gostaria da opinião de vocês acerca de uma especificação da arquitetura no seguinte contexto: os clientes precisam de um sistema com alto desempenho e disponibilidade. Eles estão distribuídos em 5 cidades no Brasil. Devido ao requisito de desempenho de disponibilidade, um sistema web não os atende (além de ser mais lento, eles não podem parar se a Internet local cair), é necessário um sistema desktop, com banco de dados na rede local. Porém, como estão distribuídos, todos os bancos de dados devem estar sincronizados, inclusive com um um banco de dados em um servidor web para acesso via portal.
Qual a melhor estratégia arquitetural, na opinião de vocês? Acho que este é um problema recorrente nos dias de hoje. Vejo muita gente utilizar remote desktop access, mas no caso do cliente, também não os atende.

Exibições: 520

Responder esta

Respostas a este tópico

Vamos lá.

Alegar que o sistema não pode ser WEB devido a indisponibilidade de internet não é um bom argumento. Hoje atuo numa grande empresa de logística, acredito que ela seja a maior do Brasil, temos quase 500 filiais espalhadas por este Brasil de meu Deus. Nosso sistema é WEB, não é o melhor do universo mas as indisponibilidades que temos nas filiais não afetam o desempenho e tão pouco param as operações.

Mesmo você fazendo uso de sistema local + banco de dados local, você terá problemas com a sincronização caso não exista internet e dependendo do volume a ser trafegado para fazer a sincronização uma internet ruim vai ser sim um problemão. Portanto, este é um fator de risco que sempre haverá. No meu caso, nós fazemos a rota inclusive até por meio de modem de operadora de celular e a coisa flui nos preocupamos principalmente na volumetria do que vai trafegar para se necessário até usar um modem de 256k (lembra aqueles US Robotics antigos mas que eram uns tratores? )

Você precisa avaliar, que tecnologias você poderá utilizar e que te dê um desempenho bom na troca de informações essenciais e que não pare sua operação caso haja algum problema com internet.

Tenho um caso, onde analisamos durante muito tempo o que poderíamos utilizar para fazer trafego de informações entre um ponto remoto (quando me refiro a remoto me refiro a um motorista em algum lugar remoto do país) e nossa matriz, avaliamos até o uso de SMS e MMS pois por lei, as operadoras de celular precisam garantir que estes 2 serviços funcionam porque nestes casos, você pode até não ter sinal de voz mas o SMS precisa ser enviado.

Espero ter ajudado.

Atte,

Marcelo Costa

Concordo com nosso colega Marcelo, mas tenta detalhar um pouco mais a realidade do seu cliente para melhorar nosso entendimento e ajuda-lo ainda mais..

Bom, pelo que entendi você pretende utilizar uma solução de comunicação com link dedicado, uma VPN paga. Tenha em mente que esse tipo de serviço também tem problemas (a disponibilidade nem sempre é uma maravilha como se imagina). A empresa onde trabalho possui servidores em várias capitais e algumas delas precisam acessar informações de Brasília para autenticação ou outras formas de centralização de informações.

Em primeiro lugar você terá um custo de manutenção alto para manter esta disponibilidade via VPN dedicada. Também não é incomum termos problemas devido a esta centralização ou dependência com um servidor em local X. Já ficamos horas inoperantes devido a este tipo de problema enquanto a internet local estava funcionando normalmente. Escolha uma boa operadora que forneça um bom serviço, mas tenha em mente que dificilmente você deixará de ter algum problema de disponibilidade durante o ano.

Concordo Jefferson,  acho que os detalhes apresentados não  são suficientes para embasar as decisões que você precisa. O fato da aplicação ser web ou desktop, a principio, não está relacionado com o seu problema. Por exemplo, você poderia ter aplicações web nas redes locais e de forma assíncrona fazer de integração entre as bases de dados. Também não sei o que pode ser pior, depender da internet funcionar, ou depender da infra local de cada filial e todas as possibilidades de falha, e continuar dependendo da Internet para sincronização.

Bruno, suas justificativas para não utilizar um sistema Web não são plausíveis. Sistemas Web não são mais lentos e com os recursos atuais, você pode obter as mesmas vantagens de se utilizar uma aplicação desktop, salvo casos em que se queira integrar com periféricos locais como impressoras fiscais e pin pads, por exemplo. Sistemas Web são bem mais fáceis de atualizar, pense nisso.

Não entendi o contexto de negócio que a arquitetura será inserida, para lhe falar qual estratégia será melhor para seu caso. Mas de acordo com o que comentou, você poderia estudar a possibilidade de se desenvolver uma aplicação Web Intranet para cada local e utilizar um Middleware que ficaria responsável pela sincronização de dados locais com a central através da internet. Assim atenderia a disponibilidade local e manteria a central eventualmente atualizada. Uma ferramenta que recomendo e que faz esta sincronização muito bem é o Talend.

Agradeço imensamente pelos comentários. Respondendo aos colegas:

@Marcelo

Muito bacana seu relato, obrigado! Acredito que indisponibilidade da Internet ainda seja um problema no Brasil. Alguns reports e white papers demonstram isso.

@Rafael

Pelo que vi até agora (sendo pragmático!), temos, basicamente 4 estratégias para sistemas desktop que necessitem de consistência, desempenho e disponibilidade, tendo a Internet como meio de rede:

1- VPN;

2- Remote Desktop;

3- Banco de dados na web e os sistemas se comunicando com ele via um IP público do servidor onde o banco está;

4- Sincronização das bases de dados (bases de dados locais sincronizando com a base de dados central)

Disponibilidade seria um ponto importante nas quatro estratégias e, nas estratégias 3 e 4, teríamos um trade-off entre desempenho e consistência de dados.

@jefferson e @Leonardo

Quis me referir a uma especificação um pouco abstrata ao domínio do problema (como uma arquitetura de referência), apenas como um exemplo. Simplesmente: um sistema desktop, este sistema está instalado nos computadores e acessa, pela intranet, o banco de dados local. Tenho desempenho, disponibilidade e consistência de dados. Agora, ao invés da intranet, terei a Internet como meio de rede. "Para continuar endereçando estes atributos, qual a melhor estratégia?". Esta é a questão principal.

(Estou começando a achar que isto é um problema relacionado ao CAP theorem)

@Giuliano

Obrigado pela indicação da ferramenta! Parece ser muito interessante, já comecei a brincar com ela. Bom, acredito que, mesmo com as tecnologias atuais, os sistemas desktop apresentam uma performance melhor do que sistemas web, por um motivo simples: inclusão de uma camada de processamento. Mesmo que o sistema web utilize as melhores práticas, sempre teremos, no mínimo, um gargalo do parse HTML do browser (ou o Unmarshalling, entre aplicações). Estamos falando de Web, estamos falando de envelopes HTTP. Não consigo ver um sistema de faturamento (heavy-duty  data  entry) utilizando um formulário Web.

 

Bom dia a todos!

Bruno,

Trabalho com um sistema que trafega dados em envelopes HTTP, via web services (SOAP - o que envolve Unmarshalling), e é realizado vários pesquisas e persistências em base de dados locais e remotas e o desempenho é muito bom.

Para que faça uma análise há certa de 4 nós remotos e usamos sempre a internet, com link dedicado, e o desempenho do tráfegos da informação é excelente.

Concordo com os colegas que os pontos mais importantes deste desafio seja a volumetria da informação e a questão da internet. Acredito que a principal seja a internet pois independente se a solução terá uma base/sistema centralizado ou se terá uma base principal com sistemas e bases remotas com um sistema de sincronização destas bases, a solução depende da internet hoje.

Detalhar mais sobre o tipo de negócio, o tipo de comunicação (síncrona ou assíncrona), volume de dados, tipo de informação trafegada (dados, imagens, documentos, etc), tipo de processamentos (online, real-time, batch), etc. Tudo isto influencia na arquitetura da solução e acredito que cada um dos colegas tenha experiências que possam lhe ajudar.

Espero ter ajudado em alguma coisa em seu desafio.

Bom dia. 

Com relação a ser WEB ou desktop , gostaria de mencionar que um sistema pode ser web e funcionar localmente em cada unidade com um servidor de baixo custo.

Entre as vantagens da solução Web estão:

  • A distribuição de versão , pois distribuir versão desktop demanda muitos detalhes a cada novo release.
  • Atualmente é mais comum profissionais que desenvolve para web.
  • Possível acesso em dispositivos moveis.

O que eu faria:

  • Pensaria em um modelo de dados a qual as filais fossem mais independente possível 
  • Dados que são cadastrado/Alterados por todas as filiais utilizaria , serviço (Rest) para tal atividade sempre online. Sempre seria cadastro na matriz por serviço e replicado para todas as bases, podendo trabalhar ate com conexão discada/3G/4G  somente no servidor da filial.
  • Sincronização somente seria necessário para dados não conflitantes. 

Com este modelo não seria necessário nem backup de dados de cada filial, pois o backup de tudo estaria na matriz com seus devidos backup em dia.

ATT.

Rogério Santos.

No meu ponto de vista, você precisa saber que não existe uma arquitetura perfeita que atenda qualquer necessidade de sistemas, você precisa criar um documento de arquitetura que defina quais são os critérios que o sistema vai exigir, quando você diz alta desempenho, o desempenho vai depender da escalabilidade do teu sistema, por exemplo, se tua arquitetura ela vai ser rápida para mil usuário, ela pode começar a ficar lenta se você colocar cinco mil usuários, não é uma questão de ser web ou desktop, e você deve também estabelecer o que é lento, o que é rápido, e o que é aceitável,  por exemplos, minhas telas devem responder com até 5 segundos, devem executar operações criticas (definir as criticas) com até 10 segundos e etc... Se é disponibilidade qual vai ser o critério da disponibilidade 24 x 7, qual será o minimo de paradas? porque é impossível que um sistema ele nunca pare, em algum momento ele vai ter que parar, você pode estabelecer, por exemplo que ele pode parar 1 vez por mês por no máximo 5 min. Quando se fala em arquitetura pensamos apenas em tecnologias, componentes, código.. mas, a arquitetura ela é definida bem antes da implementação, ela é quem vai ditar como o sistema vai funcionar, só depois da definição desses critérios desejados você vai procurar a melhor implementação, melhor linguagem, melhor modelo, e para cada problema você pode usar um mecanismo diferente, por exemplo, balanceamento de carga, espelhamento de banco, MemCache, FailOver e etc..

Bom.. é isso.. faça um estudo, coloque os critérios desejados (quantitativos), tipo, quantidade de usuários, o quanto essa quantidade pode crescer, volume de dados, acessos simultâneos, tempo de respostas e etc..

Um grande abraço e espero ter contribuído.

Abraço,

Smokoveck

 

 

 

RSS

Badge

Carregando...

© 2019   Criado por Adriano Tavares.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço