|
Arquitetura interna - Leases: percebendo mudanças
Vamos imaginar um sistema distribuído como o do nosso tutorial:
- 1 servidor de nomes chamado T;
- 3 SharedSpaces diferentes, A, B, C.
- 3 aplicações idênticas Pa, Pb e Pc, associadas, respectivamente, a A, B e C.
Note que não há nenhuma restrição quanto a máquinas: podem estar todas na mesma máquina, cada uma em uma máquina, ou qualquer outra combinação possível.
Suponhamos, então, que B tem um objeto compartilhado "banana", e que as 3 aplicações possuem cópias dele. Neste momento, Pa termina com sucesso uma transação em "banana", e B atualiza a versão oficial de "banana". Claramente, a cópia que Pa acessa (através do SharedSpace A) está atualizada. O que acontece com Pb e Pc?
Primeiramente, o cache do SharedSpace B será atualizado imediatamente. Pb logo perceberá a mudança, indiretamente ou através de um StorageEvent (veja Storage).
O caso de Pc é mais grave, afinal seu SharedSpace não participou da transação. Eventualmente, C irá validar seu cache com o servidor de nomes T e este responderá que sua cópia está velha e que B tem uma cópia nova. Somente quando C tiver seu cache atualizado é que Pc vai perceber a mudança em "banana".
A palavra-chave no texto acima é "eventualmente". Cada cópia possui um prazo de validade chamado Lease Time. Ao receber uma cópia, o SharedSpace grava o momento em que a cópia foi recebida. Quando o lease expira, o SharedSpace pergunta ao servidor se a cópia ainda é valida. Em caso afirmativo, a cópia sobrevive por mais um período indicado pelo lease. Em caso negativo, o SharedSpace busca uma nova cópia.
Leases podem sobreviver mais tempo do que o necessário sob condições adversas: por exemplo, se T ou B estiverem inacessíveis, C prosseguirá usando sua cópia atual, mas não poderá fazer modificações no objeto.
SharedObjects foi desenhado para que o controle sobre os leases seja o mais dinâmico possível: há um lease default de 20 segundos, mas ao criar uma cópia, cada SharedSpace pode configurar o lease que quiser. A intenção é extender essa funcionalidade em futuras versões, permitindo o controle de cada objeto individualmente, como também permitindo que, ao compartilhar um objeto, a aplicação possa fornecer dicas de leases (outros defaults) baseadas no uso esperado do objeto.
|