Agora vamos a examinar sistemas com múltiplos servidores e múltiplos clientes. As redes em geral têm múltiplos servidores de arquivos por diversas razões:

  1. Para dividir a carga de trabalho pelos vários servidores.
  2. Para permitir que o acesso aos arquivos ocorra mesmo se um servidor de arquivos estiver inativo.
  3. Para aumentar a confiabilidade, por ter backup independentes de cada arquivo.
Uma estratégia para uma duplicação de arquivos é deixar que cada usuário possa contar com quantos servidores de arquivos desejar e gerencie ele próprio a duplicação. Isso coloca sobre os ombros do usuário uma considerável responsabilidade administrativa e, sendo a natureza humana como é, não se espera muita duplicação. Apesar disso, quando a queda de um servidor destrói arquivos de um usuário, instruções do computador central cuidam desse efeito, visto que declarações do tipo, "a culpa é sua!" provavelmente não seriam bem recebidas.
Portanto, consideramos preferível que a duplicação seja feita automaticamente pelos próprios servidores de arquivos. Contanto que os arquivos nunca sejam modificados, é fácil manter múltiplas cópias. O problema surge quando uma cópia é atualizada: as outras também têm de ser utulizadas. A solução mais simples, e que é amplamente usada na prática, é a duplicação da cópia principal. Nesse esquema, uma cópia é designada como mestre, e todas as outras são escravos. As atualizações são sempre feitas no mestre, que então as propaga para os escravos. Embora esse método seja simples ou não-ambíguo, tem a séria desvantagem de tornar as atualizações impossíveis quando o mestre está indisponível, seja devido a uma pane no seu servidor ou em uma partição da rede.
Um método mais eficaz, em especial com muitos clientes ativos, é o de votação (Gifford, 1979). Chame de N o número de servidores com cópias de um arquivo. Para ler um arquivo, é obrigatório obter um quorum de leitura, Nl. Para modificar um arquivo precisa-se de um quorum de escrita ou de gravação, Ng, com a restrição de que Nl + Ng > N. Somente depois que o número apropriado de servidores é consultado sobre se estaria disposto a participar e concordar é que a operação pode ser realizada.
Como a escrita não atualizam todas as cópias do arquivo, um quorum de leitura conterá usualmente algumas cópias obsoletas junto com a mais recente. Para que os leitores possam saber qual é a cópia mais recente, cada uma mantém um número de versão. Cada escrita cria uma nova versão com um número mais elevado do que o de qualquer versão anterior, para que um leitor que adquiere um quorum possa saber qual cópia (ou cópias) está atualizada (existe sempre pelo menos uma).
Uma variação interessante da votação é a votação com fantasmas ( Van Renesse e Tanenbaum, 1988).
Quando um servidor que falhou é reinicializado, ele tem de obter um quorum de leitura para localizar a versão mais recente, da qual faz uma cópia para si próprio antes de entrar em operação normal. O algoritmo funciona porque possui a mesma propriedade básica do esquema de votação simples, nominalmente Nl e Ng são escolhidos de modo que seja impossível adquirir um quorum de leitura e um de escrita ao mesmo tempo. A única diferença nesse caso é que máquinas inativas são permitidas em um quorum de escrita, sujeitas à condição de, quando retornarem à atividade elas obtenham imediatamente a versão atual antes de iniciar o serviço.

Copyright ©1995, Jorge Juan Zavaleta Gavidia
E-mail : jorgezg@inf.ufrgs.br