4D Backup, VSS snapshots e os novos comandos para bloquear o datastore

4D fornece-lhe múltiplas formas integradas de fazer cópias de segurança dos seus dados: Cópia de segurança 4D e a utilização de um servidor espelho. Com 4D v20, 4D expõe comandos internos para bloquear o datastore, permitindo-lhe copiar os seus dados enquanto 4D está em execução.
Primeiro, falemos dos diferentes meios para fazer cópias de segurança dos seus dados com 4D.

Backup e restauração automáticos

O build in backup não só faz uma cópia completa automática do seu ficheiro de dados, como também gere um registo de transações contendo todas as operações que ocorrem nos seus dados. Esta é a melhor proteção para o seu trabalho. Se algo acontecer, tal como perda de energia, disco rígido danificado ou falha do sistema, no próximo 4D de arranque detectará automaticamente a falha e – se necessário – integrará as operações em falta a partir do registo ou executará um restauro completo mais integração do registo. É por isso que recomendamos o Backup 4D para a maioria dos casos de utilização.

Leia https://developer.4d.com/docs/Backup/overview para mais detalhes.

SERVIDOR ESPELHO

Para instalações 24/7 onde não se pode bloquear o arquivo de dados para uma cópia de segurança completa ou onde se pretende um tempo mínimo de restauro, o que é necessário utilizar é um servidor espelho. 4D irá replicar automaticamente todas as alterações no servidor espelho, para que se o seu servidor principal falhar, o seu servidor espelho possa estar em funcionamento numa questão de segundos.

A configuração de um servidor-espelho é mais trabalhosa e mais complicada do que a utilização da cópia de segurança. Já ajudamos muitos dos nossos clientes a implementar esta configuração, por isso não hesite em contactar a Equipe de Serviço Profissional 4D para obter ajuda e aconselhamento.

Shadow Copy de Volume Windows

Especialmente com ambientes virtuais, os administradores de sistemas preferem utilizar snapshots baseados em Volume Shadow Copy (VSS). 4D é compatível com isto com o seu próprio gravador VSS 4D. Leia https://blog.4d.com/enterprise-virtua l-machine-snapshot-support/ para mais detalhes.

Tenha cuidado, pois não substitui o Backup 4D como um snapshot que contém apenas os dados de um dado momento. Todas as operações que aconteceram após o instantâneo não podem ser recuperadas, uma vez que lhe falta o diário e o diário de transações.

Explicação visual de como funciona o 4D Backup

Como funcionam o backup e VSS?

Vou deixar o servidor espelho de lado porque é uma forma muito diferente de guardar os seus dados e concentrar-me em como o 4D Backup e 4D VSS funcionam.

O primeiro ponto a ter em consideração é que o 4D não aplica imediatamente todas as alterações no arquivo de dados em tempo real. Fazer isto exigiria demasiados acessos ao disco, afetando significativamente o desempenho da sua aplicação. 4D utiliza uma cache na memória, onde todas as suas alterações são aplicadas pela primeira vez, e regularmente 4D descarrega a cache, aplicando todas as alterações no arquivo de dados de uma só vez. Assim, quando o backup inicia ou quando o VSS é chamado, 4D primeiro limpa a cache para que o arquivo de dados contenha dados atualizados.

Outro ponto importante a ter em consideração é que copiar um arquivo de dados enquanto este estiver sendo utilizado não funciona: Se o arquivo de dados for modificado durante a sua cópia, o arquivo de dados resultante pode ser corrompido ou podem existir diferenças entre o arquivo de dados e o diário ou índices. Assim, o segundo passo é bloquear o arquivo de dados, impedindo operações de escrita durante a cópia. As operações de leitura ainda são compatíveis, mas todos os processos que tentarem realizar uma operação de escrita serão bloqueados até que a cópia de segurança/VSS termine.

Finalmente, vamos falar sobre o diário. O diário contém todas as operações que efetuou desde a sua última cópia de segurança. É utilizado em 2 casos principais: Se o seu arquivo de dados for corrompido ou se quiser reverter algumas operações infelizes do utilizador. Este é um arquivo muito importante, se não quiser perder uma única modificação do seu arquivo de dados.

Assim, se a cache for corrompida e o arquivo de dados for bloqueado, o backup 4D (mas não o VSS) cria um novo arquivo de diário. Depois o arquivo de dados, o arquivo de índice e o diário podem ser copiados, antes de desbloquear os dados.

Como se pode ver, toda a operação é bastante complexa. É por isso que encorajamos vivamente os nossos clientes a utilizar a cópia de segurança 4D, uma vez que é tanto totalmente automatizada como segura. Ainda assim, alguns de vocês constroem o seu próprio mecanismo de instantâneo. Para eles, trouxemos a capacidade de bloquear o datastore enquanto o 4D estiver funcionando!

Nova funcionalidade: Bloqueio da datastore

Fornecemos 3 novos comandos: ds.flushAndLock(), ds.locked() e ds.unlock().

ds.flushAndLock() lança a cache e depois bloqueia a datastore para os outros processos. Enquanto a datastore estiver bloqueada, todas as operações de escrita vindas de outros processos serão colocadas em espera até que seja desbloqueada. Assim, a partir desse momento, sabe que nem o seu arquivo de dados, nem o seu arquivo de índice, nem o seu diário serão alterados, permitindo copiá-los livremente e ter a certeza de que estão sincronizados e não corrompidos.

Uma vez terminada a sua cópia, pode chamar ds.unlock() no mesmo processo. Irá libertar o bloqueio no datastore, permitindo que as operações de escrita se repitam.

O comando ds.locked() dirá se um processo bloqueou atualmente a datastore.

Com estes 3 comandos, pode agora reproduzir a forma como 4D backup e VSS bloqueiam a datastore antes de a copiar.

Código que executa um arquivo da pasta de dados

Para ilustrar esta nova funcionalidade, vamos dar um pequeno trecho de código. Este código realiza um arquivo da pasta de dados (e como tal dos arquivos de dados e índices) e da revista:

$destination:=Folder(fk documents folder).folder("Archive")
$destination.create() // A pasta onde copia o arquivo
ds.flushAndLock() // Primeiro bloquamos a datastore, bloquear operações de escrita de outros processos 

$dataFolder:=Folder(fk data folder)
$dataFolder.copyTo($destination) // Pode agora copiar a pasta de dados

$oldJournalPath:=New log file() // Cria um novo diário
$oldJournal:=File($oldJournalPath; fk platform path)
$oldJournal.moveTo($destination) // Move o antigo diário

ds.unlock() // Nossa cópia terminou, podemos destravar a datastore

Como podem ver, mesmo que o código seja bastante pequeno, é necessário dar muitos passos importantes para garantir que o arquivo não é corrompido: o código encarrega-se de descarregar a cache e bloquear a datastore, criar um novo diário e salvar o antigo, e claro, desbloquear a datastore no final da operação. Encorajo-o a utilizar este pedaço de código como base para os seus próprios mecanismos de instantâneo, para que não se esqueça de um passo importante.

É tudo por agora. Espero que este post no blogue o ajude a compreender melhor o funcionamento interno do Backup 4D.
E claro, se tiver perguntas ou comentários, não hesite em trazê-los para o fórum.

Nicolas Brachfogel
• Proprietário do produto e Desenvolvedor Senior -Nicolas Brachfogel entrou a 4D em 2017 como Senior Developer (4D Server e Networking). Como Product Owner para gerenciar o lançamento de Apple Silicon, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais, além de garantir que as implementações de funcionalidade cumpram com as necessidades do cliente. Diplomado pelo Instituto Superior de Informática Aplicada (INSIA), Nicolas começou sua carreira como desenvolvedor de software em 2001. Depois de vários anos codificando em Java e C++, passou a especializar-se no desenvolvimento cliente-servidor para empresas de videogames. Como desenvolvedor/arquiteto de servidores, trabalhou com sucesso nas arquiteturas de servidores de muitos jogos (Dofus Arena, Drakerz, Trivial Pursuit Go!)