Upgrade automático para o Firestore

Nesta página, descrevemos o caminho de upgrade do Cloud Datastore legado para o Firestore no modo Datastore.

O Firestore pode funcionar no modo Datastore, o que o torna compatível com versões anteriores do Cloud Datastore legado. Com o Firestore no modo Datastore, você pode acessar a camada de armazenamento aprimorada do Firestore, mantendo o comportamento do sistema do Datastore. O Firestore no modo Datastore remove as seguintes limitações do Cloud Datastore legado:

  • As consultas não têm mais consistência eventual. Elas são altamente consistentes, a menos que você solicite explicitamente a consistência posterior.
  • As consultas em transações não precisam mais ser consultas de ancestral1.
  • As transações não estão mais limitadas a 25 grupos de entidades1.
  • Gravações em um grupo de entidades não estão mais limitadas a uma por segundo1.

Para mais informações sobre o modo Datastore, consulte Firestore em modo Datastore.

As migrações do Cloud Datastore legado para o Firestore no modo Datastore começaram em junho de 2021. As migrações estão começando pelos bancos de dados de tráfego muito baixo e serão expandidas para bancos de dados de tráfego maiores nos próximos meses.

1 Os bancos de dados que migram para o modo de simultaneidade "Otimista com grupos de entidades" ainda estão sujeitos ao limite de transação de 25 grupo de entidades, bem como ao limite de 1 gravação por segundo no Firestore no modo Datastore. As consultas em transações precisam ser consultas de ancestral. Consulte a seção Otimista com grupos de entidades de simultaneidade para mais informações.

Upgrade automático para o Firestore no modo Datastore

Se você gerencia um aplicativo que usa o Cloud Datastore legado, não precisa atualizar o código do aplicativo. Notificaremos você sobre a programação do upgrade do aplicativo para o Firestore no modo Datastore. O upgrade não requer inatividade.

Para mais perguntas sobre o processo de upgrade automático, entre em contato com um dos nossos canais de suporte.

Conferir o tipo do banco de dados

Use o comando gcloud alpha firestore databases describe para ver o tipo do banco de dados. Procure a presença do campo type na saída:

  • type: DATASTORE_MODE

    O tipo de banco de dados é Firestore no modo Datastore. Ele não exige um upgrade ou já o concluiu.

  • type não está presente na saída

    O tipo de banco de dados é Cloud Datastore legado. O banco de dados será atualizado para o Firestore no modo Datastore.

  • type: FIRESTORE_NATIVE

    O tipo de banco de dados é o Firestore no modo Nativo.

Estágios do upgrade

Em um alto nível, seguimos esse processo para fazer upgrade do banco de dados legado do Cloud Datastore para o Firestore no modo Datastore. Esse processo não requer tempo de inatividade do aplicativo:

  1. Adicione uma nova réplica de dados do Firestore no modo Datastore ao banco de dados legado do Cloud Datastore. Duplique de maneira assíncrona as operações de gravação de entidades ao Firestore no modo Datastore.

  2. Copie os dados atuais e as entradas de índice do Cloud Datastore legado para o Firestore no modo Datastore. Depois de copiar, verifique os dados.

  3. Redirecionar as leituras de entidades diretamente para o Firestore em modo Datastore. Primeiro, faça o redirecionamento de leituras com consistência eventual e depois redirecione leituras com consistência forte.

  4. Redirecionar as gravações de entidade e leituras de transações diretamente para o Firestore no modo Datastore.

Esse processo usa os estágios a seguir.

1. Aplicar gravações de maneira síncrona

Durante esse estágio, as gravações são aplicadas de maneira síncrona ao Cloud Datastore legado: as gravações não informarão sucesso até que todas as alterações em entidades e índices tenham sido aplicadas a pelo menos uma réplica. Isso simula o comportamento do Firestore no modo Datastore, que também aplica gravações de forma síncrona (e difere do comportamento padrão do Cloud Datastore legado, em que as gravações são aplicadas de maneira assíncrona após a confirmação).

Essa etapa tem como objetivo exibir qualquer impacto de latência síncrono que se aplique ao Firestore no modo Datastore antes do upgrade. A aplicação síncrona de gravações continuará durante e após a migração.

Os bancos de dados com pouca atividade pularão essa etapa. Para determinar se esse estágio foi incluído no upgrade do banco de dados, inspecione os [registros] do cenário APPLY_WRITES_SYNCHRONOUSLY.

2. Copiar e verificar

Essa etapa representa o início da migração. Ela apresenta uma réplica do Firestore no modo Datastore e executa as seguintes etapas:

  1. Registro

    As operações de gravação de entidades no Cloud Datastore legado também começam a fluir por meio de um canal lateral para a réplica do Firestore no modo Datastore. Isso acontece como parte do sistema de replicação legado do Cloud Datastore. Essas operações de gravação não afetam a latência de gravação. A réplica do Firestore no modo Datastore armazena essas operações de gravação em buffer para aplicá-las após a etapa de cópia.

  2. Copiar

    Na réplica do Firestore no modo Datastore, crie uma cópia off-line dos dados e entradas de índice existentes. A etapa de cópia não afeta as operações legadas do Cloud Datastore. Essa etapa pode durar vários dias.

  3. Drenar diário

    Aplique as gravações da etapa do diário à parte superior dos dados da cópia off-line.

  4. Verificar dados

    Verifique novamente os dados no Firestore no modo Datastore comparando com os dados no Cloud Datastore legado.

3. Redirecionar leituras com consistência posterior

Exibir leituras com consistência posterior (consultas sem filtro de ancestral) do Firestore no modo Datastore. A semântica legada do Cloud Datastore para leituras ainda se aplica neste momento:

  • As consultas de ancestral têm consistência forte.
  • As consultas de não ancestral têm consistência posterior.
  • As pesquisas são altamente consistentes, exceto aquelas configuradas para consistência posterior.

O Firestore no modo Datastore continua funcionando como uma réplica dos dados legados do Cloud Datastore.

4. Redirecionar leituras com consistência forte

Disponibilize leituras altamente consistentes (não transacionais) do Firestore no modo Datastore. A semântica legada do Cloud Datastore para leituras ainda se aplica. Embora as leituras agora venham diretamente do Firestore, ele ainda depende do Cloud Datastore legado para garantir que ele esteja atualizado para leituras com consistência forte.

5. Redirecionar gravações

Redirecionar as gravações de entidade e leituras de transações para o Firestore no modo Datastore. Modificações simultâneas na mesma entidade continuam gerando cancelamentos de transações. Modificações simultâneas em entidades diferentes dentro do mesmo grupo de entidades não resultam mais em cancelamentos de transações.

No início desse estágio, o Firestore no modo Datastore ainda depende do Cloud Datastore legado para garantir que ele esteja atualizado antes de cada gravação. Após uma passagem final que garante que todas as gravações anteriores sejam aplicadas, o Firestore no modo Datastore para de consultar o Cloud Datastore legado.

6. Migração concluída

Agora, a semântica do Firestore no modo Datastore para leituras é aplicada: todas as consultas têm consistência forte.

Os preços permanecem os mesmos, mas seu faturamento agora lista SKUs do Firestore. A página "Cotas" do App Engine começa a mostrar o uso do Firestore em vez do uso do Cloud Datastore legado.

Transações

O Firestore no modo Datastore oferece suporte a três modos de simultaneidade:

  • Otimista

    A maioria dos bancos de dados legados do Cloud Datastore usa simultaneidade otimista para transações no Firestore no modo Datastore. A simultaneidade otimista preserva os comportamentos atuais das transações no Cloud Datastore legado.

  • Otimista com grupos de entidades

    Os bancos de dados que dependem da semântica transacional do grupo de entidades vão migrar para esse modo de simultaneidade. Consulte a seção Otimista com grupos de entidades de simultaneidade para saber mais.

  • Pessimista

    Alguns bancos de dados migrados anteriormente com pouca atividade foram migrados com bloqueios pessimistas para transações no Firestore no modo Datastore.

O modo de simultaneidade pode ser acessado por meio do recurso REST projects.databases do Firestore:

curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"

O modo de simultaneidade também pode ser encontrado inspecionando os registros do estágio PREPARE.

Otimista com o modo de simultaneidade de grupos de entidades

Para remover as limitações de capacidade de consulta, transação e gravação do grupo de entidades otimista, altere o modo de simultaneidade do projeto para otimista. Para garantir que essa mudança seja compatível com seu projeto:

  1. Crie um projeto de teste no Firestore no modo Datastore.

  2. Altere o modo de simultaneidade do projeto de teste para OPTIMISTIC. Emita uma solicitação HTTP PATCH, conforme demonstrado abaixo.

  3. Execute testes no projeto de teste para garantir que a carga de trabalho tenha o desempenho esperado sem grupos de entidades.

  4. Altere o modo de simultaneidade do projeto principal de OPTIMISTIC_WITH_ENTITY_GROUPS para OPTIMISTIC.

Solicitação HTTP PATCH para alterar o modo de simultaneidade do banco de dados:

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"concurrencyMode":"OPTIMISTIC"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=concurrencyMode"

Notificações de registro e progresso

O processo de upgrade usa o Cloud Logging para publicar atualizações de progresso. Para visualizar os registros, use a Análise de registros, a API Cloud Logging ou a Google Cloud CLI.

As atualizações são publicadas em dois registros com o nome do serviço de geração de registros datastore.googleapis.com:

Nome do registro Recurso monitorado Payload
migration_state datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationStateEvent
migration_progress datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationProgressEvent

O registro migration_state é atualizado quando o estado geral do upgrade muda (RUNNING e COMPLETE).

O registro migration_progress é atualizado sempre que o upgrade passa para uma nova etapa (PREPARE, START, APPLY_WRITES_SYNCHRONOUSLY, COPY_AND_VERIFY, REDIRECT_EVENTUALLY_CONSISTENT_READS, REDIRECT_STRONGLY_CONSISTENT_READS e REDIRECT_WRITES).

Para receber notificações à medida que o upgrade avança, crie métricas com base em registros de acordo com os dois registros e crie alertas com base nessas métricas.

Banner de migração no console do Google Cloud

Enquanto o banco de dados legado do Cloud Datastore estiver em processo de migração, um banner informativo será exibido na página Datastore Studio do console do Google Cloud. Esse banner inclui um link para abrir o Cloud Logging e filtrar as atualizações de migração.

  1. No Console do Google Cloud, acesse a página Bancos de Dados.

    Acessar "Bancos de dados"

  2. Selecione o banco de dados necessário na lista de bancos de dados.

  3. No menu de navegação, clique em Datastore Studio.

Como visualizar o estado atual em uma CLI

Para visualizar rapidamente o estado atual de uma migração, use o seguinte comando gcloud:

gcloud datastore operations describe datastore-firestore-migration

Pausando a migração

Migrações de bancos de dados grandes estão qualificadas para pausa e retomada. Pausar uma migração impede que ela avance para a próxima fase até que seja retomada. Pausar uma migração pode ajudar a determinar se uma mudança observada no comportamento ou no desempenho é resultado do processo de migração ou de um fator não relacionado.

Depois de receber a notificação por e-mail sobre a migração do banco de dados, verifique se ele está qualificado para pausa e retomada executando o comando de pausa abaixo. Se a migração não estiver qualificada, ele vai retornar um erro indicando que a funcionalidade não está disponível.

Se a migração do seu banco de dados estiver qualificada para pausa e retomada, os comandos abaixo começarão a funcionar quando a migração atingir o estágio START.

Para pausar uma migração:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:pauseMigration"

Para retomar uma migração:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:resumeMigration"

Esses comandos não vão funcionar depois que a migração for concluída.

Se você precisar manter a migração pausada por mais de uma semana, entre em contato por um canal de suporte. Depois de duas semanas, a migração poderá ser retomada automaticamente.

Métricas do Cloud Monitoring

As métricas do Cloud Monitoring disponíveis para o banco de dados do Datastore permanecem as mesmas durante todo o processo de upgrade. Veja as métricas disponíveis do Datastore.