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.