Ambientes de processamento

O Earth Engine tem ambientes diferentes para processar dados: interativo e em lote. Esses dois ambientes (ou "reinos") processam diferentes tipos de consultas e têm características de desempenho muito diferentes. Por isso, é importante entender quando e como usar cada um deles.

Ambiente interativo

Também chamado de pilha "síncrona" ou "on-line", esse ambiente é otimizado para responder a pequenas solicitações que são concluídas rapidamente. As respostas são limitadas a dezenas de megabytes de dados e precisam terminar o processamento em cinco minutos. Muitas solicitações podem ser feitas em paralelo até os limites de cota.

Endpoints

O ambiente interativo é composto por diferentes endpoints de API: padrão e alto volume.

Endpoint padrão

O endpoint padrão é adequado para a maioria dos usos feitos por pessoas e é o que alimenta o editor de código e os apps do Earth Engine. Especificamente, esse endpoint é mais adequado para aplicativos sensíveis à latência que envolvem um baixo volume de solicitações simultâneas não programáticas.

Endpoint de alto volume

O endpoint de alto volume foi projetado para processar um volume maior de solicitações em paralelo do que o endpoint padrão. As principais diferenças incluem:

  • Latência maior: o endpoint de alto volume tem uma latência média maior por solicitação.
  • Menos armazenamento em cache: fornece menos armazenamento em cache de resultados intermediários, portanto, consultas complexas podem exigir mais tempo de computação.
  • Melhor para pequenas consultas automatizadas: o endpoint de alto volume se destaca por processar muitas solicitações programáticas, mas é mais adequado para consultas simples que não exigem agregação (como buscar blocos de imagens pré-criadas).

Para análises complexas que precisam de armazenamento em cache eficiente, o endpoint de API padrão pode ser a melhor opção. O endpoint de alto volume é otimizado para tarefas de alta capacidade e baixa computação. Consultas complexas normalmente exigem mais EECU-time ao usar o endpoint de alto volume do que no endpoint on-line normal.

Uso do endpoint de alto volume

Cliente Python

Ao inicializar a biblioteca earthengine, transmita um parâmetro opt_url e defina-o como https://earthengine-highvolume.googleapis.com. Como sempre, transmita as credenciais adequadas e especifique o projeto do Cloud. Exemplo:

ee.Initialize(
    credentials=credentials,
    project='my-project',
    opt_url='https://earthengine-highvolume.googleapis.com'
)

Cliente JavaScript

Ao inicializar a biblioteca earthengine usando ee.initialize(), transmita https://earthengine-highvolume.googleapis.com para o primeiro parâmetro.

API REST

Direcione suas solicitações REST para https://earthengine-highvolume.googleapis.com (em vez de https://earthengine.googleapis.com, conforme mostrado no Guia de início rápido da API REST, por exemplo).

Ambiente do lote

Também chamado de pilha "assinada" ou "off-line", esse ambiente é otimizado para processamento paralelo de alta latência de grandes quantidades de dados. As solicitações são envios como tarefas para endpoints de processamento em lote, geralmente chamando funções de import ou exportação de dados (por exemplo, Export.* e ee.batch.*) das bibliotecas de cliente do Earth Engine. Cada tarefa em lote tem uma duração máxima de dez dias. Cada projeto oferece suporte a até 3.000 tarefas pendentes, mas cada usuário individual é limitado a um pequeno número de tarefas em execução simultaneamente.

Ciclo de vida da tarefa

As tarefas são enviadas para uma fila e ordenadas por prioridade (a mais alta primeiro) e tempo de envio (a mais recente primeiro). As tarefas mudam do estado SUBMITTED (na fila) para o estado RUNNING quando são atribuídas a um processador de lote. Cada processador é responsável por orquestrar um número variável de workers de lote para executar o cálculo e produzir os resultados da tarefa. O número de workers para uma tarefa é determinado pela capacidade do serviço EE de paralelisar o job e não pode ser configurado pelo usuário.

Ao usar um projeto do Cloud, as tarefas ficam visíveis para qualquer pessoa com a permissão de listar tarefas no nível do projeto. Se o projeto estiver registrado para acesso pago ao Earth Engine, as tarefas serão organizadas em uma fila do projeto. Se o projeto estiver registrado para acesso não remunerado (de pesquisa), as tarefas serão programadas de forma independente para cada indivíduo, mas ainda estarão visíveis para todos os usuários do projeto.

As tarefas são concluídas quando criam os artefatos necessários (ativos do Earth Engine, arquivos no Google Cloud Storage etc.).

Gerenciamento de tarefas

As tarefas podem ser visualizadas e canceladas usando as seguintes interfaces:

Falhas na tarefa

Se uma tarefa falhar por um motivo que não será corrigido com uma nova tentativa (por exemplo, os dados são inválidos), ela será marcada como FAILED e não será executada novamente.

Se uma tarefa falhar por um motivo que possa ser intermitente (por exemplo, o tempo limite foi atingido ao executar uma computação), o Earth Engine vai tentar automaticamente fazer outra tentativa e preencher o campo retries. As tarefas podem falhar até cinco vezes, e a falha final faz com que toda a tarefa seja marcada como FAILED.

ID da tarefa

Cada tarefa tem um ID alfanumérico no formato 3DNU363IM57LNU4SDTMB6I33. Eles podem ser visualizados ou acessados nas interfaces de gerenciamento de tarefas. Se você estiver iniciando tarefas de maneira programática, receberá o ID da tarefa em ee.data.newTaskId. Ao solicitar ajuda para depurar uma tarefa de exportação ou ingestão, forneça esse ID de tarefa como uma string copiada (não uma captura de tela).

Lista de estados da tarefa

As tarefas podem ter os seguintes valores de state:

  • UNSUBMITTED, ainda pendente no cliente
  • READY, na fila do servidor
  • RUNNING, em execução no momento
  • COMPLETED, concluída
  • FAILED, concluída sem sucesso
  • CANCEL_REQUESTED, ainda em execução, mas foi solicitado o cancelamento (ou seja, não há garantia de que a tarefa será cancelada)
  • CANCELLED, cancelada pelo proprietário

Prioridade da tarefa

A prioridade da tarefa é um mecanismo para controlar a ordem das tarefas na fila. As tarefas de maior prioridade são programadas antes de outras tarefas pendentes com prioridades mais baixas, independentemente do tempo de envio. A prioridade padrão da tarefa é 100.

A capacidade de definir outras prioridades (mais altas ou mais baixas) em tarefas de exportação está disponível apenas para usuários de projetos registrados para acesso pago ao Earth Engine. Mudar a prioridade de uma tarefa de exportação não afeta a programação em relação a qualquer tarefa de importação, já que os dois tipos de tarefas são programados separadamente.

Exemplo: como usar prioridades de tarefas

Considere a lista de tarefas a seguir, em que as tarefas 1 a 5 são enviadas na ordem natural com a prioridade padrão. Elas são executadas na ordem em que foram enviados, já que as prioridades são todas iguais. Como dois slots de processamento em lote estão disponíveis para esse projeto, dois são executados simultaneamente (o primeiro e o segundo enviados).

Task name           State      Priority
---------------------------------------
MyDefaultTask5      READY      100
MyDefaultTask4      READY      100
MyDefaultTask3      READY      100
MyDefaultTask2      RUNNING    100
MyDefaultTask1      RUNNING    100

O envio de uma nova tarefa, MyHighPriorityTask1, não afeta as tarefas em execução:

Task name           State      Priority
---------------------------------------
MyHighPriorityTask    READY      500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        RUNNING    100
MyDefaultTask1        RUNNING    100

Depois que uma das tarefas em execução for concluída, a tarefa pendente com a maior prioridade será executada (neste caso, a tarefa de alta prioridade):

Task name             State      Priority
-----------------------------------------
MyHighPriorityTask    RUNNING    500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        COMPLETED  100
MyDefaultTask1        RUNNING    100