O cache de metadados do ossfs é adequado para cenários nos quais um servidor tem alto IOPS de leitura/gravação em dados do Object Storage Service (OSS). Após habilitar o cache de metadados do ossfs, a eficiência geral das operações de objeto e o tempo de resposta das requisições são melhorados. Este tópico descreve como configurar e usar efetivamente o cache de metadados do ossfs.
Ao usar o cache de metadados do ossfs, preste atenção aos problemas de consistência e atualidade dos dados. Portanto, recomendamos que você não habilite o cache de metadados do ossfs em cenários que tenham requisitos elevados quanto à atualidade dos dados.
Informações básicas
Metadados referem-se a informações que descrevem dados, como tamanho do objeto, hora de criação, hora de modificação e IDs de usuário e grupo. IDs de usuário e grupo são atributos não suportados pelo OSS, mas sistemas de arquivos dependem desses atributos para verificações de permissão. O ossfs permite que você obtenha informações adicionais dos cabeçalhos personalizados de objetos no OSS. Dessa forma, você pode realizar operações em objetos com base em seus atributos no Linux.
Após habilitar o cache de metadados do ossfs, o desempenho, o uso de recursos e a experiência do usuário são melhorados.
-
Desempenho: O cache de metadados do ossfs reduz a latência da leitura de metadados, especialmente em cenários que envolvem operações de alto I/O, o que pode melhorar a eficiência geral das operações de objeto.
-
Uso de recursos: O cache de metadados do ossfs reduz o número de chamadas ao OSS e as consultas por segundo (QPS) quando você acessa frequentemente dados populares.
-
Experiência do usuário: O tempo de resposta das requisições é melhorado.
Cenários
-
O cache de metadados do ossfs é adequado para cenários nos quais você usa um servidor para acessar dados do OSS.
-
Em um ambiente distribuído, o cache de metadados do ossfs é adequado para cenários nos quais dados que não mudam frequentemente são lidos do OSS. Por exemplo, conjuntos de dados de treinamento de IA e arquivos de modelo de IA são lidos do OSS e consultas de big data são realizadas.
Como funciona
O ossfs usa a memória do cliente para armazenar em cache metadados do OSS para reduzir a latência das operações de armazenamento remoto.
-
Cache de metadados para primeiro acesso aos dados:
Na primeira vez que você acessa um objeto ou um diretório sob o ponto de montagem do ossfs, o cliente ossfs obtém os metadados do objeto do OSS e os armazena no cache local.
-
Aceleração de acesso subsequente:
Se a política de exclusão de cache estiver desabilitada ou o cache não expirar, o acesso subsequente aos metadados do objeto será lido diretamente do cache local sem a necessidade de enviar requisições ao OSS, o que reduz significativamente a latência.
-
Políticas de atualização de cache:
O ossfs atualiza o cache local com base em políticas específicas, como expiração de cache e limite superior do cache.
-
Sincronização de cache multi-cliente:
O cache de metadados do ossfs é um cache local de servidor único que usa a memória do cliente. Você não pode usar um servidor para montar vários buckets em vários sistemas de arquivos locais ao mesmo tempo ou sincronizar alterações de metadados entre vários servidores.
Comparação de modos
A tabela a seguir descreve as diferenças antes e depois de habilitar o cache de metadados do ossfs.
|
Cache de metadados do ossfs |
Comando |
Método de requisição |
Operação |
Desempenho |
|
Cache de metadados do ossfs desabilitado |
stat |
O ossfs envia requisições HeadObject a um bucket para obter metadados de objeto. |
O ossfs envia uma requisição HeadObject para obter apenas um objeto do bucket. |
Os metadados dos objetos são obtidos do bucket, o que é mais lento do que ler da memória. |
|
ls |
O ossfs envia uma requisição ListObject a um bucket para obter objetos em diretórios e envia requisições HeadObject para obter metadados de objeto. |
Após o ossfs enviar uma requisição ListObject, o ossfs envia uma requisição HeadObject para obter apenas um objeto em um diretório do bucket. |
||
|
Cache de metadados do ossfs habilitado (cache de metadados não expira) |
stat |
O ossfs obtém metadados de objeto da memória local. |
O ossfs obtém objetos da memória. |
Metadados de objeto são lidos da memória local, o que é mais rápido. |
|
ls |
O ossfs envia uma requisição ListObject a um bucket para obter objetos em diretórios e obtém metadados de objeto da memória local. |
Após o ossfs enviar uma requisição ListObject, o ossfs obtém objetos em diretórios. Se você quiser acessar um objeto específico em um diretório, o ossfs obtém o objeto da memória local. |
Parâmetros
A tabela a seguir descreve os parâmetros que você pode configurar para o cache de metadados do ossfs.
|
Parâmetro |
Descrição |
Valor |
|
max_stat_cache_size |
Especifica se deve habilitar o cache de metadados e o tamanho máximo do cache de metadados. Especifique o parâmetro com base no número de objetos acessados frequentemente no OSS. Se a memória for suficiente, recomendamos que você defina o parâmetro como um valor maior para melhorar o desempenho da operação.
|
Valor padrão: 100.000. Unidade: objeto ou diretório. Tamanho: aproximadamente 40 MB. |
|
stat_cache_expire |
Especifica se deve habilitar a política de exclusão de cache para o cache de metadados e alterar o período de validade do cache de metadados. Recomendamos que você especifique o período de validade do cache de metadados com base nos requisitos do seu negócio.
Nota
Por padrão, o ossfs habilita a política de exclusão de cache e define o limite superior para o cache de metadados como 100,000, o que consome aproximadamente 40 MB de memória. |
Valor padrão: 900. Unidade: segundos. |
|
readdir_optimize |
Especifica se deve usar otimização de cache. Valor padrão: false. Após especificar o parâmetro, o ossfs não envia uma requisição HeadObject para obter os metadados do objeto, como Para usar otimização de cache, especifique |
Valor padrão: false. |
Mecanismo de gerenciamento de cache de metadados
A tabela a seguir descreve o mecanismo de gerenciamento de cache de metadados do ossfs.
|
Status do cache |
Operação |
|
Metadados de objeto estão em cache e a política de exclusão de cache está desabilitada ou o cache não expira. |
Ler metadados de objeto diretamente do cache. |
|
Metadados de objeto estão em cache e o cache expira. |
Atualizar o cache. |
|
Metadados de objeto não estão em cache e a capacidade do cache está disponível. |
Armazenar objetos em cache. |
|
Metadados de objeto não estão em cache, a capacidade do cache está totalmente consumida e a política de exclusão de cache está habilitada. |
Percorrer o cache e excluir objetos expirados. |
|
Metadados de objeto não estão em cache, a capacidade do cache está totalmente consumida e a política de exclusão de cache está desabilitada. |
Excluir objetos em cache que não foram acessados por um período prolongado com base na política de menos recentemente usado (LRU). |
Sugestões
-
Se você não prestar atenção aos metadados dos objetos, recomendamos que você especifique o parâmetro
readdir_optimizepara melhorar o desempenho das operaçõeslistefind. Após habilitar o cache de metadados do ossfs, links simbólicos não são mais suportados. -
Em cenários multi-cliente que têm requisitos elevados de atualização em tempo real dos dados, proceda com cautela se habilitar o cache de metadados do ossfs. Você pode desabilitar o cache de metadados do ossfs especificando o parâmetro
-omax_stat_cache_size=0para manter a consistência dos dados. No entanto, pode ocorrer degradação de desempenho e você pode ser cobrado com taxas adicionais.Se sua aplicação exigir consistência forte de dados entre vários clientes, recomendamos que você use Cloud Storage Gateway (CSG) ou Cloud Parallel File Storage (CPFS). Recomendamos que você não use ossfs.
-
Se o número de objetos acessados frequentemente no OSS for grande, aumente o valor do parâmetro
max_stat_cache_sizeapropriadamente para evitar que o cache seja excluído frequentemente.Se você quiser realizar operações em um grande número de objetos e a memória do servidor for insuficiente, recomendamos que você use ossutil ou OSS SDKs para realizar as operações. Se você quiser montar um bucket em um sistema de arquivos local, recomendamos que você use CSG ou CPFS.
-
Se o número de objetos acessados frequentemente no OSS for grande, você pode criar vários pontos de montagem OSSFS, cada um dedicado a um subdiretório separado. Essa configuração distribui a carga de trabalho entre os pontos de montagem e consequentemente melhora o desempenho.