SistemasDistribuidos

De Stoq Wiki
Ir para: navegação, pesquisa

Sistemas Distribuídos

Esta área visa pensar em como tornar o Stoq um sistema com suporte a múltiplas lojas e a comunicação entre elas.

A discussão inicial foi feita na lista Stoq-devel. Veja em http://www.async.com.br/pipermail/stoq-devel/2005-May/000146.html

Um resumo do que esperamos:

  • Banco de Dados Centralizado: todas as lojas se conectariam a este banco de dados, é o sistema mais fácil de implementar, porém depende de uma conexão de rede confiável entre elas, o que não é barato aqui no Brasil.
  • Banco de Dados Distribuído: cada loja teria seu próprio banco de dados e freqüentemente enviaria as atualizações às outras lojas, via um servidor central ou às outras lojas em modo distribuído. Este seria o método mais viável aqui no Brasil, utilizando conexões discadas para transferir os dados.

Requisitos

  • Suporte a falhas de conexão: não podemos assumir que sempre existirá uma conexão entre as lojas.
  • Acesso a Dados Antigos: Na ausência de conexão, deve-se poder acessar os dados da última sincronia.
    • Informar o usuário que os dados são antigos e podem ter sido alterados
    • Fornecer a possiblidade de sincronia imediata
    • Oferecer opção de limiar (threshold) para ajuste de quanto um dado pode ser antigo. Existem dados que, heuristicamente, aceitam ser 10 minutos (ie: quantidade de débitos, produtos no estoque), outros 1 dia (existe ou não um cliente) e já outros tem que ser imediatos (ie: cliente extrapolou o limite de crédito).
  • Suporte a sincronias temporizadas: pode-se agendar sincronias com a freqüência desejada, o sistema fará a conexão e o envio dos dados.
  • Suporte a sincronias via outros meios: Utilizar discos diversos (disquete, CD, HD, memory key, ... no linux isto é transparente) além da conexão via rede.
  • Utilizar compactação: diminui a quantidade de informação trafegada, portanto tráfego na rede e tempo de conexão.
  • Sincronia em sistemas em execução (live updates): o sistema deve poder ser atualizado/sincronizado sem que o sistema pare.

Soluções e Idéias

Idéias

Utilizar fila de despacho (dispatcher queue) para atualização dos dados. Todo dado modificado deve ser colocado como uma operação na fila de despacho. Um sentinela fica encarregado de, enquanto existir conexão ou quando requerido explicitamente, fazer o despacho dos ítens na fila para os interessados nos dados (outras lojas). Esta fila pode ser armazenada em disco e lida por um local-dispatcher para atualizar o banco de dados, satisfazendo o requisito de suporte a sincronia via outros meios*.

Referências