A RFC de multimédia permite-lhe obter conteúdo da sua infraestrutura de origem, quer o conteúdo esteja alojado no Google Cloud, noutra nuvem ou no local.
Cada configuração pode ter uma ou mais origens associadas. As configurações de origem indicam ao CDN de multimédia como estabelecer ligação à sua infraestrutura, quando e como fazer failover, repetir e esgotar o tempo limite, e que protocolo usar ao estabelecer ligação.
As origens têm as seguintes funcionalidades:
- As origens podem ser definidas por anfitrião e por trajeto, o que permite que um único recurso
EdgeCacheService
seja mapeado para várias origens que contenham, por exemplo, manifestos, segmentos de vídeo e outro conteúdo estático. - É possível aceder às origens através de HTTP/2, HTTPS e HTTP/1.1 não encriptado.
- Pode configurar regras de firewall para permitir apenas endereços IP da Google específicos, para que apenas a RFC de multimédia possa aceder às suas origens.
- Os comportamentos de repetição e de comutação por falha são configurados por origem e podem permitir
que o serviço comute por falha em erros graves (como falha de conetividade) ou
repita com base nas respostas HTTP
404 Not Found
ou HTTP429 Too Many Requests
. - Pode aceder a recursos privados no local ou no interior configurando um Application Load Balancer externo como uma origem atrás da RFC de conteúdo multimédia. Google Cloud
- O comportamento de seguimento de redirecionamentos é configurado por origem. Pode ativar o Media CDN para seguir redirecionamentos para outros servidores de origem.
Requisitos de origem
Para permitir que a RFC de multimédia na nuvem armazene em cache respostas de origem superiores a 1 MiB, uma origem tem de incluir o seguinte nos cabeçalhos das respostas para pedidos HEAD
e GET
, salvo especificação em contrário:
- Um cabeçalho de resposta HTTP
Last-Modified
ouETag
(um validador). - Um cabeçalho HTTP
Date
válido. - Um cabeçalho
Content-Length
válido. - O cabeçalho da resposta
Content-Range
, em resposta a um pedidoRange GET
. O cabeçalhoContent-Range
tem de ter um valor válido no formatobytes x-y/z
(em quez
é o tamanho do objeto).
O protocolo de origem predefinido é HTTP/2. Se as suas origens apenas suportarem HTTP/1.1, pode definir o campo de protocolo explicitamente para cada origem.
Proteção de origem
A RFC de multimédia oferece uma infraestrutura de limite profundamente hierarquizada concebida para minimizar ativamente o preenchimento da cache sempre que possível.
Existem três camadas principais de infraestrutura de colocação em cache:
- Caches de limite profundos, que servem a maioria do tráfego e descarregam na rede de um fornecedor de serviços.
- O limite de intercâmbio da Google, que está ligado a milhares de ISPs e funciona como a cache de nível intermédio para caches de limite e, nos casos em que não estão presentes num determinado ISP, a cache virada para o utilizador.
- Caches de cauda longa na rede da Google que outros caches a jusante preenchem antes da origem. Estas caches suportam um volume significativo de pedidos, têm uma capacidade de armazenamento em cache substancial e atuam como um escudo de origem.
Aqui é apresentada uma vista geral desta topologia:
A RFC de multimédia oferece proteção de origem por predefinição através de um conjunto limitado de localizações globais importantes. A proteção de origem predefinida funciona com base na localização do utilizador final e não na origem. Isto funciona bem e oferece fortes vantagens de desvio quando os utilizadores finais e os servidores de origem estão na mesma região e quando os servidores de origem globais estão localizados em várias regiões.
Proteção flexível
Em cenários em que a sua origem está centralizada numa região, mas os seus utilizadores estão distribuídos globalmente, o comportamento de proteção de origem predefinido, que se baseia na localização do utilizador, pode ser subótimo das seguintes formas:
- Aumentar a latência para falhas de cache quando a localização do escudo predefinida está geograficamente distante da sua origem centralizada
- Redução da transferência da origem através da dispersão de pedidos de preenchimento da cache por várias localizações de proteção predefinidas globais, em vez de os concentrar
A proteção flexível ajuda a superar estas limitações configurando uma região geográfica única e específica para a proteção de origem, normalmente selecionada para estar perto da sua origem centralizada. Em seguida, a proteção flexível encaminha todos os pedidos de preenchimento da cache através de caches de proteção localizadas na região configurada ou perto desta. Isto consolida o carregamento na sua origem através dessas caches focadas na região.
Ao configurar uma região de proteção flexível na mesma região geográfica que a sua origem centralizada, pode otimizar o seguinte:
- Taxa de resultados da cache na camada de proteção
- Descarga da origem
- Latência para falhas de cache e conteúdo não armazenável em cache
- Estabilidade do desempenho
A proteção flexível é compatível com qualquer tipo de origem configurado na RFC de multimédia.
Pedir redução
O pedido de redução reduz ativamente vários pedidos de preenchimento da cache iniciados pelo utilizador para a mesma chave da cache num único pedido de origem, por nó de limite.
Todas as camadas de colocação em cache suportam a redução de pedidos (ou união) para reduzir ainda mais a carga de origem. Com base em cargas de trabalho reais observadas em grande escala:
- > 95% do preenchimento da cache usa um nó de cache de cauda longa dedicado na região, de modo a reduzir os custos e a latência do preenchimento da cache.
- O preenchimento da cache entre a origem e a infraestrutura de proximidade da Google é feito inteiramente através da rede principal privada global da Google, o que reduz a latência de preenchimento da cache e melhora a fiabilidade. Ambos são benefícios ativos para cargas de trabalho de streaming em direto.
- As caches preenchem-se mutuamente quando é vantajoso fazê-lo, o que reduz ainda mais as taxas de preenchimento da cache.
- A RFC de multimédia tem uma capacidade de armazenamento significativa em todas as caches, o que minimiza as taxas de remoção, mesmo para conteúdo menos popular e de cauda longa.
Os clientes podem ver taxas de descarregamento diferentes consoante a configuração da cache, a carga do utilizador, as cargas de trabalho (como em direto versus a pedido), a distribuição dos utilizadores e a quantidade de conteúdo de cauda longa (tamanho total do conjunto de dados) que fornecem aos utilizadores em várias regiões.
Quando combinada com a proteção de origem, a redução de pedidos diminui ainda mais a carga de origem e as necessidades de largura de banda de saída, e é o comportamento predefinido para a RFC de multimédia.
Os pedidos reduzidos têm o pedido apresentado ao cliente registado e o pedido de preenchimento da cache (reduzido) registado. O líder da sessão reduzida é usado para fazer o pedido de preenchimento de origem, o que significa que a origem vê os cabeçalhos (incluindo o agente do utilizador) apenas desse cliente.
Não é possível comprimir pedidos que não partilham a mesma chave de cache.
Conetividade de origem
As secções seguintes descrevem como a RFC de multimédia se liga às origens, como são feitos os pedidos HTTP e como pode autenticar os pedidos.
Origens e protocolos suportados
A RFC de multimédia suporta diretamente qualquer ponto final de HTTP acessível publicamente como origem, incluindo o seguinte:
- Contentores do Cloud Storage, incluindo contentores privados através de contas de serviço da gestão de identidade e de acesso
- Balanceadores de carga de aplicações externos
- Contentores compatíveis com o Amazon S3, incluindo contentores privados que usam a versão 4 da assinatura da AWS
- Outro armazenamento de objetos disponível publicamente, como o armazenamento de blobs do Azure
- Servidores Web disponíveis publicamente, como VMs públicas ou anfitriões no local
A conetividade às origens é feita através de túneis seguros e da rede global da Google.
A tabela seguinte detalha os protocolos de origem suportados.
Protocolo | Suportado | SSL (TLS) necessário |
---|---|---|
HTTP/2 | Sim (predefinição) | Sim |
HTTPS (HTTP/1.1 através de TLS) | Sim | Sim |
HTTP/1.1 | Sim | Não |
Por predefinição, a RFC usa o HTTP/2 (h2) para se ligar a uma origem. O HTTP/2 e o HTTPS requerem um certificado TLS (SSL) válido e publicamente fidedigno. Um certificado válido é um certificado que não expirou, que foi assinado por uma autoridade de certificação pública e que tem um nome alternativo do assunto correspondente ao nome do anfitrião enviado para a origem.
Notas:
- Se a sua origem não suportar HTTP/2, pode definir explicitamente o protocolo (por origem) como
HTTP
(HTTP/1.1) ouHTTPS
(HTTP/1.1 através de TLS). - Quando configura o HTTPS ou o HTTP/1.1 como o protocolo de origem, a RFC de multimédia não negoceia um protocolo alternativo (como o HTTP/2). Da mesma forma, quando configura o HTTP/2, a ligação não reverte para HTTP/1.1, para ser explícita acerca do comportamento da conetividade de origem.
- A RFC 2616 especifica que a porta 80 é a porta predefinida para o protocolo HTTP.
80
443
Cabeçalhos do pedido de origem
Quando se liga a uma origem, a RFC usa o cabeçalho Host
do pedido do cliente por predefinição.
A tabela seguinte documenta o que a origem vê no pedido recebido em diferentes cenários de configuração:
Pedido do cliente | EdgeCacheService.hostRewrite |
EdgeCacheOrigin.hostRewrite |
originAddress | Cabeçalho do anfitrião / SNI do TLS na origem |
---|---|---|---|---|
media.example.com | Nenhum | Nenhum | backend.example.com | media.example.com |
media.example.com | service.example.com | Nenhum | backend.example.com | service.example.com |
media.example.com | Nenhum | origin.example.com | backend.example.com | origin.example.com |
media.example.com | service.example.com | origin.example.com | backend.example.com | origin.example.com |
media.example.com | service.example.com | origin.example.com | gs://vod-content-bucket | definido automaticamente com base no nome do contentor |
A origem principal e quaisquer origens de ativação pós-falha veem o mesmo cabeçalho de anfitrião se partilharem a mesma configuração routeRule
ou hostRewrite
.
Todas as definições de hostRewrite
são ignoradas quando usa um contentor do Cloud Storage como origem, porque os contentores do Cloud Storage não suportam valores de cabeçalho do anfitrião alternativos. O cabeçalho do anfitrião é definido automaticamente com base no nome do contentor.
O valor TLS SNI (Server Name Indication) no pedido (para pedidos HTTP/3, HTTP/2 e HTTPS) está definido para o mesmo valor que o cabeçalho do anfitrião enviado para a origem.
Para obter informações sobre como reescrever cabeçalhos de anfitrião para a configuração por rota, consulte o artigo Configure rotas de serviço. Para obter informações sobre como definir ações de substituição por origem, consulte o artigo Failover de origem sem redirecionamento seguinte.
Permita que a origem receba tráfego da RFC
Para reduzir o risco de acesso não autorizado ao seu conteúdo, use uma lista de autorizações de IPs na origem para bloquear o acesso a todos os endereços IP, exceto os intervalos de endereços IP específicos que a Google usa para enviar pedidos a origens externas. Desta forma, apenas a RFC de multimédia pode estabelecer ligação aos seus servidores de origem.
A tabela seguinte resume os intervalos de endereços IP de origem necessários para as regras de firewall:
Tipo de endereço IP | Intervalo de IP da origem do pedido |
---|---|
IPv4 | 136.124.4.0/22 |
IPv6 | 2001:4860:4864:a::/64 |
Use o seguinte URL para aceder ao ficheiro JSON que contém os intervalos de endereços IP atribuídos pela Google atualizados.
https://www.gstatic.com/ipranges/mediacdn.json
Comutação por falha e limites de tempo
As secções seguintes descrevem estas opções de configuração:
- Tempos limite: determine quanto tempo a RFC de multimédia aguarda para estabelecer ligação à sua origem ou para que esta responda a um pedido.
- Voltas a tentar: determine se a RFC de conteúdo multimédia volta a tentar um pedido HTTP de origem para a sua origem e em que condições.
- Failover: determine se a RFC tenta estabelecer ligação a uma origem de failover se a primeira não estiver disponível ou devolver um código de estado específico.
Limites de tempo de origem
Os limites de tempo permitem-lhe configurar quando os comportamentos de nova tentativa de origem e de comutação por falha são acionados e quando a comutação por falha do cliente subsequente pode ser acionada.
A seguir, são descritos os limites de tempo configuráveis suportados pela Media CDN:
connectTimeout
emaxAttemptsTimeout
limitam o tempo que a Media CDN demora a encontrar uma resposta utilizável.Ambos os limites de tempo incluem o tempo que a origem demora a devolver cabeçalhos e a determinar se deve usar uma alternativa ou um redirecionamento.
connectTimeout
aplica-se independentemente a cada tentativa de origem, enquantomaxAttemptsTimeout
inclui o tempo necessário para estabelecer ligação em todas as tentativas de origem, incluindo as alternativas e os redirecionamentos. Seguir um redirecionamento conta como uma tentativa adicional de estabelecer ligação à origem e conta para o limitemaxAttempts
definido para a origem configurada.Quando a RFC encontra uma resposta sem redirecionamento, como de uma origem de redirecionamento ou de alternativa, os valores
readTimeout
eresponseTimeout
aplicam-se. As origens redirecionadas usam os valoresconnectTimeout
,readTimeout
eresponseTimeout
configurados para oEdgeCacheOrigin
que encontrou o redirecionamento.responseTimeout
ereadTimeout
controlam a duração de uma resposta transmitida. Depois de a RFC determinar que vai usar uma resposta a montante, nemconnectTimeout
nemmaxAttemptsTimeout
são importantes. Neste ponto,readTimeout
eresponseTimeout
entram em vigor.
A RFC 7230 especifica que um cliente HTTP deve tentar novamente um pedido HTTP falhado, pelo menos, uma vez. O Media CDN faz, no máximo, quatro tentativas de origem em todas as origens, independentemente do maxAttempts
definido por cada EdgeCacheOrigin
.
A RFC de multimédia usa o valor maxAttemptsTimeout
da propriedade principal
EdgeCacheOrigin
. Os valores de tempo limite por tentativa (connectTimeout
, readTimeout
e responseTimeout
) são configurados para o EdgeCacheOrigin
de cada tentativa.
A tabela seguinte descreve os campos de limite de tempo:
Campo | Predefinição | Descrição |
---|---|---|
connectTimeout | 5 segundos | O tempo máximo que a RFC de multimédia pode demorar desde o início do pedido à origem até determinar se a resposta é utilizável. Na prática, O limite de tempo tem de ser um valor entre 1 segundo e 15 segundos. |
maxAttemptsTimeout | 15 segundos | O tempo máximo em todas as tentativas de ligação à origem, incluindo origens de failover, antes de devolver um erro ao cliente. É devolvido um erro HTTP 504 se o limite de tempo for atingido antes de ser devolvida uma resposta. O limite de tempo tem de ser um valor entre 1 segundo e 30 segundos. Esta definição define a duração total de todas as tentativas de ligação de origem, incluindo origens de comutação por falha, para limitar o tempo total que os clientes têm de esperar que o conteúdo comece a ser transmitido em streaming. Apenas é usado o primeiro valor |
readTimeout | 15 segundos | A duração máxima de espera entre leituras de uma única resposta HTTP.
O valor de |
responseTimeout | 30 segundos | A duração máxima permitida para a conclusão de uma resposta. O limite de tempo tem de ser um valor entre 1 segundo e 120 segundos. A duração é medida a partir do momento em que os primeiros bytes do corpo são recebidos. Se este limite de tempo for atingido antes de a resposta estar concluída, a resposta é truncada e registada. |
Considere os seguintes exemplos:
Origin A
corresponde a pedidos para "/segments/" e tem um valor demaxAttemptsTimeout
de5s
, um valor demaxAttempts
de1
e um valor defailover_origin
deOrigin B
. O valor deconnectTimeout
está no valor predefinido de5s
. Se tentar estabelecer ligação aOrigin A
e ocorrer uma falha no prazo de 1 segundo devido a um certificado TLS inválido, tem cerca de 4 segundos para estabelecer uma ligação bem-sucedida aOrigin B
.Origin C
corresponde a pedidos para "/manifests/*", tem um valor demaxAttemptsTimeout
10s
, um valor demaxAttempts
3
efailover_origin
não está configurado. O valorconnectTimeout
está no valor predefinido de5s
. A RFC tenta estabelecer ligação aoOrigin C
até três vezes, permitindo até 10 segundos (o limite demaxAttemptsTimeout
) para estabelecer uma ligação bem-sucedida.
Tente novamente os pedidos de origem
A RFC de conteúdo multimédia suporta novas tentativas de origem, o que permite repetir pedidos sem êxito à origem. Pode especificar quantas vezes o origem atual pode ser tentado novamente antes de tentar uma origem de alternativa (se configurada).
- A RFC tenta alcançar a origem principal até ao valor
maxAttempts
configurado, que é1
por predefinição. - A RFC de multimédia tenta novamente as ligações de origem até um máximo de três vezes antes de falhar e devolver um erro HTTP
502 Bad Gateway
ao utilizador. Isto inclui quaisquer ligações de origem de comutação por falha, que contam para o limite de três. - Quando configura um recurso de origem, pode configurar uma origem principal através do campo
originAddress
e, em seguida, umfailoverOrigin
opcional. O elementofailoverOrigin
aponta para um recurso de origem diferente.
O retryConditions
para cada origem especifica que tipos de falhas acionam uma nova tentativa:
Condição | Predefinição | Descrição |
---|---|---|
CONNECT_FAILURE | ✔️ | As novas tentativas em caso de falhas incluem erros de encaminhamento, DNS e handshake TLS, bem como tempos limite de TCP/UDP. |
HTTP_5XX | Tentar novamente em qualquer código de estado HTTP 5xx . |
|
GATEWAY_ERROR | Semelhante a 5xx , mas aplica-se apenas aos códigos de estado
502 , 503 ou 504 . |
|
RETRIABLE_4XX | Tente novamente para códigos de estado 4xx que podem ser repetidos, incluindo 409 e 429 . |
|
NOT_FOUND | Volte a tentar com um código de estado HTTP 404 . |
|
FORBIDDEN | Volte a tentar com um código de estado HTTP 403 . |
Se precisar de verificações de estado ativas, round robin ou encaminhamento com reconhecimento de carga em várias origens, pode configurar um Application Load Balancer externo como a origem principal.
Comportamento de comutação por falha
A tabela seguinte descreve como funciona a comutação por falha e que resposta um cliente observaria:
Cenário | Failover configurado | Estado visível para o utilizador |
---|---|---|
A RFC tenta estabelecer ligação à sua origem e não recebe nenhuma resposta HTTP após duas tentativas (predefinição). | Não | HTTP 502 Bad Gateway |
O RFC tenta estabelecer ligação à sua origem principal e não consegue estabelecer ligação (erro de handshake TLS). É feita uma tentativa contra a origem de alternativa configurada, que devolve um erro HTTP 404 .
|
Sim | HTTP 404 Not Found |
A RFC tenta estabelecer ligação à sua origem principal e de failover, mas não recebe nenhum código de estado HTTP. | Sim | HTTP 502 Bad Gateway |
Se a RFC receber um código de estado correspondente a qualquer um dos
retryConditions
configurados, como um erro HTTP 404 Not Found
ou HTTP 429 Too Many
Requests
, e as tentativas subsequentes de repetição e de comutação por falha de pedidos de origem continuarem a
falhar, é devolvido um erro HTTP 502 Bad Gateway
ao cliente após esgotarem-se as tentativas de
origem.
Práticas recomendadas para a comutação em caso de falha da origem
Quando configurar várias origens para a comutação por falha ou o equilíbrio de carga, verifique se o conteúdo multimédia e os comportamentos dos cabeçalhos Vary
, ETag
e Last-Modified
são consistentes entre as origens.
Como prática recomendada, configure o redirecionamento de origem apenas para origens fidedignas
e que controla. Certifique-se de que confia em todas as origens numa cadeia de redirecionamentos, porque cada origem produz conteúdo publicado pelo seu EdgeCacheService
.
O que se segue?
- Configure uma origem
- Use um contentor privado compatível com o Amazon S3 como uma origem
- Configure rotas de serviço