o termo "cliente" usado aqui não está se referindo ao navegador do cliente, mas ao servidor cliente
Antes do fluxo de trabalho do cache
1. client make a HTTP request -->
2. server process -->
3. store parsed results into memcache for next use (cache indefinitely) -->
4. return results to client -->
5. client get the result, store into client's local memcache with TTL
Após o fluxo de trabalho do cache
1. another client make a HTTP request -->
2. memcache found return memcache results to client -->
3. client get the result, store into client's local memcache with TTL
TTL = hora de viver
É possível saber quando os dados foram atualizados,
e para expirar o (s) memorando (s) relevante (s) em conformidade.
No entanto, as armadilhas no cache do site cliente TTL
- Qualquer atualização de dados antes do TTL não é captada pelo memcache do cliente.
- De maneira inversa, onde não há atualização, o memcache do cliente ainda expira após o TTL
- Primeira solicitação (ou solicitações simultâneas) após o cache O TTL será acelerado, já que precisa repetir o "Antes do fluxo de trabalho do cache"
No caso em que o cliente exige várias solicitações HTTP em uma única página da Web,
pode ser muito ruim no desempenho.
A solução ideal deve ser cliente para cache indefinidamente até aviso prévio .
Aqui estão as três propostas sobre aviso adicional
Proposta 1: Use o cabeçalho HTTP (implementação atual)
1. client sent HTTP request last modified time header
2. server check if last data modified time=last cache time return status 304
3. client based on header to decide further processing
GOOD?
----
- save some parsing for client
- lesser data transfer
BAD?
----
- fire a HTTP request is still slow
- server end still need to process lots of requests
Proposta 2: Emita consistentemente uma solicitação HTTP para verificar todos os horários modificados pela última vez
1. client fire a HTTP request
2. server to return last modified time for all data group
3. client compare local last cache time with the result
4. if data group last cache time < server last modified time
then request again for that data group only
GOOD?
----
- only fetch what is no up-to-date
- less requests for server
BAD?
----
- every web page require a HTTP request
Proposta 3: Informe ao cliente quando novos dados estiverem disponíveis (Push)
1. when server end notice there is a change on a data group
2. notify clients on the changes
3. help clients to fetch again data
4. then reset client local memcache after data is parsed
GOOD?
----
- let the cache act/behave like a true cache
BAD?
----
- encourage race condition
Minha preferência está na proposta 3,
e algo como Gearman poderia ser ideal para você
Onde há uma mudança, o servidor Gearman envia a tarefa para vários clientes (trabalhadores).
Estou louco?
(Eu sei que meu primeira pergunta é um pouco louco)