Ativar a compactação dinâmica

A compactação dinâmica compacta automaticamente as respostas disponibilizadas pelo Media CDN. O tamanho dos dados enviados pela rede é reduzido de 60% para 85% nos casos típicos.

A redução de tamanho acelera o download de recursos importantes, como folhas de estilo (CSS), scripts (JavaScript) e manifestos de vídeo (HLS/DASH), o que pode reduzir significativamente os tempos de carregamento de página e de início do vídeo.

Playlists de vídeo ao vivo grandes (manifestos) têm uma quantidade significativa de dados e buscas repetidos, incluindo o host e o prefixo de caminho de cada segmento, bem como os metadados de playlist HLS ou DASH. Quanto mais rápido o download ou a atualização da playlist forem feitos, menor será o tempo de espera do cliente para a análise e o início do download dos segmentos de vídeo referenciados. As playlists HLS e DASH geralmente passam por uma redução total de tamanho de mais de 90%.

Para mais informações sobre os benefícios da compactação de respostas, consulte o Guia de fundamentos da Web.

Como funciona a compactação dinâmica

Quando a compactação dinâmica está ativada, o conteúdo compactável disponibilizado pela origem pode ser compactado antes de ser entregue se o cliente aceitar um dos algoritmos de compactação compatíveis (br ou gzip).

O Media CDN adiciona um cabeçalho Vary: Accept-Encoding a todas as respostas qualificadas para compactação. Para informações relacionadas, consulte Conteúdo não compactável.

Além disso, se o cabeçalho Accept-Encoding da solicitação indicar uma preferência por conteúdo compactado especificando br ou gzip (e, opcionalmente, incluindo um parâmetro q diferente de zero), o Media CDN fará o seguinte:

  • Remove o cabeçalho Content-Length da resposta. Isso é necessário para que a resposta seja disponibilizada o mais rápido possível, porque o comprimento total do conteúdo é desconhecido até que toda a resposta seja compactada. Para HTTP/1.1 e anteriores, o Media CDN usa Transfer-Encoding: chunked na resposta quando não usa Content-Length.

    Depois que uma resposta tiver sido compactada e armazenada em cache, o Media CDN poderá incluir o cabeçalho Content-Length nas respostas subsequentes e definir o valor como o comprimento do conteúdo do corpo compactado.

  • Define Accept-Ranges como none. Isso informa aos clientes que as solicitações de intervalo para esse recurso são ignoradas.

  • Enfraquece todos os cabeçalhos de resposta ETag fortes, conforme exigido pela seção 8.8.3 da RFC 9110. Por exemplo, ETag: "xyzzy" é substituído por ETag: W/"xyzzy".

  • Define o cabeçalho Content-Encoding como br ou gzip, que significa o algoritmo de compactação escolhido.

    O Media CDN escolhe o melhor algoritmo de compactação com base na proporção de compactação prevista da resposta e na velocidade ou capacidade de processamento da compactação.

    • A compactação Brotli é usada se o cliente a oferecer suporte, mesmo que outros algoritmos de compactação tenham valores q mais altos no cabeçalho Accept-Encoding.

    • Os manifestos HLS são compactados usando apenas gzip.

    O Media CDN determina o nível de compactação para equilibrar o tamanho total do download e o custo da CPU no cliente. Níveis de compactação mais altos nem sempre beneficiam o desempenho, especialmente em dispositivos móveis com menor consumo de energia.

Configurar a compactação dinâmica

É possível ativar a compactação dinâmica em rotas que atendem a solicitações.

Antes de começar

Faça o seguinte:

Ativar a compactação dinâmica para uma regra de rota

Por padrão, o modo de compactação de uma regra de rota está desativado.

Definir o modo como automático ativa a compactação dinâmica para todas as respostas qualificadas. Além disso, instrui o Media CDN a escolher automaticamente o melhor algoritmo de compactação.

Para ativar a compactação dinâmica, faça o seguinte:

Console

  1. No Google Cloud console do, acesse a página Media CDN.

    Acesse Media CDN

  2. Para abrir a página Detalhes do serviço em que você quer configurar uma regra de rota, clique no nome do serviço.

  3. Para mudar para o modo de edição, clique no botão Editar.

  4. Para navegar até a seção Roteamento, clique em Próxima.

  5. Para editar uma regra de host, clique na seta para expandi-la.

  6. Para editar uma regra de rota, clique em Editar na linha correspondente.

  7. No painel Editar regra de rota, clique em Configurações avançadas.

  8. Opcional: em Rota de ação, adicione um política de CDN item.

    Uma política de CDN permite que o Media CDN compacte o conteúdo uma vez e o disponibilize várias vezes, o que economiza largura de banda e acelera a entrega.

  9. Na seção Compactação dinâmica, selecione Ativar compactação.

  10. Para salvar a regra de rota, clique em Salvar.

  11. Para salvar as alterações no serviço, clique em Atualizar serviço.

gcloud e YAML

  1. Exporte a configuração do Media CDN para um arquivo YAML. Use o gcloud edge-cache services export comando.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Substitua:

    • SERVICE_NAME: o nome do serviço;
    • FILENAME : o nome do arquivo YAML.
  2. Na definição de rota no arquivo YAML, em routeAction, defina compressionMode como AUTOMATIC, conforme mostrado no exemplo a seguir:

    routing:
    hostRules:
    - hosts:
      - media.example.com
      pathMatcher: routes
    pathMatchers:
    - name: routes
      routeRules:
        - priority: 2
    origin: origin1
    matchRules:
    - pathTemplateMatch: "/**.m3u8" # HLS playlists
    - pathTemplateMatch: "/**.mpd" # DASH manifests
    routeAction:
      cdnPolicy:
        defaultTtl: 5s
      compressionMode: AUTOMATIC
    
  3. Para atualizar o serviço, importe a configuração do Media CDN do arquivo YAML. Use o gcloud edge-cache services import comando.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Terraform

O snippet do Terraform a seguir mostra uma regra de rota com a compactação dinâmica ativada.

route_rule {
  description = "a route rule with dynamic compression, priority=2 (high)"
  priority    = 2
  match_rule {
    path_template_match = "/**.m3u8" # HLS playlists
  }
  match_rule {
    path_template_match = "/**.mpd" # DASH manifests
  }
  origin = google_network_services_edge_cache_origin.default.name
  route_action {
    cdn_policy {
      cache_mode = "FORCE_CACHE_ALL"
      client_ttl = "300s"
    }
    compression_mode = "AUTOMATIC"
  }
  header_action {
    response_header_to_add {
      header_name  = "x-cache-status"
      header_value = "{cdn_cache_status}"
    }
  }
}

Sua configuração será propagada em breve para todos os locais de borda.

Quando a compactação dinâmica está ativada para uma rota e a nova configuração entra em vigor em máquinas de produção, o Media CDN começa a compactar respostas qualificadas, mesmo que versões armazenadas em cache não compactadas existam. Enquanto o Media CDN busca e compacta novos conteúdos, pode haver um pico temporário no tráfego para sua origem.

Desativar a compactação dinâmica para uma regra de rota

Para desativar a compactação dinâmica, faça o seguinte:

Console

  1. No Google Cloud console do, acesse a página Media CDN.

    Acesse Media CDN

  2. Para abrir a página Detalhes do serviço em que você quer configurar a regra de rota, clique no nome do serviço.

  3. Para mudar para o modo de edição, clique no botão Editar.

  4. Para navegar até a seção Roteamento, clique em Próxima.

  5. Para editar uma regra de host, clique na seta para expandi-la.

  6. Para editar uma regra de rota, clique em Editar na linha correspondente.

  7. No painel Editar regra de rota, clique em Configurações avançadas.

  8. Na seção Compactação dinâmica, desmarque Ativar compactação.

  9. Para salvar a regra de rota, clique em Salvar.

  10. Para salvar as alterações no serviço, clique em Atualizar serviço.

gcloud e YAML

  1. Exporte a configuração do Media CDN para um arquivo YAML. Use o gcloud edge-cache services export comando.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Substitua:

    • SERVICE_NAME: o nome do serviço;