Ir para o conteúdo

Gerenciamento de Réplicas

Posicionamento

Onde colocar réplicas para obter melhor escalabilidade do sistema? Menor custo de comunicação?

  • Objetos (código/dados)
  • Permanente
  • Sob demanda do servidor -- por exemplo em uma CDN
  • Sob demanda do cliente -- por exemplo um cache.

Sob demanda do Servidor
  • \(Q\) conta acessos ao arquivo \(F\)
  • Agrega acessos por possível réplica mais próxima (\(P\))
  • Número de acessos acima de limiar \(R\), replica para \(P\)
  • Número de acessos abaixo de \(D\), apaga de \(P\)
  • \(D < R\)
  • Se não é alto o suficiente para replicar nem baixo o suficiente para ignorar (entre \(D\) e \(R\)), considera-se migrar o objeto.

Propagação de Atualizações

Réplicas precisam ser atualizadas.

  • Propagar dados -- não reexecuta operações.
  • Propagar operações -- não copia todos os dados modificados.
  • Propagar notificações -- réplica precisa solicitar atualização.
    Usado em caches.

A melhor opção depende do custo das operações, dos dados manipulados e da taxa de leitura/escrita dos dados.

  • Propagar dados
    • razão leitura/escrita é alta
    • operações são caras
  • Propagar operações
    • razão leitura/escrita é alta
    • operações são baratas
  • Propagar notificações
    • razão leitura/escrita é baixa
    • pouco uso da rede
Proativo/Push ou Reativo/Pull
  • Proativo

    • Mantém réplicas consistentes
    • Desnecessário se a leitura \(<<\) a escrita.
  • Reativo

    • Réplicas só se tornam consistentes quando necessário.
    • Lento se a leitura \(>>\) a escrita

Qual é melhor?

Híbrido: Lease
  • Réplica se registra para receber atualizações/notificações por um período.
  • Estado das réplicas é mantido enquanto possível, pelo período contratado.
  • Em caso de sobrecarga, deixa de mandar atualizações/notificações.
  • Em caso de lease expirado (não renovado), deixa de mandar atualizações/notificações.
  • Em caso de renovações frequentes, aumenta o período do lease.