Como faço para solucionar problemas e reduzir o aumento da latência do CloudFront

Pequena descrição

Para solucionar problemas de latência do CloudFront, primeiro identifique quais dos seguintes eventos estão contribuindo para a latência:
– O tempo necessário para solicitações entre o cliente e os localizações do CloudFront Edge. Isso inclui o processo de pesquisa do sistema de nomes de domínio (DNS) e negociações TCP e SSL/TLS.
– O tempo necessário para solicitações entre Cloudfront e a origem. Isso inclui o processo de pesquisa de Origin DNS, negociações TCP e SSL/TLS com a origem e tempo gasto pela origem para processar e responder com um objeto.
Em seguida, siga as etapas de solução de problemas para os eventos identificados para reduzir a latência.

Resumo do artigo

O artigo discute a experiência do autor na construção de um aplicativo da web de alto desempenho com o uso de serviços da Web da Amazon (AWS) e se concentra especificamente na redução da latência do CloudFront. O autor explica o fundo do projeto, explorando várias maneiras de alcançar baixa latência e a arquitetura usada.
O autor enfatiza a importância da consistência eventual e discute o desafio de retornar os primeiros resultados aos consumidores enquanto agrega os resultados restantes de diferentes fornecedores. A equipe utiliza chamadas assíncronas e AWS Elasticache para Redis alcançar esse objetivo.
No lado da infraestrutura, o autor escolheu o AWS Elastic Container Service (ECS) para escalabilidade e Amazon Cloudfront para alta disponibilidade. CloudFront atua como uma segunda camada de cache em cima do AWS ElasticaChe para Redis. O artigo fornece um diagrama geral de arquitetura da AWS para ilustrar o sistema.
Para garantir alta disponibilidade e escalabilidade, o serviço automático para o serviço ECS foi implementado. O balanceador de carga do aplicativo detecta tarefas saudáveis ​​de Fargate, encerra tarefas prejudiciais e lança novas tarefas para substituí -las. O uso de zonas de disponibilidade múltiplas garante que o aplicativo continue funcionando, mesmo que uma zona de disponibilidade fique indisponível.
O autor conduziu testes de carga usando o JMeter e comparou a latência entre o balanceador de carga do aplicativo e o CloudFront. Os resultados mostraram uma diminuição significativa na latência ao usar o CloudFront, juntamente com uma taxa de erro de 0%.
Em conclusão, o autor considera o projeto recompensador e fornece feedback da lealdade ascenda sobre a arquitetura implementada. O artigo termina com um convite para ver uma demonstração do aplicativo.

Perguntas e respostas

1. Quais são alguns eventos que podem contribuir para o aumento da latência do CloudFront?

Durante o processo de solução de problemas, os seguintes eventos devem ser considerados:
– O tempo necessário para solicitações entre o cliente e os locais do CloudFront Edge, incluindo o processo de pesquisa do DNS e as negociações TCP e SSL/TLS.
– O tempo necessário para solicitações entre Cloudfront e a origem, incluindo o processo de pesquisa de origem DNS, as negociações TCP e SSL/TLS com a origem e o tempo gasto pela origem para processar e responder com um objeto.
2. Como posso solucionar problemas e reduzir a latência do Cloudfront?

Para solucionar problemas e reduzir a latência do CloudFront, siga estas etapas:
– Identifique qual dos eventos mencionados acima estão contribuindo para a latência.
– Para cada evento, analise e otimize os respectivos processos. Por exemplo, verifique se a pesquisa eficiente do DNS, minimize o número de viagens redondas de TCP ou SSL/TLS e otimize o tempo de resposta de origem.
– Use ferramentas de monitoramento e registro do CloudFront para coletar dados e obter informações sobre o desempenho de sua distribuição.
– Revise regularmente e refine suas configurações CloudFront para garantir o desempenho ideal.
3. Qual é a importância da consistência eventual no aplicativo?

O aplicativo requer consistência eventual para obter alta disponibilidade sem sacrificar a tolerância à partição. A consistência estrita não seria viável devido ao teorema de Brewer (teorema do CAP), que afirma que é impossível garantir consistência, disponibilidade e tolerância à partição simultaneamente em um sistema distribuído. Ao escolher a consistência eventual, o aplicativo pode fornecer os primeiros resultados aos consumidores rapidamente, enquanto agrega os resultados restantes.
4. Como a equipe agrega resultados de vários fornecedores de hotéis?

A equipe utiliza chamadas assíncronas para os vários fornecedores de hotéis. Isso permite que eles retornem os primeiros resultados aos consumidores enquanto agregam gradualmente os resultados restantes em segundo plano. O AWS Elasticache para Redis também é usado para cache os resultados, aumentando ainda mais o desempenho.
5. Qual é o objetivo de usar o AWS Elastic Container Service (ECS) na arquitetura?

O AWS Elastic Container Service (ECS) é usado para garantir a escalabilidade no aplicativo. O uso de contêineres permite fácil gerenciamento e implantação do aplicativo, e a autocaling é implementada para lidar com a carga de tráfego, dimensionando os serviços de back -end de acordo.
6. Como a Amazon CloudFront fornece alta disponibilidade?

Amazon Cloudfront atua como uma segunda camada de cache no topo do AWS Elastache para Redis. Ele serve como uma rede de entrega de conteúdo (CDN) que armazena em cache e entrega o conteúdo da localização da borda mais próxima ao usuário final. Isso ajuda a reduzir a latência e garante que o aplicativo estático de reação JS hospedado no S3 permaneça altamente disponível.
7. Quais são os benefícios de usar o Autoscaling no Serviço ECS?

Autocaling garante que o aplicativo possa lidar com a demanda atual, provisionando a quantidade certa de recursos e capacidade. Ele permite que os serviços de back-end escalem automaticamente, tornando-os tolerantes a falhas e econômicos.
8. Como o balanceador de carga do aplicativo garante a saúde das tarefas de Fargate?

O balanceador de carga do aplicativo usa um terminal de verificação de saúde nos serviços de back -end para determinar a saúde das tarefas de Fargate. Se o terminal de verificação de saúde não estiver alcançável, considera a tarefa prejudicial à saúde, desregira -o do grupo -alvo, encerra -o e lança uma nova tarefa para substituí -lo. Isso garante que o aplicativo permaneça disponível, mesmo que uma zona de disponibilidade fique indisponível.
9. Que benefícios o CloudFront oferece em comparação com o balanceador de carga do aplicativo?

No teste de carga realizado, as solicitações feitas ao CloudFront mostraram uma diminuição significativa na latência em comparação com o balanceador de carga do aplicativo. O CloudFront atua como um CDN e ajuda a armazenar em cache e fornecer conteúdo de locais de borda mais próximos do usuário final, resultando em melhor desempenho e latência reduzida.
10. Como o autor descreve sua experiência trabalhando no projeto?

O autor descreve o projeto como assustador, especialmente para iniciantes na AWS. No entanto, também foi gratificante ver a implementação bem -sucedida e os resultados surpreendentes alcançados.

Como faço para solucionar problemas e reduzir o aumento da latência do CloudFront

З знайй, к к помомщю Amazon Cloudfront надиить дооаgua.

Alcançando baixa latência com a Amazon Cloudfront

Construindo um aplicativo da Web com alta disponibilidade e eventual consistência

Publicado em

4 min de leitura

23 de maio de 2021

Fundo

Este foi um projeto que fiz recentemente na primeira metade de 2021. Foi uma colaboração com a lealdade ascenda, onde minha equipe teve a tarefa de construir um aplicativo de alto desempenho com o uso dos Serviços da Web da Amazon (AWS). Os requisitos de aplicativos são que ele deve ser altamente escalável e disponível enquanto atinge a eventual consistência.

É importante mencionar a consistência eventual e não a consistência estrita, pois era praticamente impossível obter alta disponibilidade e consistência estrita sem sacrificar a tolerância à partição. Isto é devido a Brewer’teorema (teorema do cap).

Com relação ao aplicativo, sua principal função seria agregar resultados de diferentes fornecedores de hotéis e exibir resultados com baixa latência para os consumidores (que usam o aplicativo). À medida que nosso aplicativo se conecta a vários fornecedores de hotéis com pontos de extremidade diferentes e, portanto, diferentes tempos de latência, variando de 2 segundos a 20 segundos, também é um desafio garantir que retornemos os primeiros resultados aos consumidores primeiro e forneçam os melhores resultados eventualmente.

Exploração

Nossa equipe explora várias maneiras pelas quais podemos atender a este requisito. Consideramos vários serviços que podemos usar na AWS, padrões de design e padrões de comunicação. No lado da programação, agregamos os resultados usando chamadas assíncronas para os múltiplos fornecedores, para que possamos fornecer aos nossos consumidores resultados primeiro enquanto agrega lentamente os resultados restantes. Meu companheiro de equipe fez um bom artigo sobre isso aqui, onde também utilizamos o AWS Elasticache para Redis.

Amazon Web Services (AWS)

Do lado da infraestrutura, nossa equipe decidiu usar o AWS Elastic Container Service (ECS) para cumprir o requisito escalável e o Amazon CloudFront para garantir alta disponibilidade. Amazon Cloudfront também atua como uma segunda camada de cache em cima dos resultados que foram armazenados em cache no AWS Elasticache para Redis.

Este é o nosso diagrama geral de arquitetura da AWS.

Do diagrama acima, também fica claro que o Amazon CloudFront forneceu alta disponibilidade ao nosso aplicativo estático de reacto js web que é armazenado no balde S3. O armazenamento AWS S3 tem durabilidade de dados de 99.9999999999% devido à construção de regiões, portanto a página estática hospedada no S3 provavelmente não será baixa. Além disso, o versão foi ativado no balde S3 contendo a página estática da web, impedindo que as excluídas acidentais, permitindo -nos preservar, recuperar e restaurar todas as versões de um determinado objeto.

Para garantir a alta disponibilidade e escalabilidade do aplicativo, o serviço automático para o serviço ECS foi implementado. Isso garante que os serviços de back-end sejam tolerantes a falhas e possam lidar com a carga de tráfego, dimensionando-se adequadamente (dependendo do tráfego).

O balanceador de carga do aplicativo detecta se as tarefas de Fargate forem saudáveis ​​usando o terminal de verificação de saúde nos serviços de back -end. Se o terminal de verificação de saúde não for alcançado, consideraria a tarefa prejudicial à saúde, o desrespeitaria do grupo -alvo, encerraria a tarefa e lançaria uma nova tarefa para substituí -la. Ao implantarmos o serviço ECS em várias zonas de disponibilidade, se uma zona de disponibilidade estivesse indisponível, haverá casos nas outras zonas de disponibilidade que manteriam o aplicativo em execução. Mais tarefas serão lançadas automaticamente, dependendo do tráfego. Através do uso da autocaling, garantimos que apenas a quantidade certa de recursos e capacidade seja provisionada para lidar com a demanda atual, economizando custos a longo prazo.

Resultados

Usamos o JMeter para carregar o teste de nosso aplicativo, com 500 usuários e 1 aumento, apontando para os dois pontos de extremidade diferentes (balanceador de carga do aplicativo e CloudFront). Olhando para os resultados, podemos ver que as solicitações feitas ao CloudFront são muito melhores com uma enorme diminuição na latência (~ 80% de redução na latência). A taxa de erro também foi surpreendentemente 0%. Isso deve ser devido ao recurso de alta disponibilidade e escala automática do AWS ECS.

Remover

Embora esse projeto tenha sido assustador especialmente para nós iniciantes na AWS, foi certamente gratificante poder ver esses tipos de resultados surpreendentes, o que significa que nossa implementação foi boa e louvável.

Alguns comentários fornecidos sobre nossa arquitetura pela Ascenda Lealty:

“Hospedagem de front -end em S3 -> boa ideia. Parece que eles’está construindo um verdadeiro spa”

Se você estiver interessado no que realizamos, pode ver uma demonstração de nossa aplicação aqui!

Obrigado pela leitura: D

Como faço para solucionar problemas e reduzir o aumento da latência do CloudFront?

Estou vendo um aumento da latência nas respostas da Amazon Cloudfront. Como posso identificar a causa e reduzir a latência?

Pequena descrição

Para solucionar problemas de latência do CloudFront, primeiro identifique quais dos seguintes eventos estão contribuindo para a latência:

  • O tempo necessário para solicitações entre o cliente e os localizações do CloudFront Edge. Isso inclui o processo de pesquisa do sistema de nomes de domínio (DNS) e negociações TCP e SSL/TLS.
  • O tempo necessário para solicitações entre Cloudfront e a origem. Isso inclui o processo de pesquisa de Origin DNS, negociações TCP e SSL/TLS com a origem e tempo gasto pela origem para processar e responder com um objeto.

Em seguida, siga as etapas de solução de problemas para os eventos que estão causando mais latência.

Resolução

Identifique os eventos que causam latência no CloudFront:

Para identificar quais eventos estão causando latência do CloudFront, faça um dos seguintes:

  • Execute o seguinte comando curl:

Curl -w "dns_resolution: %| tcp_negotiation_time: %| ssl_negoTiation_time: %| ttfb: %| tempo total: %\ n" -o/dev/null -vsl https: // www.exemplo.com

Observação: Substituir exemplo.com seu nome de domínio CloudFront ou nome de domínio alternativo (CNAME) e Path URL.

  • Verifique quanto tempo cada estágio de uma solicitação de rede leva as ferramentas do desenvolvedor do seu navegador da web. Por exemplo, se você estiver usando o Mozilla Firefox, a guia de tempo fornece essas informações.

Com base no TOMENTO DO TEMPO Para cada evento ou solicitação, consulte a seção de resolução relacionada neste artigo.

Se você observou latência no passado, verifique os campos TOMENTO DO TEMPO e Time-to-First-Byte nos logs de acesso ao CloudFront. Os logs de acesso ao CloudFront não registram o tempo gasto pelo cliente para o processo de pesquisa DNS e negociações TCP e SSL/TLS

Redução da latência na resolução do DNS

  • Aumentar o tempo de cache de DNS no DNS do lado do cliente.
  • Aumente o Hora de viver (TTL) do cache no servidor DNS local.
  • Aumente o Ttl no registro do DNS em seu registrador/provedor DNS.
  • Se o resolvedor Servidor dns Do seu provedor de serviços de Internet está causando latência e considere o uso de servidores Public DNS.

Redução de latência no TCP e SSL/TLS - tempo de negociação

  • Verifique sua largura de banda de rede local e largura de banda da Internet.
  • Verifique se há alguma interrupção de rede no seu provedor ou roteador de servidor de internet.
  • Otimize o desempenho da sua rede local por meio de seu provedor de serviços de Internet ou rotas de rede.
  • Confirme que você está usando o resolvedor DNS correto que permite que seu navegador da web encontre o local pop mais próximo e correto.
  • Para melhorar o desempenho do site HTTPS, mantenha sua cadeia de certificação curta.
  • A latência pode ser causada por um firewall, proxy ou roteador local. Para determinar qual destes está causando latência, execute o seguinte comando MTR do seu sistema. Consulte o diagnóstico de problemas de rede com o MTR para obter mais informações.

Exemplo de mtr -rw.com--não-dns

Observação: Substituir exemplo.com com seu nome de domínio.

Reduzindo a latência no tempo necessário para o primeiro byte (TTFB) e o tempo total gasto (TTL)

Se o CloudFront retornar "X-Cache: Hit From CloudFront"

O CloudFront retorna "X-Cache: Hit From CloudFront" quando os pedidos são servidos no local da borda mais próxima. Para reduzir a latência:

  • Ligue a compressão automática do CloudFront para compactar arquivos e aumentar a velocidade de download.
  • Use cache local ou de navegador para reduzir as solicitações ao CloudFront. Especifique o cabeçalho do controle de cache nos arquivos para instruir os navegadores da web a manter o conteúdo do site na memória do navegador ou no disco local por um certo período de tempo. Para obter mais informações sobre os cabeçalhos de controle de cache, consulte Especificando a quantidade de tempo que o CloudFront Caches Objects.

Se o CloudFront retornar "X-Cache: Miss From Cloudfront"

Se o CloudFront retornar. Para reduzir a latência:

  • Reduza o tempo de ida e volta (RTT) entre o local da borda do CloudFront e o local da sua origem. Se uma solicitação de uma localização na borda do CloudFront for para o local de origem mais próximo, o RTT será menor. No entanto, o TTFB é afetado se a solicitação for de um local de borda geograficamente distante da origem. Para otimizar o RTT, replique o servidor de origem em várias regiões que estão geograficamente mais próximas de seus usuários. Em seguida, configure o DNS do seu nome de domínio de origem para que ele direcione a solicitação para servidores de origem com base em latência ou geolocalização. Se você estiver usando a Amazon Route 53 como seu provedor de DNS, consulte a escolha de uma política de roteamento para obter mais informações.
  • Ligue a compressão automática do CloudFront para compactar arquivos e reduzir a velocidade de download. Se o formato do seu arquivo não for suportado pelo CloudFront Automatic Compress Codificação de conteúdo cabeçalho.
  • Verifique a latência da origem para o CloudFront, permitindo a métrica de latência de origem. Observação: As taxas padrão do CloudWatch se aplicam.
  • Ligue o CloudFront Origin Shield.
  • Adicione políticas de cabeçalhos de resposta com o recurso de cabeçalho de tempo do servidor ligado ativado. Esse recurso pode ajudá -lo a entender os eventos que estão contribuindo para a latência entre o CloudFront e a origem.

Reduza a latência para usuários finais com APIs de várias regiões com o CloudFront

À medida que as organizações crescem, geralmente devem servir aos usuários geograficamente dispersos com baixa latência, levando -lhes a ter uma infraestrutura global distribuída na nuvem. Neste artigo, descrevemos como implantar pontos de extremidade global da API para reduzir a latência para usuários finais enquanto aumentam um aplicativo’D disponibilidade.

Ao usar a rede global da AWS e a Amazon CloudFront para implantar aplicativos em várias regiões da AWS, as organizações podem permitir que seus usuários se conectem a um endpoint da API na região com a menor latência à solicitação da API’S origem, ao acessar dados que são mantidos automaticamente sincronizados entre regiões em tempo real.

Para explicar a solução para desenvolvedores de API do GraphQL, fornecemos uma arquitetura usando AWS AppSync. Essa arquitetura depende de um conjunto de componentes para suportar cenários ativos/ativos de várias regiões, a saber: Cloudfront, Amazon Route 53, AWS Certificate Manager (ACM) e AWS Lambda@Edge.

Para o GraphQL, este artigo complementa o post anterior Multi Region IMPLAÇÃO DO AWS APPSYNC com tabelas globais da Amazon DynamoDB, explicando como transformar uma solução global ativa/passiva AppSync em um ativo/ativo. Além disso, fornece uma alternativa baseada em nuvem aos nomes de domínio personalizados para AWS AppSync APIs.

Se você’RE Um desenvolvedor de API REST, então você pode obter resultados semelhantes seguindo a postagem usando o roteamento baseado em latência com o Amazon CloudFront para uma arquitetura ativa ativa de várias regiões. Lá você’LL também encontra orientações sobre trade-offs de custo e complexidade que ajudarão você a pensar em considerações arquitetônicas e seu impacto na funcionalidade, resiliência e desempenho de seus aplicativos.

API GraphQL multi-region com CloudFront

Vemos as organizações cada vez mais optando por criar APIs com o GraphQL para fornecer aplicativos mais rapidamente, dando aos desenvolvedores de front-end a capacidade de consultar vários bancos de dados, microsserviços e APIs com um único final.

O seguinte diagrama de arquitetura (Figura 1) descreve como reduzir a latência para os usuários finais enquanto aumenta seu aplicativo’S Disponibilidade fornecendo pontos de extremidade grafql em várias regiões, com sincronização de dados em tempo real ativa/ativa suportada por tabelas globais da Amazon DynamoDB. Uma versão em PDF deste diagrama está disponível neste link. Para obter mais detalhes sobre como implementar a replicação do Amazon DynamoDB, leia a implantação da AWS AppSync com Amazon DynamoDB Tables Global Tables.

Diagrama para API GraphQL de várias regiões com CloudFront

Figura 1: Diagrama para API GraphQL de várias regiões com CloudFront

Siga as etapas a seguir para implementar a arquitetura mostrada no diagrama:

  1. Implante uma API do GraphQL em duas ou mais regiões usando a AWS AppSync e, em seguida, lide com os comandos e consultas AppSync usando os resolvedores da AWS Lambda conectados a um banco de dados de dynamoDB.
  2. Para notificar os clientes sobre alterações de dados em todas as regiões, ativar as tabelas globais do DynamoDB para manter os dados sincronizados entre as regiões e depois lidar. Para obter informações adicionais sobre como fazer isso, consulte a implantação da AWS AppSync com as tabelas globais da Amazon DynamoDB com tabelas globais.
  3. Para suportar domínios personalizados, faça o upload do domínio’SSL Certificado no ACM e anexe -o a uma distribuição em Cloudfront.
  4. Aponte seu nome de domínio para o CloudFront usando a Rota 53 como seu serviço de resolução de nome DNS.
  5. Configure uma regra de roteamento na Rota 53 para rotear seus clientes globais para a região da AWS com menos latência em sua localização.
  6. Para que seus clientes possam se autenticar perfeitamente para os pontos finais da AWS AppSync em qualquer região, usar lambda@edge para consultar a rota 53 para a melhor região para encaminhar a solicitação e normalizar a autorização, abstraindo as especificidades de cada aplicativo regional.
  7. Em seguida, os clientes em todo o mundo podem se conectar à sua API GraphQL em um único terminal disponível em locais de borda.
  8. CloudFront irá rotear perfeitamente os clientes’ solicitações à API na região com a menor latência para o cliente’S Localização.

Configurando o CloudFront

Aqui estão as etapas para configurar o CloudFront para a solução ativa/ativa de várias regiões neste artigo:

  • Comece criando uma distribuição genérica simples em nuvem (veja como aqui).
  • A origem da distribuição não é’t relevante para o estado final de nossa solução, pois será substituído pelos terminais da API. No entanto, deve ser resolvido para que a função Lambda@Edge seja invocada. Por exemplo, você pode usar aws.Amazonas.com como sua origem.
  • Por simplicidade, a solução descrita neste post implementa um URL personalizado seguro, começando com o Global-Api . Por exemplo, se seu domínio personalizado é um exemplo.com, então a API ativa/ativa está disponível em https: // global-api.exemplo.com . Para apoiá -lo, adicione seu nome de domínio alternativo (e.g., Global-api.exemplo.com) para sua distribuição em nuvem (veja como aqui).

Na sua distribuição CloudFront, edite o comportamento e defina os seguintes valores da propriedade:

  1. Mudar “Métodos HTTP permitidos” para “ Obtenha, cabeça, opções, coloque, poste, patch, exclua ” - Isso permitirá as solicitações de postagem necessárias para lidar com consultas grafql.
  2. Mudar “Política de cache” para “ CachingDisabled ” - Isso removerá qualquer cache para garantir que todos os pedidos sejam dinâmicos.
  3. Mudar “Política de solicitação de origem” para “ AllViewer ” - Isso adicionará as informações necessárias à carga útil enviada à função Lambda@Edge.

Configurando ACM

Para implementar a solução descrita neste artigo, use a ACM para solicitar um certificado público ao seu domínio personalizado (consulte como aqui). Esta solução usa subdomínios, então você deve solicitar um certificado que suporta curingas. Por exemplo, se seu domínio for “exemplo.com”, Em seguida, solicite um certificado para lidar com os dois “exemplo.com” e “*.exemplo.com”.

Depois que seu certificado estiver disponível e validado no ACM, anexe -o à sua distribuição CloudFront (consulte como aqui).

Configurando a Amazon Route53

Para implementar a solução descrita neste artigo, crie os seguintes registros na zona hospedada da Rota 53 para o seu domínio:

  • Um recorde simples do CNAME para servir como ponto de entrada para sua distribuição em nuvem (veja como aqui).
  • Um registro com uma política de roteamento baseada em latência para configurar suas múltiplas APIs regionais (veja como aqui). Isso melhora o desempenho para seus usuários, atendendo seus pedidos da região da AWS que fornece a menor latência.
  • Um domínio personalizado para cada região (use o mesmo domínio personalizado na sua função Lambda a seguir).

Por exemplo, se seu domínio for “ exemplo.com ”, Sua distribuição em Cloudfront é “ abcdefghij.CloudFront.líquido ”, E você tem APIs nas regiões da Europa (Irlanda) e Ásia -Pacífico (Sydney), então você deve acabar com uma configuração da Rota 53 semelhante à Figura 2.

Tabela de registros na Rota 53, mostrando global-api.example.com como um cname com tráfego de roteamento de políticas de roteamento simples para abcdefghij.cloudfront.net. Latência rotening.example.com como um CNAME com roteamento baseado em latência com base no roteamento da Europa (Irlanda) para a Irlanda. Latência rotening.example.com como um CNAME com roteamento baseado em latência no roteamento da Ásia-Pacita (Sydney) para Sydney

Figura 2: Tabela de registros na Rota 53

Observe os seguintes erros comuns ao configurar a Rota 53:

  • O “Irlanda” e “Sydney” Registre os valores no exemplo acima, não’t Os URLs dos terminais da API regional. Em vez disso, essas são as chaves do dicionário definido no código Lambda@Edge que segue.
  • Os nomes dos registros de latência no exemplo acima não são’T Região específica. Em vez disso, eles’Os nomes de registros comuns que o Lambda@Edge entrará em contato com a consulta Rota 53 para a região recomendada’shave s.

Para detalhes adicionais sobre como essa configuração da Rota 53 é usada no contexto da solução, execute as etapas na seção de teste deste artigo. Isso permite que você comece a partir de uma conta AWS vazia e construa seu caminho para um ambiente multi-regional totalmente funcional que você pode testar com um vue.Aplicação JS.

Código para lambda@edge

Para implementar a solução neste artigo, crie uma função Lambda@Edge no nó.JS usando os trechos de código nesta seção como modelo (consulte como aqui).

Existem várias maneiras de implantar sua função no Cloudfront. Uma maneira simples é selecionar o “ Ações ” suspenso no editor Lambda e selecione “ Implantar para lambda@edge ”.

O código a seguir permite encontrar a região da Best AWS para uma solicitação de entrada. Ele pressupõe que você já criou uma política de roteamento na sua rota 53 nomeada “ Latência escape ”. Os resultados possíveis dessa função, considerando o exemplo na tabela da Rota 53 acima, são “Irlanda” e “Sydney”.

const dns = requer ('dns'); Deixe o bestorigin; deixe expires = 0; Seja ttl = 1; Deixe dns_host = 'Latência-rooting.exemplo.com '; função getBestregion () < console.log("inside resolver"); const now = Date.now(); if (now < expires) return Promise.resolve(bestOrigin); return new Promise((resolve, reject) => < dns.resolveCname(DNS_HOST, (err, addr) =>< bestOrigin = addr[0]; expires = now + TTL; resolve(bestOrigin); >); >); > 

O código a seguir permite mapear a região da Best AWS (conforme julgado pela Rota 53) em uma API publicada. Este código considera as configurações de exemplo da Rota 53 na tabela acima, com duas entradas da API GraphQL (uma para a Irlanda e outra para Sydney). Você deve alterar este código para corresponder às configurações de seus pontos de extremidade da API regional.

deixe regiões = []; // Use minúsculo. regiões ['Irlanda'] = < "Host": "" >; regiões ['sydney'] = < "Host": "" >; função getregionalSettings (BestRegion)

O código a seguir usa a função GetBestRegion para encontrar a melhor região da AWS (de acordo com a Rota 53), depois mapeia -a para o domínio e segredo de uma API usando a função GetRegionalSettings e, finalmente, altera os cabeçalhos da solicitação para encaminhar a solicitação para a API selecionada.

exportações.manipulador = assíncrono (evento, contexto, retorno de chamada) => < const request = event.Records[0].cf.request; let bestRegion = await getBestRegion(); let map = getRegionalSettings(bestRegion); let target_domain = map["Host"]; // Forward GraphQL subscription requests for WebSockets. request.origin.custom.domainName = target_domain; // Forward REST and GraphQL query/mutation requests. request.headers["host"] = [< key: "host", value: target_domain >]; // console.Log (`Cabeçalhos de solicitação definidos para" $ "` `)) Retorno de chamada (nulo, solicitação); >;

Fluxo de ponta a ponta

O diagrama a seguir (Figura 3) mostra o fluxo de comunicação de ponta a ponta entre a solução&rsquo;s componentes.

Ele descreve visualmente como uma solicitação de um cliente é traduzida pela primeira vez pela Rota 53 (ou qualquer outro servidor DNS) e depois enviado para a distribuição CloudFront registrada no DNS. CloudFront então valida a solicitação&rsquo;S Certificado usando ACM e, em seguida, muda a origem no terminal da API com a menor latência para o cliente, alavancando Lambda@Edge. Finalmente, a solicitação é enviada para o melhor endpoint regional da API e a API&rsquo;A resposta S é entregue de volta ao cliente pela CloudFront.

Diagrama de fluxo de mensagens

Figura 3: Diagrama de fluxo de mensagem

Testando sua solução ativa/ativa de várias regiões

No teste descrito neste artigo, você&rsquo;Usarei as mesmas regiões da Irlanda e Sydney que foram usadas na configuração de amostra anterior da Rota 53. As etapas de teste assumem que você&rsquo;já realizou as etapas anteriores mencionadas neste artigo&rsquo;s Capítulos anteriores para construir a solução de várias regiões.

Para controlar qual região você&rsquo;está atingindo durante o teste, você&rsquo;precisará de um cliente proxy da VPN ou algo semelhante. As etapas de teste deste artigo foram realizadas usando o Mullvad, um serviço comercial de VPN de código aberto com sede na Suécia.

Testando sua API de graphql ativa/ativa de várias regiões

Siga estas etapas para preparar os testes de uma solução de várias regiões em pontos de extremidade do GraphQL API.

Esta seção permite criar um ambiente de teste AppSync a partir do zero, mesmo que você não tenha experiência anterior com o AppSync. Você&rsquo;Eu usarei esse ambiente como uma pré-condição para testar as consultas e assinaturas do GraphQL nas próximas duas seções.

  1. Inicie uma amostra API GraphQL nas regiões da Irlanda e Sydney. Isso implantará um endpoint da APPSYNC totalmente funcional com um esquema de amostra suportado por um banco de dados regional de dynamoDB.
    1. Para remover qualquer dúvida sobre qual região está sendo atingida pelos testes, não&rsquo;T Ativar tabelas globais do DynamoDB-Caso contrário, siga a implantação da AWS AppSync com as tabelas globais de Amazon DynamoDB, se você deseja ativar dados transfronteiriço-regional em tempo real e replicação de assinatura. Os testes neste artigo assumem que você não&rsquo;T ativado replicação.
    1. Use a Irlanda-Appsync.exemplo.com, por exemplo, como a Irlanda&rsquo;s nome de domínio personalizado;
    2. Use Sydney-Appsync.exemplo.com, por exemplo, como Sydney&rsquo;s nome de domínio personalizado;
    3. Certifique -se de associar a API ao nome de domínio personalizado.

    regiões ['Irlanda'] = < "Host": ".cloudfront.net" >; regiões ['sydney'] = < "Host": ".cloudfront.net" >;

    1. Para fins de teste, crie uma função de autoridade lambda simples para suas APIs grafql usando o seguinte nó.JS Código de amostra e implantá -lo em ambas as regiões. Esta função aceitará a string &ldquo; Autorizado personalizado &rdquo; como o único token de autorização válido. Observe que os tokens de autenticação codificados&rsquo;T uma boa prática, e nós&rsquo;estou usando -o aqui para simplificar a simplicidade. Em vez disso, considere armazenar seus tokens no AWS Secrets Manager.

    exportações.manipulador = assíncrono (evento) => < const < authorizationToken >= retorno do evento < isAuthorized: authorizationToken === 'custom-authorized', resolverContext: <>>; >; 

    1. Configure a função Autorizador de Lambda como o autorizador padrão para os pontos de extremidade da API AppSync regional (veja como aqui) e remova todas as chaves da API da configuração AppSync. Isso disponibilizará a API publicamente com um token simples enquanto executa o teste, facilitando a execução dos testes. No entanto, a menos que seja exatamente isso que você deseja, recomendamos que você olhasse para todas as opções disponíveis para proteger suas Apis AppSync.
    2. Crie uma mutação na região da Irlanda para adicionar um exemplo de registro (consulte esta página para obter mais informações):
      1. Navegue para a Irlanda&rsquo;S AWS AppSync Console.
      2. Navegue para a Irlanda&rsquo;S API APPSYNC que você criou em uma etapa anterior.
      3. Selecione a guia Consultas no lado esquerdo.
      4. No campo de token de autorização, digite personalizada personalizada (como no autor do Lambda).
      5. Execute o seguinte comando de mutação:
        mutação createevent < createEvent( name: "Ireland" when: "" where: "" description: "" ) < id name >>

      Assumindo que você&rsquo;já configurei seu global-api.exemplo.com redirecionamentos usando as etapas deste post, então que&rsquo;sentar! Você&rsquo;estou pronto para testar seu terminal AppSync de várias regiões.

      Testando suas consultas grafql ativas/ativas de várias regiões

      Assumindo que você&rsquo;Já seguiu as etapas necessárias para construir um ambiente de teste AppSync de várias regiões do zero, conforme explicado na seção anterior, siga estas etapas para testar a solução de várias regiões com consultas grafql.

      1. No seu cliente VPN, configure uma conexão com um servidor VPN próximo à Irlanda (e.g., Londres, Reino Unido).
      2. Consulte a API com um comando Curl semelhante ao seguinte para mostrar os dados da amostra, substituindo o nome de domínio por seu próprio e passando o token de autorização permitido pelo autorizador Lambda.
        $ curl -xpost -h "autorização: personalizada" -d ' < "query": "query < listEvents < items < name >>> "> 'https: // global-api.exemplo.com/grafql/
      3. Confirme que a resposta do CLL é
        < "data": < "listEvents": < "items": [ < "name": "Ireland" >] >>>
      4. No seu cliente VPN, configure uma conexão com um servidor VPN próximo a Sydney (e.g., Melbourne, Austrália).
      5. Execute o comando curl novamente - a resposta agora deve ser
        < "data": < "listEvents": < "items": [ < "name": "Sydney" >] >>>

      Como você pode ver, executar o comando Curl de diferentes locais do mundo faz com que um terminal de aplicativos diferente responda, embora você&rsquo;está atingindo o mesmo ponto de extremidade da API GraphQL Multi-Region.

      Testando suas assinaturas de graphql ativo/ativo de várias regiões

      Para testar as assinaturas do GraphQL, siga estas etapas para testá -las usando o WebSockets.

      Esta seção também assume que você&rsquo;já seguiu as etapas necessárias para construir um ambiente de teste AppSync multi-region do zero, conforme explicado na seção anterior.

      A abordagem de teste a seguir usa o Postman, um aplicativo que permite interagir com APIs usando post, get e websockets. A sequência de etapas usadas no teste a seguir é baseada nas instruções da construção de um cliente WebSocket em tempo real para AWS AppSync.

      1. Crie uma carga útil de handshake para enviar ao abrir a conexão WebSocket. Na sua ferramenta de linha de comando, execute o seguinte comando, substituindo o nome de domínio por seu próprio e usando o token definido no autorizador Lambda. O resultado deve ser uma corda baseada em Base64-salve esta string em um bloco de notas porque você&rsquo;Eu precisará disso mais tarde para o Postman&rsquo;S Configuração.
        $ echo '' | base64
      2. No Postman, crie uma nova conexão Websocket seguindo as instruções nesta página. Você poderá fazer isso selecionando o novo botão e selecionando o botão Websocket Solicy.
      3. Na caixa URL do servidor, digite o seguinte URL, certificando -se de substituir seu nome de domínio:
        wss: // global-api.exemplo.com/grafql/real em tempo real
      4. Na seção Params, adicione os seguintes parâmetros:
        1. Chave: Carga Paga, Valor: E30 = (Isso é o mesmo que vazio <>)
        2. Chave: Cabeçalho, Valor: (A sequência BASE64 que você criou na primeira etapa)
        1. Chave: Sec-Websocket-Protocol, Valor: GraphQL-WS
        1. Verifique se a conexão foi estabelecida procurando por Postman&rsquo;s Label verde conectado na seção Mensagens e, ao procurar o WSS: //. mensagem na mesma seção.

        < "id":"test", "payload": < "data": "", "extensions": < "authorization": < "Authorization":"", "host": "", > >>, "Type": "Start">

        inscrição < subscribeToEventComments(eventId: "Ireland") < content >>

        1. Verifique se a assinatura foi criada com sucesso procurando a mensagem Start_ack Response no Postman&rsquo;S seção de mensagens. Para a mensagem de assinatura acima, a resposta deve ser .

        mutação < commentOnEvent( content: "test-comment", createdAt: "2000-01-01", eventId: "Ireland" ) < commentId eventId createdAt content >>

        Como você pode ver, mutações realizadas em uma região (e.g., Irlanda) acionar as assinaturas conectadas a essa região. Para uma única mutação regional para acionar as assinaturas de clientes em todas as regiões (e.g., Irlanda e Sydney), você deve configurar a replicação da região com propagação de mutação. Siga a implantação de Post Multi Region do AWS AppSync com tabelas globais da Amazon DynamoDB para aprender a fazer isso.

        Construindo um aplicativo Amplify para testar sua API GraphQL multi-region

        Agora que você&rsquo;está confiante de que sua API grafql ativa/ativa de várias regiões está funcionando para consultas e assinaturas, você pode aproveitar a AWS amplify para criar um cliente de teste para a API.

        Neste artigo, usamos Vue.JS com Amplify JavaScript para criar um aplicativo cliente simples, mas o Amplify Bibliotecas também oferece suporte a clientes iOS, Android e Flutter, fornecendo assim os mesmos recursos nesses diferentes tempos de execução. Os clientes da Amplify suportados fornecem abstrações simples para interagir com os backends APPSYNC GraphQL API com poucas linhas de código, incluindo recursos internos do WebSocket totalmente compatíveis com o protocolo AppSync WebSocket em tempo real.

        Siga esta sequência de etapas para criar seu aplicativo de teste.

        1. Certifique -se de ter um nó.JS instalado - você precisa para a próxima etapa.
        2. Crie uma vue.JS Amplify Application na região da Irlanda executando essas etapas.
        3. Conecte seu aplicativo à Irlanda&rsquo;s api.
          1. Execute o seguinte comando para vincular seu aplicativo à Irlanda&rsquo;s AppSync endpoint, substituindo o e o:
            Amplify Add CodeGen --Apiid --Profile
          2. Execute o seguinte comando para gerar o código associado para consultas e assinaturas:
            amplificar o códigogen
          1. Execute o NPM Run Service em sua ferramenta de linha de comando.
          2. Verifique se não há&rsquo;t todos os erros.
          3. Navegue para http: // localhost: 8080/ - você deve ver o vue padrão.Aplicação JS.

          LISTEVENTS (FILTER: $ FILTER, LIMIT: $ LIMIT, NEXTTOKEN: $ NEXTTOKEN) < items < id name where when description comments < items < content commentId >>> NextToken>

             

          1. Execute o NPM Run Service em sua ferramenta de linha de comando.
          2. Verifique se não há&rsquo;t todos os erros.
          3. Navegue para http: // localhost: 8080/ - Agora você deve ver listado o evento da Irlanda criado anteriormente em seus testes, independentemente de onde no mundo você&rsquo;está executando o aplicativo. Isso é porque você&rsquo;estar conectado diretamente à Irlanda&rsquo;s endpoint regional.
          4. Antes da próxima etapa, copie o evento da Irlanda&rsquo;s ID para um bloco de notas (este é um Uuid aleatório de 36 caracteres).

          mutação < commentOnEvent( content: "test-comment", createdAt: "2000-01-01", eventId: "" ) < commentId eventId createdAt content >>

          1. Modificar o SRC/AWS-Exports.Arquivo JS, alterando o valor do parâmetro AWS_APPSYNC_GRAPHQLENDPOND da Irlanda&rsquo;s API endpoint para o seu ponto de entrada global (e.g., https: // global-api.exemplo.com/grafql).
          2. O aplicativo deve atualizar automaticamente, listando o item da Irlanda ou o item de Sydney, dependendo de onde você está no mundo.

          Testando seu aplicativo Amplify contra sua API GraphQL Multi-Region

          Siga estas etapas para testar seu terminal API GraphQL multi-region com um aplicativo Amplify.

          1. No seu cliente VPN, configure uma conexão com um servidor VPN próximo a Sydney (e.g., Melbourne, Austrália).
          2. Navegue para o seu aplicativo Amplify em um navegador da web (e.g., http: // localhost: 8080). Agora você deve ver listado o evento de Sydney criado anteriormente em seus testes.
          3. Execute um comando de mutação para adicionar um comentário no evento de Sydney da mesma maneira que você.
          4. Verifique se o novo comentário apareceu automaticamente no seu aplicativo, logo abaixo do evento de Sydney.

          Como você pode ver, seu aplicativo atinge perfeitamente o ponto de extremidade da API AppSync mais próximo, tanto para consultas quanto de assinaturas, enquanto está conectado a um único terminal global da API.

          Limpar

          Para limpar a infraestrutura criada, exclua as APIs AppSync, a distribuição CloudFront, a função Lambda@Edge e os registros Route53 que você criou para este teste.

          Conclusão

          Neste post, descrevemos como reduzir a latência para os usuários finais, enquanto aumentam um aplicativo&rsquo;S disponibilidade, fornecendo pontos de extremidade da API em várias regiões da AWS.

          A solução aproveita o CloudFront, a Rota 53 e o ACM para apoiar sua API global&rsquo;s Nome de domínio personalizado e usa Lambda@Edge para encaminhar solicitações recebidas para o melhor ponto final da API com base na latência da rede ao solicitante.

          Para explicar a solução para os desenvolvedores da API do GraphQL, fornecemos uma explicação detalhada da arquitetura de referência que você pode baixar como um PDF aqui. Se você&rsquo;RE Um desenvolvedor de API REST, então você pode obter resultados semelhantes seguindo a postagem usando o roteamento baseado em latência com o Amazon CloudFront para uma arquitetura ativa ativa de várias regiões.

          Para manter os testes simples, não fizemos&rsquo;T ativar a replicação de dados transversal. Se você&rsquo;D Gostaria de construir um ponto de extremidade grafql ativo/ativo de várias regiões com dados transfronteiriça e replicações de assinatura e, em seguida.

          Aaron Sempf

          Aaron Sempf é um arquiteto de soluções de parceiros principais globais, na equipe global de integradores de sistemas. Quando não está trabalhando com os parceiros da AWS GSI, ele pode ser encontrado codificando protótipos para robôs autônomos, dispositivos IoT e soluções distribuídas.

          Fernando Ibanez

          Fernando Ibanez é um arquiteto de soluções da Carolina do Norte na equipe de ensino superior. Fernando gosta de ajudar os clientes a projetar e implementar soluções de automação para simplificar seu uso de nuvem. Em seu tempo livre, Fernando gosta de ir ao teatro, experimentar novas cozinhas e passar um tempo com sua família.

          Jorge Fonseca

          Jorge é um arquiteto de soluções com mais de 20 anos, com 2 mestrado e todas as certificações da AWS. Na AWS, ele ajuda os clientes através de suas jornadas em nuvem convertendo desafios complexos em roteiros acionáveis ​​para o público técnico e de negócios.

          Ralph Richards

          Ralph é um arquiteto de soluções da Amazon Web Services com base em Londres. Ele trabalha com os clientes da Enterprise Software e SaaS como consultor técnico, ajudando -os a alcançar suas metas de negócios na nuvem. Ele também é especializado em tecnologias de contêineres, com um grande interesse em construir aplicações modernas usando uma abordagem de microsserviços. Fora do trabalho, ele gosta de fotografar, ler e explorar novos lugares em viagens.

          Доставляйте контент быстро, с низкой задержкой и высокой скоростью передачи

          Amazon CloudFront – это сервис сети доставки контента (CDN), созданный для высокой производительности, безопасности и удобства разработчиков.

          Примеры иоо sentido

          Предооeirтлйййте ыыitivamente

          Х х х х х х х х х х х х х х х хзййй ззз зззи пзии пзии пзз п п хз п х хз з х хз ззntas лений и шndereD da.

          Ссо sentido дооасаав динамичutos

          Тимзирйййй оййамччч очесесоitivamente диинntas-д- дииччента пощ вццц ês т п land п п п к кe к п п п кe к п land п п п к к кeд п п land п п п к кeт п п land п п п land п п п кeт п п land п п п кeт п п кes п п п кe к п п пe к п п land п п п кWs.

          Пото sentido п педача иед в в ж п пчееееачаччееж в nch в жжимж и в в вееаncer ​​в в в и в пжeir иж и в вежжж land и и иж в в вчеае ижж вежжжж пачч иеа fi жж в вчеае иеа иеае иеа иеае вежж ваччч иеа иежже иеее ês

          Еератино запссgua потооncer п печачч потооncer перчч в, в произз оииии хих хюююднннomas идднннннomas т тлййй бл елйй ил блй иллй AWS Service.

          Р просс sentido иййй ирраglе и и и и ирйй ийййй иййййййййййfia

          Аттаа bust машшш mundo м машши mundo de мыыышр иии машийййййяя мшыыыыы мшййяя млыыыыыы млыыяя млыыыыыы мшыяяяы млыыыыы мшыяяяы млыыыыыыыыыяяяяяяfia. й сйи (OTA).

          Клиенты

          И ттрр клииа King

          Как начать рбоо

          Você

          Прочитаййй пррччйй ês mante и ис п пbol н н нр land н и п пbol н н н пbol н нч прй п peso.

          Начать ро п помомщщю пракичutos

          З знайй, к к помомщю Amazon Cloudfront надиить дооаgua.

          Попробййте cloudfront беелcente

          AWS AWS AWS AWS с с сон слн слнн сн слнн сннн слн снн снн сн сл сл сл сл сл сл land сл сл land ие ил land и ие с fur.

          ПодробнÉ о aws

          ПодробнÉ о aws

          • AWS?
          • Ч atraso?
          • И и и и и и и и и и и и и и и ExP
          • DevOps?
          • '?
          • Чч ponto?
          • Безопаgl нт оллла AWS
          • Но ы взжожно
          • Бitu и
          • Прvers - *

          Р сря дi рбооо с aws

          • Начало рбоыы
          • Обччч sentido и и и de março de março
          • Библиоvia к AWS
          • Ц н ахntasta
          • О о и и и и и в в в в и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и ит и и и ит и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и ив и и ив и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и и '
          • Анали bust
          • AWS

          AWS

          • Ц н ц ц ц ц ц ц ц ц ц gre
          • АаоIы Sdk и и и и и рреентарий
          • .Rede aws
          • Python aws
          • Java aws
          • Php aws
          • JavaScript AWS

          Подержа

          • Сжжите с нии
          • Полччение помомощи сециал mundo
          • Орратитья в слжж поеержжи
          • '
          • AWS RE: POST
          • AWS APORTAÇÃO AWS
          • Юридичutos и и edade
          • AWS

          Amazonas.com - рботат Qualferir. Ыы ite представителям меньшинств, женщинам, лицам с ограниченными возможностями, ветеранам боевых действий и представителям любых гендерных групп любой сексуальной ориентации независимо от их возраста.

          • Коидutos
          • |
          • Çor и и п поззз sentido
          • |
          • Параметры biscoito de ыайitu
          • |
          • © 2023 г. Amazon Web Services, Inc. и и и д и и и и и и и conside и п и €. В права защщищены.

          В б б бncha з тсааinto. Рекомендуем выполнить перейти на другой современный браузер для более комфортной работы.

          Реоncerщero подержж и пtens Explorer Internet

          AWS п Internet Explorer AWS ззаканчиае atrasa 07/31/2022. Подержиаutos брIззеры: Chrome, Firefox, Edge и Safari. ПодробнÉ &raquo;