TTLs e notificação de expiração
O Couchbase inclui um TTL (Time To Live) como parte dos campos de metadados de cada documento. Todos os SDKs do cliente incluem suporte para definir/consultar/tocar esse valor. O valor é definido como o "número de segundos que um documento deve durar" para documentos que devem expirar em 30 dias ou menos. Para valores superiores a 30 dias, deve ser passado um valor de tempo de época unix. Os TTLs são frequentemente usados em armazenamentos de sessão de alto desempenho e aplicativos de cache. O que acontece com uma sessão quando um documento expira pode ser problemático e complicado de gerenciar na camada do aplicativo. E se o alto desempenho e a flexibilidade do Couchbase Server fossem aproveitados para fornecer retornos de chamada para a expiração de documentos? Apresentamos o "expiry-notifier" do Couchbase Labs. O aplicativo, o código-fonte e as instruções podem ser baixados em o repositório do couchbaselabs no github.**
Notificador de expiração do Couchbase Labs
O aplicativo executa uma pequena instância de aplicativo do node.js e do express. Ele é configurado e acessado por meio de uma API REST. Por que o Node.js? O Node.js é uma plataforma de aplicativos bem suportada para o Couchbase, é incrivelmente leve, gerencia seu espaço de forma eficiente e é adequado para aplicativos RESTful. O Expiry-notifier pode ser chamado diretamente ou pode ser configurado para executar automaticamente retornos de chamada de expiração em um determinado intervalo de tempo. A funcionalidade de retorno de chamada de expiração retorna meta ids e tempo de expiração (ou segundos até a expiração) para documentos que expirarão em uma janela de tempo especificada.
Por exemplo, para receber uma chamada de retorno de expiração de um aplicativo que pesquisará diretamente o serviço, um documento é definido no Couchbase com uma expiração de 300 segundos:
Chave (meta.id): triunfo
{
"valor": "1966 Triumph Spitfire Mark II 4 velocidades com overdrive e carburadores Weber duplos."
}
Se o notificador de expiração estiver em execução, o tempo relativo foi definido como verdadeiro (falaremos mais sobre isso em um segundo) e, após 10 segundos, o ponto de extremidade REST será chamado para pesquisar retornos de chamada de expiração:
http://servername:3000/poll/300
Um objeto JSON será retornado:
(triunfo:290)
Como funciona o notificador de expiração
O Expiry-notifier pode ser executado em qualquer servidor que tenha o node.js instalado. Depois que o expiry-notifier for instalado (as instruções podem ser encontradas em no repositório do couchbaselabs no github), o aplicativo precisa ser iniciado. No diretório raiz em que o aplicativo está instalado, execute
"npm start"
Por padrão, o aplicativo será executado usando a porta 3000. Para testar se o aplicativo está em execução, chame o seguinte comando REST:
"http://:3000/status"??????
Para configurar o serviço para se comunicar com um cluster do couchbase, chame o seguinte comando REST:
“http://:3000/setup/server/192.168.60.101/8091/beer-sample”
O comando REST acima é definido como: /setup/server/:server/:port/:bucket [RETURNS: {JSON OBJECT} with status change]. A chamada desse comando REST executa o seguinte:
- Instancia o cliente inteligente para se comunicar com o cluster do Couchbase
- Configura um índice leve no couchbase que mantém metadados apenas por tempo de expiração.
Para configurar um ponto de extremidade para que o serviço envie retornos de chamada de expiração para um servidor de aplicativos, use o seguinte comando REST:
"http://:3000/setup/endpoint//3000/receive_callback"
O comando REST acima é definido como: /setup/endpoint/:hostname/:port/:path/ [RETURNS: {JSON OBJECT} with status change] Observação: o sinalizador "https" só é usado se o notificador de expiração tiver de enviar retornos de chamada pelo protocolo https. Consulte a documentação para obter informações mais específicas.
Para começar a enviar retornos de chamada para o ponto de extremidade definido acima para documentos que estão definidos para expirar nos próximos 30 segundos e a cada 30 segundos depois disso, use o seguinte comando REST:
"http://:3000/setup/poll/30/loop"
O comando REST acima é definido como:/setup/poll/:interval/:loop [RETURNS: {JSON OBJECT} com alteração de status] Esse comando enviará um objeto JSON de meta ids e sua expiração em tempo de época UNIX (número de segundos após 1/1/1970 em que o documento está definido para expirar). Se preferir o número de segundos até a expiração do documento, use o comando abaixo.
Para retornar o número de segundos até a expiração de um documento em vez da hora da época do UNIX, use o seguinte comando:
"http://:3000/setup/relative/true"
O comando REST acima é definido como: /setup/relative/:bool [RETURNS: {JSON OBJECT} com alteração de status]
** Isenção de responsabilidade: o Couchbase Labs fornece código experimental apenas para fins de pesquisa e desenvolvimento. O código e os aplicativos do Couchbase Labs não são suportados por nenhum contrato de suporte do Couchbase e são fornecidos no estado em que se encontram, sem garantia de qualquer tipo.
Artigo muito bom, e eu adoro esse recurso.
Mas o que eu realmente quero é um recurso integrado que, quando um documento específico expira, o próprio CouchBase aciona algo como:
http://TARGET_TO_RECEIVE/:bucket_name/:key
com o corpo da solicitação (opcional) para o candidato a ser excluído.
TARGET_TO_RECEIVE é configurado por meio do administrador do CouchBase.
1. Você tem algum plano para implementar esse recurso em uma versão futura?
Ou, se o próprio CB deixar um registro com o documento expirado, isso seria de grande ajuda para mim, mas não consigo encontrar um registro de expiração separado com o link a seguir:
http://docs.couchbase.com/admi…
2. O CB deixa um registro de expiração do documento? Melhor ainda, deixa esse registro em um arquivo de registro separado, ou seja, expired.log?