Pré-carregar ficheiros na Azure HPC Cache

A funcionalidade de priming do Azure HPC Cache permite aos clientes pré-carregar ficheiros na cache.

Pode usar esta funcionalidade para obter o conjunto de ficheiros de trabalho esperado e preencher a cache antes de começar o trabalho. Esta técnica é por vezes chamada de aquecimento do cache.

Preparar a cache melhora o desempenho ao aumentar os "cache hits". Se uma máquina cliente solicitar um recurso que deve ser lido do armazenamento back-end, a latência para obter e devolver esse ficheiro pode ser significativa – especialmente se o sistema de armazenamento for um NAS local. Se preparares a cache com os ficheiros necessários antes de iniciares uma tarefa de computação, os pedidos de ficheiros serão mais eficientes durante o trabalho.

Esta funcionalidade utiliza um ficheiro manifesto JSON para especificar quais os ficheiros a carregar. Cada tarefa de priming ocupa um ficheiro manifesto.

Crie tarefas de priming de cache usando o portal do Azure, ou então com os endpoints da API REST do Azure mencionados no final deste documento.

Pode criar até 10 trabalhos de priming. Dependendo do tamanho da cache, entre três e dez tarefas de inicialização podem correr ao mesmo tempo; outras ficam em fila até que os recursos sejam libertados.

Configuração e pré-requisitos

Antes de poder criar uma tarefa de preparação, siga estes passos:

  1. Crie uma cache HPC Azure. (Consulte Criar uma cache HPC Azure para obter ajuda.)
  2. Defina pelo menos um destino de armazenamento, incluindo a criação do seu caminho agregado de namespace (ou caminhos). Documentação do destino de armazenamento
  3. Crie o manifesto do trabalho de priming (instruções abaixo) e armazene-o num container Blob acessível à Cache HPC. Ou, se estiveres a usar APIs Azure REST para criar os teus jobs de priming, podes armazenar o manifesto em qualquer URL a que o teu HPC Cache possa aceder.

Criar um ficheiro de manifesto de preparação

O manifesto de priming é um ficheiro JSON que define que conteúdo será pré-carregado na cache quando o trabalho de priming for executado.

No manifesto, especifica o caminho do namespace para os diretórios ou ficheiros que queres pré-carregar. Também pode configurar regras de incluir e excluir para personalizar que conteúdo é carregado.

Manifesto de exemplo para preparação


{
    "config": {
        "cache_mode": "0",
        "maxreadsize": "0",
        "resolve_symlink": "0",
        "threads":"8",
        "skip_estimation":"0"
    },
    
    "files": [
        "/bin/tool.py",
        "/bin/othertool.py"
    ],
    
    "directories": [
        {"path": "/lib/toollib"},
        {
            "path": "/lib/otherlib", 
            "include": ["\\.py$"]
        },
        {
            "path": "/lib/xsupport", 
            "include": ["\\.py$"], 
            "exclude": ["\\.elc$", "\\.pyc$"]
        }
    ],
    
    "include": ["\\.txt$"],
    "exclude": ["~$", "\\.bak$"]
}

Existem três secções no ficheiro de manifesto de priming.

  • Configuração (config) - definições para o trabalho de inicialização

  • Declarações de ficheiro e diretório:

    • files - ficheiros individuais que serão pré-carregados
    • directories - caminhos de ficheiros que serão pré-carregados
  • Instruções globais de incluir e excluir (include e exclude) - cadeias de expressões regulares que modificam a tarefa de preparação de diretórios

Definições de configuração

A config secção do ficheiro manifest define estes parâmetros:

  • Modo de cache - Define o comportamento da tarefa de iniciação. As opções são:

    • 0 - Dados - Carregar todos os dados e atributos especificados no cache. Este é o padrão.
    • 1 - Metadados - Carregar apenas os atributos do ficheiro.
    • 2 - Estimar - Carregar os atributos do ficheiro e também devolver um número estimado de ficheiros, diretórios e tamanho total dos dados (em bytes) que seriam preparados se o conteúdo deste manifesto fosse executado no modo Data.
  • maxreadsize - Define o número máximo de bytes que serão pré-carregados por ficheiro. Deixe isto definido para 0 (o padrão) para carregar sempre o ficheiro inteiro, independentemente do tamanho.

  • resolve_symlink - Defina isto como verdadeiro (1) se quiser resolver ligações simbólicas ao primar. Se resolve_symlink estiver ativado, os alvos de ligação simbólica são totalmente pré-carregados, independentemente das regras de inclusão e exclusão.

  • threads - O número de roscas de priming a utilizar. Os valores válidos são de 1 a 128. O valor padrão é 8, para equilibrar entre o priming e o atendimento aos pedidos do cliente.

  • skip_estimation - Antes de começar a copiar ficheiros, o trabalho de preparação faz uma estimativa da quantidade de dados a serem preparados. Define a skip_estimation flag para true (1) se quiseres passar diretamente para a fase de priming do ficheiro. Se saltar a fase de estimativa, o relatório de progresso pode ser menos preciso. O valor padrão é 0, incluindo a fase de estimação.

Caminhos de ficheiros e diretórios

As secções files e directories do manifesto especificam quais ficheiros são pré-carregados durante o trabalho de priming.

Especifique ficheiros e diretórios pelos seus caminhos de namespace cache. Estes são os mesmos caminhos que os clientes usam para aceder aos ficheiros através da cache HPC, e não precisam de ser iguais aos caminhos do sistema de armazenamento ou nomes de exportação. Leia Planejar o namespace agregado para saber mais.

Começar os percursos a partir da raiz do espaço de nomes da cache.

Note

Os itens listados em files, são incluídos mesmo que correspondam às regras de exclusão posteriores.

O directories valor contém uma lista de caminhos que são avaliados para que o conteúdo seja pré-carregado na cache. Todas as subárvores estão incluídas no trabalho de priming, a menos que estejam especificamente excluídas.

Os valores do caminho do diretório podem ter as suas próprias instruções de inclusão e exclusão, que se aplicam apenas ao caminho com que estão definidos. Por exemplo, a linha "directories": [{"path": "/cache/library1", "exclude": "\\.bak$"}] pré-carregaria todos os ficheiros no caminho do namespace /cache/library1/, exceto os ficheiros desse caminho que terminam em .bak.

As instruções de inclusão/exclusão ao nível do diretório não são as mesmas que as instruções globais de inclusão e exclusão descritas abaixo. Tenha cuidado ao ler os detalhes sobre como as instruções de nível de diretório interagem com as instruções globais de inclusão e exclusão.

Note

Devido à forma como o ficheiro manifest é analisado, são necessários dois caracteres de escape para proteger um carácter de cadeia problemático nas instruções include e exclude. Por exemplo, use a expressão \\.txt para corresponder ficheiros .txt.

Incluir e excluir afirmações

Depois dos ficheiros e diretórios, podes especificar instruções globais include e exclude. Estas definições globais aplicam-se a todos os diretórios. Não se aplicam a ficheiros especificados numa files declaração.

Em geral, as regras são aplicadas por ordem, pelo que as declarações que surgem primeiro no ficheiro manifesto são aplicadas antes das seguintes. As descrições neste artigo também pressupõem que regras anteriores já foram aplicadas sem encontrar correspondências.

  • Instruções de inclusão - Ao digitalizar diretórios, a tarefa de inicialização ignora quaisquer ficheiros que não correspondam às expressões regulares na include definição.

  • Excluir declarações - Ao efetuar a varredura de diretórios, a tarefa de inicialização ignora qualquer ficheiro que corresponda às expressões regulares nas exclude definições.

    Mais sobre como as regras globais de exclusão interagem com outras regras:

    • Regras globais de exclusão sobrepõem-se às regras globais de inclusão. Ou seja, se um nome de ficheiro corresponder tanto a uma expressão global de inclusão como a uma expressão global de exclusão , não será pré-carregado pelo trabalho de priming.

    • As regras de inclusão ao nível do diretório substituem as regras de exclusão globais.

      Um nome de ficheiro que corresponda tanto a uma expressão de inclusãoao nível de diretóriocomo a uma expressão global de exclusãoserá pré-carregado pelo trabalho de priming.

    • As instruções de ficheiro sobrepõem-se a todas as regras de exclusão.

Podes omitir instruções de incluir e excluir para colocar todos os ficheiros nos diretórios.

Mais informações sobre regras de inclusão/exclusão e como correspondem aos nomes dos ficheiros:

  • Se um nome corresponder a uma entrada na lista de exclusão por diretório, é ignorado.

  • Se existir uma lista de inclusão por diretório, o nome é incluído ou excluído dependendo de aparecer ou não nessa lista.

  • Se um nome corresponder a uma entrada na lista global de exclusão, é ignorado.

  • Se existir uma lista global de inclusão, o nome é incluído se aparecer nessa lista, ou excluído se não aparecer nessa lista.

  • Se existir uma lista de inclusão por diretório, o nome é excluído. Caso contrário, está incluído na lista.

  • Se um diretório e um antecessor desse diretório aparecerem ambos na lista de diretórios, as regras específicas para o diretório são aplicadas juntamente com as regras globais e as regras para o diretório ancestral são ignoradas.

  • Nomes e regras são sensíveis a maiúsculas e minúsculas. Fontes que não diferenciam entre maiúsculas e minúsculas não são suportadas.

  • O número total de regras de ficheiro mais regras de diretório não pode exceder 4000. O número de regras de expressões regulares para qualquer lista de incluir/excluir não pode exceder 5.

  • Se uma especificação de diretório se sobrepor a outra, a que tem o caminho mais explícito tem prioridade.

  • É um erro que um manifesto especifique o mesmo caminho mais do que uma vez na lista de ficheiros ou diretórios.

Carregar o ficheiro do manifesto de inicialização

Quando o seu ficheiro manifesto estiver pronto, carregue-o para um contentor de blob Azure numa conta de armazenamento acessível a partir do seu cache HPC. Se usares APIs em vez do portal para criar os teus jobs de priming, tens a opção de o armazenar noutro servidor web, mas tens de tomar diferentes medidas para garantir que a cache pode aceder a eles.

  • Se criar um trabalho de priming a partir do portal Azure, selecione o ficheiro de manifesto na página de definições do HPC Cache Prime, conforme descrito abaixo. Selecioná-lo nas definições da cache cria automaticamente uma Assinatura de Acesso Partilhada (SAS) que dá à cache acesso limitado ao ficheiro de priming.

  • Se usares APIs para criar o trabalho de priming em vez de usares o portal, certifica-te de que a cache está autorizada a aceder a esse ficheiro. Ou armazena o ficheiro num local acessível (por exemplo, num servidor web que controlas e que está dentro da tua cache ou rede de armazenamento), ou cria manualmente um URL SAS para o teu ficheiro de priming.

    Leia Conceder acesso limitado aos recursos do Azure Storage usando assinaturas de acesso partilhado (SAS) para aprender a criar uma URL SAS de Conta para o seu ficheiro de manifesto de preparação. O ficheiro manifesto deve ser acessível com HTTPS.

A cache acede ao ficheiro manifesto uma vez quando o trabalho de priming começa. O URL SAS gerado para a cache não é exposto.

Crie um trabalho de preparação (priming)

Use o Portal Azure para criar um trabalho de inicialização. Veja o seu Azure HPC Cache no portal e selecione a página Prime cache no título Definições .

captura de ecrã da página de Priming no portal, com várias tarefas em diferentes estados.

Clique no texto Começar a preparar a tarefa no topo da tabela para definir uma nova tarefa.

No campo Nome do Trabalho, escreva um nome único para o trabalho inicial.

Use o campo Ficheiro de Priming para selecionar o seu ficheiro manifesto de priming. Seleciona a conta de armazenamento, o contentor e o ficheiro onde o teu manifesto de priming está armazenado.

captura de ecrã da página do trabalho de inicialização de preparação, com o nome da tarefa e o caminho do ficheiro de priming preenchidos. Abaixo do campo do ficheiro Priming há um link rotulado

Para selecionar o ficheiro manifesto de priming, clique no link para selecionar um destino de armazenamento. Depois seleciona o contentor onde o teu ficheiro de manifestos de .json está armazenado.

Se não conseguires encontrar o ficheiro manifesto, a tua cache pode não conseguir aceder ao contentor do ficheiro. Certifique-se de que a cache tem conectividade de rede à conta de armazenamento e consegue ler dados do contentor.

Gerir trabalhos de preparação

Os trabalhos de priming estão listados na página Prime cache no portal Azure.

Esta página mostra o nome de cada tarefa, o seu estado, a sua situação atual e estatísticas resumidas sobre o progresso da preparação. O resumo na coluna Detalhes atualiza-se periodicamente à medida que o trabalho avança. O campo de estado do trabalho é preenchido quando uma tarefa de inicialização começa; este campo também fornece informações básicas sobre erros, como Manifesto Inválido caso ocorra um problema.

Enquanto um trabalho está a decorrer, a coluna Percentagem concluída mostra uma estimativa do progresso.

Antes de começar um trabalho de priming, o estado é Em Espera. Os campos de estado do trabalho, percentagem concluída e detalhes estão vazios.

Captura de ecrã da lista de trabalhos de preparação no portal, com trabalhos em vários estados (em execução, pausado e concluído com sucesso). O cursor clicou no símbolo ... no lado direito da linha de um trabalho, e um menu contextual mostra opções para pausar ou retomar.

Clique na seção ... à direita da tabela para pausar ou retomar um trabalho de preparação. Pode levar alguns minutos até que o estado seja atualizado.

Para eliminar um trabalho de priming, selecione-o na lista e use o controlo Stop no topo da tabela. Pode usar o controlo Stop para eliminar um trabalho em qualquer estado.

APIs REST do Azure

Pode usar estes endpoints da API REST para criar e gerir trabalhos de priming de cache HPC. Estas fazem parte da 2022-05-01 versão da API REST, por isso certifica-te de que usas essa cadeia no termo api_version .

Leia a referência da API Azure REST para aprender a usar estas ferramentas.

Adicionar um novo trabalho de inicialização

A startPrimingJob interface cria e coloca em fila um trabalho de priming. O trabalho começa automaticamente quando há recursos disponíveis.


URL: POST

     https://MY-ARM-HOST/subscriptions/MY-SUBSCRIPTION-ID/resourceGroups/MY-RESOURCE-GROUP-NAME/providers/Microsoft.StorageCache/caches/MY-CACHE-NAME/startPrimingJob?api-version=2022-05-01

     BODY:
     {
         "primingJobName": "MY-PRIMING-JOB",
         "primingManifestUrl": "MY-JSON-MANIFEST-FILE-URL"
     }

Para o valor primingManifestUrl, insira a URL SAS do ficheiro ou outro URL HTTPS acessível à cache. Leia sobre Como carregar o ficheiro do manifesto de priming para saber mais.

Parar um trabalho de preparação

A stopPrimingJob interface cancela um trabalho (se estiver a correr) e remove-o da lista de tarefas. Use esta interface para eliminar uma tarefa de inicialização em qualquer condição.


URL: POST 
     https://MY-ARM-HOST/subscriptions/MY-SUBSCRIPTION-ID/resourceGroups/MY-RESOURCE-GROUP-NAME/providers/Microsoft.StorageCache/caches/MY-CACHE-NAME/stopPrimingJob?api-version=2022-05-01

BODY:
     {
         "primingJobId": "MY-JOB-ID-TO-REMOVE"
     }

Obter trabalhos de priming

Usa a Get cache API para listar os trabalhos de priming de uma cache. Esta API devolve muita informação sobre a cache; procure informações sobre o trabalho de inicialização na secção "propriedades da cache".

Os nomes e IDs dos trabalhos de preparação são devolvidos, juntamente com outras informações.


URL: GET 
     https://MY-ARM-HOST/subscriptions/MY-SUBSCRIPTION-ID/resourceGroups/MY-RESOURCE-GROUP-NAME/providers/Microsoft.StorageCache/caches/MY-CACHE-NAME?api-version=2022-05-01

BODY:

Pausar um trabalho de priming

A pausePrimingJob interface suspende um trabalho em execução.


URL: POST 
     https://MY-ARM-HOST/subscriptions/MY-SUBSCRIPTION-ID/resourceGroups/MY-RESOURCE-GROUP-NAME/providers/Microsoft.StorageCache/caches/MY-CACHE-NAME/pausePrimingJob?api-version=2022-05-01

BODY:
     {
         "primingJobId": "MY-JOB-ID-TO-PAUSE"
     }

Retomar uma tarefa de priming

Utilize a resumePrimingJob interface para reativar um trabalho de priming suspenso.


URL: POST 
     https://MY-ARM-HOST/subscriptions/MY-SUBSCRIPTION-ID/resourceGroups/MY-RESOURCE-GROUP-NAME/providers/Microsoft.StorageCache/caches/MY-CACHE-NAME/resumePrimingJob?api-version=2022-05-01

BODY:
     {
         "primingJobId": "MY-JOB-ID-TO-RESUME"
     }

Perguntas frequentes

  • Posso reutilizar um trabalho de preparação?

    Não exatamente, porque cada trabalho de priming na lista deve ter um nome único. Depois de apagares um trabalho de priming da lista, podes criar um novo trabalho com o mesmo nome.

    Podes criar múltiplos jobs de priming que referenciam o mesmo ficheiro manifesto.

  • Quanto tempo permanece uma tarefa de inicialização falhada ou concluída na lista?

    Os trabalhos de preparação continuam na lista até que sejam eliminados. Na página Prime cache do portal, assinale a caixa de seleção ao lado do trabalho e selecione o controlo Stop no topo da lista para eliminar o trabalho.

  • O que acontece se o conteúdo que estou a pré-carregar for maior do que o armazenamento em cache?

    Se a cache estiver cheia, os ficheiros obtidos mais tarde irão sobrescrever os ficheiros que foram carregados anteriormente.

Passos seguintes