racavedigger.com
Daily insights on Bitcoin and crypto markets
  • Facebook
  • Pinterest
  • Home
  • News

Cloudfront riduce la latenza

Notizia

Come faccio a risolvere i problemi e riduco la maggiore latenza da Cloudfront

Breve descrizione

Per risolvere la latenza da Cloudfront, prima identificare quale dei seguenti eventi contribuisce alla latenza:
– Il tempo impiegato per le richieste da passare tra il client e le posizioni di Cloudfront Edge. Ciò include il processo di ricerca del sistema di nomi di dominio (DNS) e negoziazioni TCP e SSL/TLS.
– Il tempo impiegato per le richieste per andare tra Cloudfront e l’origine. Ciò include il processo di ricerca DNS di origine, i negoziati TCP e SSL/TLS con l’origine e il tempo impiegato dall’origine per elaborare e rispondere con un oggetto.
Quindi, seguire i passaggi di risoluzione dei problemi per gli eventi identificati per ridurre la latenza.

Riepilogo dell’articolo

L’articolo discute l’esperienza dell’autore nella costruzione di un’applicazione Web ad alte prestazioni con l’uso di Amazon Web Services (AWS) e si concentra specificamente sulla riduzione della latenza da Cloudfront. L’autore spiega lo sfondo del progetto, esplorando vari modi per ottenere la bassa latenza e l’architettura utilizzata.
L’autore sottolinea l’importanza dell’eventuale coerenza e discute la sfida di restituire i primi risultati ai consumatori mentre aggregano i risultati rimanenti di diversi fornitori. Il team utilizza chiamate asincroni e AWS Elasticache per Redis per raggiungere questo obiettivo.
Sul lato dell’infrastruttura, l’autore ha scelto AWS Elastic Container Service (ECS) per la scalabilità e Amazon Cloudfront per l’alta disponibilità. Cloudfront funge da secondo livello di memorizzazione nella cache sopra AWS Elasticache per Redis. L’articolo fornisce un diagramma di architettura AWS generale per illustrare il sistema.
Per garantire un’elevata disponibilità e scalabilità, è stato implementato l’autoscaling per il servizio ECS. Il bilanciamento del carico dell’applicazione rileva compiti sani Fargate, termina compiti malsani e lancia nuovi compiti per sostituirli. L’uso di più zone di disponibilità garantisce che l’applicazione continua a funzionare anche se una zona di disponibilità diventa non disponibile.
L’autore ha condotto test di carico utilizzando JMeter e ha confrontato la latenza tra il bilanciamento del carico dell’applicazione e Cloudfront. I risultati hanno mostrato una significativa riduzione della latenza quando si utilizza CloudFront, insieme a un tasso di errore dello 0%.
In conclusione, l’autore trova gratificante il progetto e fornisce feedback dalla lealtà di Ascenda all’architettura implementata. L’articolo termina con un invito a visualizzare una demo dell’applicazione.

Domande e risposte

1. Quali sono alcuni eventi che possono contribuire ad aumentare la latenza da Cloudfront?

Durante il processo di risoluzione dei problemi, dovrebbero essere considerati i seguenti eventi:
– Il tempo impiegato per le richieste da passare tra il client e le posizioni di Cloudfront Edge, incluso il processo di ricerca DNS e i negoziati TCP e SSL/TLS.
– Il tempo impiegato per le richieste da passare tra Cloudfront e l’origine, incluso il processo di ricerca DNS di origine, le negoziazioni TCP e SSL/TLS con l’origine e il tempo impiegato dall’origine per elaborare e rispondere con un oggetto.
2. Come posso risolvere e ridurre la latenza da Cloudfront?

Per risolvere i problemi e ridurre la latenza da Cloudfront, seguire questi passaggi:
– Identificare quale degli eventi sopra menzionati contribuiscono alla latenza.
– Per ogni evento, analizza e ottimizza i rispettivi processi. Ad esempio, assicurarsi un’efficace ricerca DNS, minimizzare il numero di viaggi rotondi TCP o SSL/TLS e ottimizza i tempi di risposta alle origini.
– Utilizzare gli strumenti di monitoraggio e registrazione di CloudFront per raccogliere dati e ottenere approfondimenti sulle prestazioni della distribuzione.
– Rivedere e perfezionare regolarmente le configurazioni di Cloudfront per garantire prestazioni ottimali.
3. Qual è l’importanza dell’eventuale coerenza nell’applicazione?

L’applicazione richiede una coerenza eventuale per ottenere un’elevata disponibilità senza sacrificare la tolleranza alla partizione. Una coerenza rigorosa non sarebbe fattibile a causa del teorema (teorema del limite), che afferma che è impossibile garantire contemporaneamente coerenza, disponibilità e tolleranza alla partizione in un sistema distribuito. Scegliendo l’eventuale coerenza, l’applicazione può fornire rapidamente i primi risultati ai consumatori, aggregando i risultati rimanenti.
4. In che modo il team aggrega i risultati di più fornitori alberghieri?

Il team utilizza chiamate asincroni ai più fornitori di hotel. Ciò consente loro di restituire i primi risultati ai consumatori aggregando gradualmente i risultati rimanenti in background. AWS Elasticache per Redis viene anche utilizzato per memorizzare nella cache i risultati, migliorando ulteriormente le prestazioni.
5. Qual è lo scopo di utilizzare il servizio di contenitore elastico AWS (ECS) nell’architettura?

Il servizio di contenitore elastico AWS (ECS) viene utilizzato per garantire la scalabilità nell’applicazione. L’uso di contenitori consente una facile gestione e distribuzione dell’applicazione e viene implementata l’autoscaling per gestire il carico del traffico ridimensionando i servizi di backend di conseguenza.
6. In che modo Amazon Cloudfront fornisce un’alta disponibilità?

Amazon Cloudfront funge da secondo livello di memorizzazione nella cache sopra AWS Elasticache per Redis. Serve come una rete di consegna di contenuti (CDN) che cade e fornisce contenuti dalla posizione del bordo più vicino all’utente finale. Ciò aiuta a ridurre la latenza e garantisce che l’applicazione Web JS React statica ospitata su S3 rimanga altamente disponibile.
7. Quali sono i vantaggi dell’utilizzo di Autoscaling nel servizio ECS?

L’autoscaling garantisce che l’applicazione possa gestire l’attuale domanda fornindo la giusta quantità di risorse e capacità. Consente ai servizi di backend di scalare e uscire automaticamente, rendendoli tolleranti ai guasti ed efficienti.
8. In che modo il bilanciamento del carico dell’applicazione garantisce la salute delle attività Fargate?

Il bilanciamento del carico dell’applicazione utilizza un endpoint di controllo sanitario nei servizi di back -end per determinare la salute delle attività Fargate. Se l’endpoint del controllo sanitario non è raggiungibile, considera malsano il compito, lo deregiscia dal gruppo target, lo termina e lancia un nuovo compito per sostituirlo. Ciò garantisce che l’applicazione rimanga disponibile anche se una zona di disponibilità diventa non disponibile.
9. Quali vantaggi offre CloudFront rispetto al bilanciamento del carico dell’applicazione?

Nel test di carico condotto, le richieste effettuate a Cloudfront hanno mostrato una significativa riduzione della latenza rispetto al bilanciamento del carico dell’applicazione. Cloudfront funge da CDN e aiuta a memorizzare nella cache e fornire contenuti da posizioni di bordo più vicine all’utente finale, con conseguente miglioramento delle prestazioni e latenza ridotta.
10. In che modo l’autore descrive la loro esperienza lavorando al progetto?

L’autore descrive il progetto come scoraggiante, in particolare per i neofiti in AWS. Tuttavia, è stato anche gratificante vedere l’implementazione di successo e i risultati sorprendenti raggiunti.

Come faccio a risolvere i problemi e riduco la maggiore latenza da Cloudfront

Узнайте, как с помощью Amazon CloudFront наладить доставку контента и ускорить работу интернет-приложений для конечных пользователей.

Raggiungere la bassa latenza con Amazon Cloudfront

Costruire un’applicazione Web con alta disponibilità ed eventuale coerenza

Pubblicato in

4 minuti Leggi

23 maggio 2021

Sfondo

Questo è stato un progetto che ho fatto di recente nella prima metà del 2021. È stata una collaborazione con la lealtà di Ascenda in cui il mio team ha avuto il compito di creare un’applicazione ad alte prestazioni con l’uso di Amazon Web Services (AWS). I requisiti dell’applicazione sono che dovrebbero essere altamente scalabili e disponibili mentre si ottiene una coerenza eventuale.

È importante menzionare una coerenza eventuale e non una coerenza rigorosa in quanto praticamente impossibile ottenere sia alta disponibilità che coerenza rigorosa senza sacrificare la tolleranza alla partizione. Ciò è dovuto a Brewer’teorema S (teorema del cappello).

Per quanto riguarda l’applicazione, la sua funzione principale sarebbe aggregare i risultati da diversi fornitori di hotel e visualizzare risultati con bassa latenza ai consumatori (che utilizzano l’applicazione). Poiché la nostra applicazione si collega a più fornitori di hotel con endpoint diversi e quindi tempi di latenza diversi, che vanno da 2 a 20 secondi, è anche una sfida per garantire che restituiamo prima i primi risultati ai consumatori e forniamo i migliori risultati alla fine.

Esplorazione

Il nostro team esplora vari modi in cui possiamo soddisfare questo requisito. Abbiamo considerato vari servizi che possiamo utilizzare su AWS, modelli di progettazione e modelli di comunicazione. Dal punto di vista della programmazione, aggregiamo i risultati utilizzando chiamate asincroni ai più fornitori in modo da poter fornire ai nostri consumatori i risultati prima aggregando lentamente i risultati rimanenti. Il mio compagno di squadra ha fatto un bell’articolo su questo qui in cui utilizziamo anche AWS Elasticache per Redis.

Amazon Web Services (AWS)

Sul lato dell’infrastruttura, il nostro team ha deciso di utilizzare il servizio di contenitori Elastic (ECS) AWS per consegnare i requisiti scalabili e Amazon Cloudfront per garantire un’alta disponibilità. Amazon Cloudfront funge anche da secondo strato di memorizzazione nella cache in cima ai risultati che sono stati memorizzati nella cache in AWS Elasticache per Redis.

Questo è il nostro diagramma di architettura AWS generale.

Dal diagramma sopra, è anche chiaro che Amazon Cloudfront ha fornito un’alta disponibilità alla nostra applicazione Web JS statica che viene memorizzata nel bucket S3. AWS S3 Storage ha una durata dei dati di 99.999999999% a causa della sua costruzione intorno alle regioni, quindi la pagina web statica ospitata su S3 non sarà probabilmente inattiva. Inoltre, il versioning è stato abilitato sul secchio S3 contenente la pagina Web statica, impedendo a eliminazioni accidentali che ci consentono di preservare, recuperare e ripristinare ogni versione di un particolare oggetto.

Per garantire l’elevata disponibilità e scalabilità dell’applicazione, è stato implementato l’autoscaling per il servizio ECS. Ciò garantisce che i servizi di back-end siano tolleranti agli guasti e possano gestire il carico del traffico ridimensionando e uscire in modo appropriato (a seconda del traffico).

Il bilanciamento del carico dell’applicazione rileva se le attività Fargate sono sane utilizzando l’endpoint del controllo sanitario nei servizi di back -end. Se l’endpoint del controllo sanitario non è raggiungibile, ritenerebbe il compito malsano, lo deregister dal gruppo target, termina l’attività e lancia un nuovo compito per sostituirla. Mentre distribuivamo il servizio ECS in più zone di disponibilità, se una zona di disponibilità dovesse non essere disponibile, ci saranno istanze nelle altre zone di disponibilità che manterrebbero in esecuzione l’applicazione. Altre attività verranno lanciate automaticamente a seconda del traffico. Attraverso l’uso dell’autoscaling, assicuriamo che solo la giusta quantità di risorse e capacità vengano fornite per gestire la domanda attuale, risparmiando i costi a lungo termine.

Risultati

Abbiamo usato JMETER per caricare testare la nostra applicazione, con 500 utenti e 1 rampe-up, indicando i due endpoint diversi (bilanciatore del carico dell’applicazione e CloudFront). Guardando i risultati, possiamo vedere che le richieste fatte a Cloudfront sono molto migliori con un’enorme riduzione della latenza (riduzione dell’80% di latenza). Il tasso di errore è stato sorprendentemente anche lo 0%. Ciò dovrebbe essere dovuto all’alta disponibilità e alla caratteristica automatica di AWS ECS.

Porta via

Sebbene questo progetto fosse scoraggiante soprattutto per noi neofiti in AWS, è stato sicuramente gratificante poter vedere questo tipo di risultati sorprendenti, il che significa che la nostra implementazione era buona e lodevole.

Alcuni feedback forniti sulla nostra architettura dalla lealtà di Ascenda:

“Hosting di frontend su s3 -> bella idea. Sembra loro’RE CREDITA UNA VERA spa”

Se sei interessato a ciò che abbiamo realizzato, puoi visualizzare una demo della nostra domanda qui!

Grazie per aver letto: D

Come faccio a risolvere i problemi e riduco la maggiore latenza da Cloudfront?

Vedo una maggiore latenza nelle risposte da Amazon Cloudfront. Come posso identificare la causa e ridurre la latenza?

Breve descrizione

Per risolvere la latenza da Cloudfront, prima identificare quale dei seguenti eventi contribuisce alla latenza:

  • Il tempo impiegato per le richieste da passare tra il client e le posizioni di Cloudfront Edge. Ciò include il processo di ricerca del sistema di nomi di dominio (DNS) e negoziazioni TCP e SSL/TLS.
  • Il tempo impiegato per le richieste per andare tra Cloudfront e l’origine. Ciò include il processo di ricerca DNS di origine, i negoziati TCP e SSL/TLS con l’origine e il tempo impiegato dall’origine per elaborare e rispondere con un oggetto.

Quindi, segui i passaggi di risoluzione dei problemi per gli eventi che stanno causando la maggiore latenza.

Risoluzione

Identifica gli eventi che causano latenza da Cloudfront:

Per identificare quali eventi stanno causando latenza da Cloudfront, fai uno dei seguenti:

  • Esegui il seguente comando Curl:

curl -w "dns_resolution: %| tcp_negotiation_time: %| ssl_negotiation_time: %| ttfb: %| tempo totale: %\ n" -o/dev/null -vsl https: // www.esempio.com

Nota: Sostituire esempio.com con il tuo nome di dominio cloudfront o il nome di dominio alternativo (CNAME) e il percorso URL.

  • Controlla per quanto tempo ogni fase di una richiesta di rete impiega gli strumenti per sviluppatori del browser web. Ad esempio, se si utilizza Mozilla Firefox, la scheda Timing fornisce queste informazioni.

Basato sul Tempo impiegato Per ogni evento o richiesta, consultare la sezione di risoluzione correlata in questo articolo.

Se hai osservato latenza in passato, controlla i campi Tempo impiegato E time to-first-byte Nei registri di accesso CloudFront. I registri di accesso CloudFront non registrano il tempo impiegato dal client per il processo di ricerca DNS e le negoziazioni TCP e SSL/TLS

Ridurre la latenza nella risoluzione DNS

  • Aumenta il tempo di memorizzazione nella cache del DNS nel DNS lato client.
  • Aumentare il Tempo per vivere (TTL) della cache nel server DNS locale.
  • Aumentare il Ttl Nel record DNS nel tuo registrar/provider DNS.
  • Se il resolver Server DNS Dal tuo fornitore di servizi Internet sta causando latenza, quindi considera l'utilizzo dei server DNS pubblici.

Ridurre la latenza in TCP e SSL/TLS - Tempo di negoziazione

  • Controlla la larghezza di banda della rete locale e la larghezza di banda Internet.
  • Controlla se ci sono interruzioni di rete nel provider di server Internet o nel router.
  • Ottimizza le prestazioni della rete locale tramite il tuo fornitore di servizi Internet o percorsi di rete.
  • Conferma stai utilizzando il resolver DNS corretto che consente al browser Web di trovare la posizione pop più vicina e corretta.
  • Per migliorare le prestazioni del sito HTTPS, mantieni la catena di certificazione breve.
  • La latenza può essere causata da un firewall, proxy o router locale. Per determinare quale di questi sta causando latenza, eseguire il seguente comando MTR dal sistema. Vedere la diagnosi dei problemi di rete con MTR per ulteriori informazioni.

Esempio MTR -RW.com --no-dns

Nota: Sostituire esempio.com con il tuo nome di dominio.

Ridurre la latenza nel tempo impiegato per il primo byte (TTFB) e il tempo totale prelevato (TTL)

Se CloudFront restituisce "X-Cache: premere da CloudFront"

Cloudfront restituisce "X-Cache: premere da CloudFront" quando le richieste sono servite dalla posizione del bordo più vicino. Per ridurre la latenza:

  • Accendi la compressione automatica di CloudFront per comprimere i file e aumentare la velocità di download.
  • Utilizzare la memorizzazione nella cache locale o del browser per ridurre le richieste a Cloudfront. Specificare l'intestazione di controllo cache sui file per istruire i browser Web di mantenere il contenuto del sito Web nella memoria del browser o il disco locale per un certo periodo di tempo. Per ulteriori informazioni sulle intestazioni di controllo della cache, vedere Specificare la quantità di tempo che Cloudfront cacherà gli oggetti.

Se Cloudfront restituisce "X-Cache: Miss da CloudFront"

Se Cloudfront restituisce "X-Cache: Miss from CloudFront" quando la richiesta viene inviata all'origine. Per ridurre la latenza:

  • Riduci il tempo di andata e ritorno (RTT) tra la posizione del bordo di Cloudfront nella posizione di origine. Se una richiesta dalla posizione di Cloudfront Edge va alla posizione di origine più vicina, allora l'RTT è inferiore. Tuttavia, il TTFB è interessato se la richiesta proviene da una posizione del bordo geograficamente distante dall'origine. Per ottimizzare l'RTT, replica il server Origin in più regioni che sono geograficamente più vicine ai tuoi utenti. Quindi, imposta il DNS del nome di dominio di origine in modo che inserisca la richiesta di origine in base alla latenza o alla geolocalizzazione. Se stai utilizzando Amazon Route 53 come provider DNS, consulta la scelta di una politica di routing per ulteriori informazioni.
  • Accendi la compressione automatica di CloudFront per comprimere i file e ridurre la velocità di download. Se il formato del file non è supportato dalla compressione automatica di CloudFront, pre-Comprendere quel file nell'origine e servilo con Codifica dei contenuti intestazione.
  • Controlla la latenza dall'origine a Cloudfront abilitando la metrica di latenza di origine. Nota: Si applicano le tariffe standard di cloudwatch.
  • Accendi Cloudfront Origin Shield.
  • Aggiungi le politiche delle intestazioni di risposta con l'accensione dell'intestazione del server. Questa funzione può aiutarti a comprendere gli eventi che stanno contribuendo alla latenza tra Cloudfront e l'origine.

Riduci la latenza per gli utenti finali con API multi-regioni con Cloudfront

Man mano che le organizzazioni crescono, devono spesso servire utenti geograficamente dispersi con bassa latenza, spingendoli ad avere un'infrastruttura globale distribuita nel cloud. In questo articolo, descriviamo come distribuire gli endpoint API globali per ridurre la latenza per gli utenti finali aumentando un'applicazione’Disponibilità.

Utilizzando la rete globale AWS e Amazon CloudFront per distribuire applicazioni in più regioni AWS, le organizzazioni possono consentire ai loro utenti di connettersi a un endpoint API nella regione con la più bassa latenza alla richiesta API’S origine, durante l'accesso ai dati che vengono automaticamente tenuti in sintonia tra le regioni in tempo reale.

Per spiegare la soluzione per gli sviluppatori di API GraphQL, forniamo un'architettura utilizzando AWS AppSync. Questa architettura si basa su una serie di componenti per supportare scenari attivi/attivi multi-regioni, vale a dire: Cloudfront, Amazon Route 53, AWS Certificate Manager (ACM) e AWS Lambda@Edge.

Per GraphQL, questo articolo completa il precedente post di distribuzione Multi Region di AWS AppSyNC con le tabelle globali Amazon DynamoDB, spiegando come trasformare una soluzione globale Active/Passive in una attiva/attiva. Inoltre, fornisce un'alternativa basata su CloudFront ai nomi di dominio personalizzato per le API APSYNC AWS.

Se tu’RE A REST API Developer, è possibile ottenere risultati simili seguendo il post utilizzando il routing basato sulla latenza con Amazon Cloudfront per un'architettura attivo attivo multi-regione. Eccoti’Trova anche una guida sui compromessi di costi e complessità che ti aiuteranno a pensare attraverso considerazioni architettoniche e il loro impatto sulla funzionalità, sulla resilienza e sulle prestazioni delle tue applicazioni.

API graphql multi-regione con cloudfront

Vediamo le organizzazioni che scelgono sempre più di creare API con GraphQL per fornire applicazioni più velocemente offrendo agli sviluppatori front-end la possibilità di interrogare più database, microservizi e API con un unico endpoint.

Il seguente diagramma di architettura (Figura 1) descrive come ridurre la latenza per gli utenti finali aumentando l'applicazione’S Disponibilità fornendo endpoint API GraphQL in più regioni, con sincronizzazione dati attiva/attiva in tempo reale supportato da Amazon DynamoDB Global Tabelle. Una versione PDF di questo diagramma è disponibile su questo link. Per ulteriori dettagli su come implementare la replica di Amazon DynamoDB, leggi la distribuzione post -regione di AWS AppSyNC con le tabelle globali Amazon DynamoDB.

Diagramma per API GraphQL multi-regione con Cloudfront

Figura 1: diagramma per API graphql multi-regione con cloudfront

Seguire i seguenti passaggi per implementare l'architettura mostrata nel diagramma:

  1. Distribuisci un'API GraphQL in due o più regioni utilizzando AWS AppSyNC, quindi gestisci i comandi e le query AppSyNC utilizzando AWS Lambda Resolvers collegati a un database DynamoDB.
  2. Per notificare ai clienti le modifiche ai dati in tutte le regioni, abilitare le tabelle globali di DynamoDB per mantenere i dati in sintonia tra le regioni, quindi gestire i flussi di dati DynamoDB con un gestore Lambda, attivando così abbonamenti a schema grafico appositamente costruiti. Per ulteriori informazioni su come farlo, consultare la distribuzione post regione di AWS AppSync con le tabelle globali Amazon DynamoDB.
  3. Per supportare i domini personalizzati, caricare il dominio’SSL Certificato in ACM e collegalo a una distribuzione di Cloudfront.
  4. Punta il tuo nome di dominio su CloudFront utilizzando la Route 53 come servizio di risoluzione del nome DNS.
  5. Imposta una regola di routing sulla Route 53 per instradare i tuoi clienti globali nella regione AWS con meno latenza nella loro posizione.
  6. In modo che i tuoi clienti possano autenticare perfettamente gli endpoint AWS AppSync in qualsiasi regione, utilizzare lambda@Edge per query Route 53 per la migliore regione per inoltrare la richiesta e normalizzare l'autorizzazione estraggendo le specificità regionali AppSyNCC.
  7. Quindi, i client in tutto il mondo possono connettersi all'API GraphQL su un unico endpoint disponibile in sedi di bordo.
  8. Cloudfront inserirà senza soluzione di continuità i client’ richieste all'API nella regione con la latenza più bassa per il cliente’S Posizione.

Configurazione di CloudFront

Ecco i passaggi per configurare CloudFront per la soluzione attiva/attiva multi-regione in questo articolo:

  • Inizia creando una semplice distribuzione generica di cloudfront (vedi come qui).
  • L'origine della distribuzione non è’t rilevante per lo stato finale della nostra soluzione perché sarà sostituito dagli endpoint API. Tuttavia, deve essere risolvibile in modo che venga invocata la funzione Lambda@Edge. Ad esempio, puoi usare AWS.Amazon.com come la tua origine.
  • Per semplicità, la soluzione descritta in questo post implementa un URL personalizzato sicuro che inizia con Global-API . Ad esempio, se il tuo dominio personalizzato è esempio.com, quindi l'API attiva/attiva è disponibile su https: // global-api.esempio.com . Per supportarlo, aggiungi il tuo nome di dominio alternativo (E.G., Global-API.esempio.com) alla tua distribuzione Cloudfront (vedi come qui).

Sulla distribuzione di Cloudfront, modifica il comportamento e imposta i seguenti valori delle proprietà:

  1. Modifica “Metodi HTTP consentiti” A “ Ottieni, testa, opzioni, put, post, patch, elimina ” - Ciò consentirà le richieste post necessarie per gestire le query graphql.
  2. Modifica “Politica della cache” A “ Cachingdisabled ” - Ciò rimuoverà qualsiasi cache per assicurarsi che tutte le richieste siano dinamiche.
  3. Modifica “Politica di richiesta di origine” A “ Allviewer ” - Ciò aggiungerà le informazioni richieste al payload inviato alla funzione Lambda@Edge.

Configurazione di ACM

Per implementare la soluzione descritta in questo articolo, utilizzare ACM per richiedere un certificato pubblico al dominio personalizzato (vedi come qui). Questa soluzione utilizza i sottodomini, quindi è necessario richiedere un certificato che supporti i caratteri jolly. Ad esempio, se il tuo dominio lo è “esempio.com”, quindi richiedi un certificato per gestire entrambi “esempio.com” E “*.esempio.com”.

Una volta che il certificato è disponibile e convalidato su ACM, collegalo alla distribuzione di Cloudfront (vedi come qui).

Configurazione di Amazon Route53

Per implementare la soluzione descritta in questo articolo, creare i seguenti record nella zona ospitata della Route 53 per il tuo dominio:

  • Un semplice record CNAME che funge da punto di ingresso alla distribuzione di Cloudfront (vedi come qui).
  • Un record con una politica di routing basata sulla latenza per configurare le tue API regionali multiple (vedi come qui). Ciò migliora le prestazioni per i tuoi utenti servendo le loro richieste dalla regione AWS che fornisce la latenza più bassa.
  • Un dominio personalizzato per ciascuna regione (usa lo stesso dominio personalizzato nella funzione Lambda che segue).

Ad esempio, se il tuo dominio lo è “ esempio.com ”, La tua distribuzione di Cloudfront è “ Abcdefghij.Cloudfront.netto ”, E hai le API in Europa (Irlanda) e Asia Pacifico (Sydney), quindi dovresti finire con una configurazione della Route 53 simile alla Figura 2.

Tabella dei record sulla Route 53, che mostrano globali-api.example.com come CNAME con semplice traffico di routing della politica di routing verso abcdefghij.cloudfront.net. Latency-routing.example.com come routing basato sulla latenza basata sul routing in Europa (Irlanda) in Irlanda. Latency-routing.example.com come Cname con routing basato sulla latenza sul routing Asia Pacitic (Sydney) a Sydney

Figura 2: Tabella dei record sulla Route 53

Nota i seguenti errori comuni durante la configurazione della Route 53:

  • IL “Irlanda” E “Sydney” Registra i valori nell'esempio sopra Aren’t gli URL degli endpoint API regionali. Invece, queste sono le chiavi del dizionario definito nel codice Lambda@Edge che segue.
  • I nomi dei record di latenza nell'esempio sopra sono’T regione specifica. Invece, loro’re dei nomi dei record comuni che Lambda@Edge contatterà per query Route 53 per la regione consigliata’chiave s.

Per ulteriori dettagli su come viene utilizzata questa configurazione della Route 53 nel contesto della soluzione, eseguire i passaggi nella sezione Test di questo articolo. Questi ti consentono di iniziare da un account AWS vuoto e costruire la tua strada per un ambiente multi-regionale completamente funzionale che puoi testare con un VUE.Applicazione JS.

Codice per lambda@edge

Per implementare la soluzione in questo articolo, creare una funzione Lambda@Edge nel nodo.JS usando i frammenti di codice in questa sezione come modello (vedi come qui).

Esistono diversi modi per distribuire la tua funzione su CloudFront. Un modo semplice è selezionare il “ Azioni ” Dropown sull'editor Lambda, quindi seleziona “ Distribuisci a Lambda@Edge ”.

Il seguente codice ti consente di trovare la migliore regione AWS per una richiesta in arrivo. Presuppone che tu abbia già impostato una politica di routing sulla tua Route 53 denominata “ Routing di latenza ”. I possibili risultati di questa funzione, considerando l'esempio nella tabella della Route 53 sopra, sono “Irlanda” E “Sydney”.

const dns = requisito ('dns'); Lascia che bestorigin; let scade = 0; let ttl = 1; let dns_host = 'latenza.esempio.com '; funzione 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); >); >); > 

Il seguente codice ti consente di mappare la migliore regione AWS (come giudicato dalla Route 53) su un'API pubblicata. Questo codice considera l'esempio delle impostazioni della Route 53 nella tabella sopra, con due voci API GraphQL (una per l'Irlanda e una per Sydney). È necessario modificare questo codice per abbinare le impostazioni degli endpoint API regionali.

let regions = []; // Usa minuscolo. Regioni ['Irlanda'] = < "Host": "" >; regioni ['sydney'] = < "Host": "" >; funzione getRegionalSettings (bestRegion)

Il seguente codice utilizza la funzione GetBesTregion per trovare la migliore regione AWS (secondo la Route 53), quindi la mappa al dominio e al segreto di un'API utilizzando la funzione GetReGalsettings e infine modifica le intestazioni della richiesta per inoltrare la richiesta selezionata API selezionata.

esportazioni.Handler = async (evento, contesto, callback) => < 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 (`RICHIEVER Impostare su" $ "`) callback (null, richiesta); >;

Flusso end-to-end

Il seguente diagramma (Figura 3) mostra il flusso di comunicazione end-to-end tra la soluzione&rsquo;componenti s.

Descrive visivamente come una richiesta da un client viene tradotta per la prima volta dalla Route 53 (o da qualsiasi altro server DNS), quindi inviata alla distribuzione Cloudfront registrata sul DNS. Cloudfront quindi convalida la richiesta&rsquo;Certificato S utilizzando ACM, quindi cambia l'origine nell'endpoint API con la latenza più bassa al client sfruttando lambda@Edge. Infine, la richiesta viene inviata all'endpoint API regionale migliore e all'API&rsquo;la risposta è consegnata al client da CloudFront.

Diagramma del flusso di messaggi

Figura 3: diagramma del flusso di messaggi

Testare la soluzione attiva/attiva multi-regione

Nel test descritto in questo articolo, tu&rsquo;Usano le stesse regioni Irlanda e Sydney utilizzate nella configurazione del campione della Route 53 precedente. I passaggi del test presumono che tu&rsquo;Ve ha già eseguito i passaggi precedenti menzionati in questo articolo&rsquo;s Capitoli precedenti per costruire la soluzione multi-regione.

Per controllare quale regione tu&rsquo;RITTENDO DURANTE TEST, TU&rsquo;Avrà bisogno di un client proxy VPN o qualcosa di simile. I passaggi del test in questo articolo sono stati eseguiti utilizzando Mullvad, un servizio VPN commerciale open source con sede in Svezia.

Testare la tua API GraphQL attiva/attiva multi-regione

Segui questi passaggi per preparare i test di una soluzione multi-regione sugli endpoint API GraphQL.

Questa sezione ti consente di creare un ambiente di test AppSync da zero, anche se non hai esperienza precedente con AppSync. Voi&rsquo;Usano questo ambiente come pre-condizione per testare le query e gli abbonamenti grafici nelle due sezioni successive.

  1. Avvia un'API grafica di esempio nelle regioni Irlanda e Sydney. Ciò distribuirà un endpoint API appsync completamente funzionale con uno schema di esempio supportato da un database DynamoDB regionale.
    1. Per rimuovere eventuali dubbi su quale regione venga colpita dai test, Don&rsquo;T Abilita tabelle globali DynamoDB-Altrimenti, segui la distribuzione post-regione di AWS AppSynC con le tabelle globali Amazon DynamoDB se si desidera abilitare i dati incrociati in tempo reale e la replica in abbonamento. I test in questo articolo presumono di non essere&rsquo;T abilitato la replica.
    1. Usa Irlanda-appsync.esempio.com, ad esempio, come Irlanda&rsquo;S Name di dominio personalizzato;
    2. Usa Sydney-Appsync.esempio.com, ad esempio, come Sydney&rsquo;S Name di dominio personalizzato;
    3. Assicurati di associare l'API al nome di dominio personalizzato.

    Regioni ['Irlanda'] = < "Host": ".cloudfront.net" >; regioni ['sydney'] = < "Host": ".cloudfront.net" >;

    1. Ai fini del test, crea una semplice funzione di autori di autori Lambda per le tue API GraphQL utilizzando il seguente nodo.Codice di esempio JS e distribuilo in entrambe le regioni. Questa funzione accetterà la stringa &ldquo; Autorizzato da personalizzazione &rdquo; come l'unico token di autorizzazione valido. Si noti che i token di autenticazione con codifica rigida sono&rsquo;t una buona pratica e noi&rsquo;sta usandolo solo qui per test semplicità. Invece, prendi in considerazione la memorizzazione dei token su AWS Secrets Manager.

    esportazioni.Handler = async (event) => < const < authorizationToken >= restituzione dell'evento < isAuthorized: authorizationToken === 'custom-authorized', resolverContext: <>>; >; 

    1. Imposta la funzione dell'autore Lambda come autori predefinito per gli endpoint API APSYNC regionali (vedi come qui) e rimuovi eventuali chiavi API dalla configurazione AppSyNC. Ciò renderà l'API disponibile pubblicamente con un semplice token durante l'esecuzione del test, rendendo i test più facili da eseguire. Tuttavia, a meno che questo non sia esattamente quello che desideri, abbiamo consigliato di esaminare tutte le opzioni disponibili per proteggere le tue API AppSync.
    2. Crea una mutazione nella regione Irlanda per aggiungere un record di esempio (vedere questa pagina per ulteriori informazioni):
      1. Navigare in Irlanda&rsquo;SA AWS AppSync Console.
      2. Naviga in Irlanda&rsquo;s AppSync API che hai creato in un passaggio precedente.
      3. Seleziona la scheda Queri sul lato sinistro.
      4. Sul campo token di autorizzazione, digita personalizzato (come nell'autorizer Lambda).
      5. Esegui il seguente comando di mutazione:
        mutazione createevent < createEvent( name: "Ireland" when: "" where: "" description: "" ) < id name >>

      Supponendo che tu tu&rsquo;Ve già impostato il tuo API globale.esempio.com reindirizzamenti usando i passaggi di questo post, quindi quello&rsquo;sedersi! Voi&rsquo;RE Pronto per testare l'endsync Endpoint multi-regione.

      Testare le query graphql attive/attive multi-regioni

      Supponendo che tu tu&rsquo;VE ha già seguito i passaggi necessari per creare un ambiente di test AppSync multi-regione da zero, come spiegato nella sezione precedente, seguire questi passaggi per testare la soluzione multi-regione con query graphql.

      1. Sul tuo client VPN, imposta una connessione a un server VPN vicino all'Irlanda (E.G., Londra, Regno Unito).
      2. Interroga l'API con un comando Curl simile a quanto segue per mostrare i dati di esempio, sostituendo il nome di dominio con il proprio e passando il token di autorizzazione consentito dall'autorizer Lambda.
        $ curl -xpost -h "autorizzazione: autorizzato" -d ' < "query": "query < listEvents < items < name >>> "> 'https: // global-api.esempio.com/graphql/
      3. Confermare che la risposta del ricciolo è
        < "data": < "listEvents": < "items": [ < "name": "Ireland" >] >>>
      4. Sul tuo client VPN, imposta una connessione a un server VPN vicino a Sydney (E.G., Melbourne, Australia).
      5. Esegui di nuovo il comando Curl: ora la risposta dovrebbe essere
        < "data": < "listEvents": < "items": [ < "name": "Sydney" >] >>>

      Come puoi vedere, l'esecuzione del comando Curl da diverse posizioni del mondo provoca una risposta di un endpoint appsync diverso, anche se tu&rsquo;Reggendo lo stesso endpoint API grafico multi-regione.

      Testare i tuoi abbonamenti a graphql attivi/attivi multi-regioni

      Per testare gli abbonamenti GraphQL, seguire questi passaggi per testarli utilizzando WebSockets.

      Questa sezione presuppone anche che tu&rsquo;VE ha già seguito i passaggi necessari per creare un ambiente di test AppSync multi-regione da zero, come spiegato nella sezione precedente.

      Il seguente approccio di test utilizza Postman, un'applicazione che ti consente di interagire con le API usando Post, GET e WebSocket. La sequenza dei passaggi utilizzati nel seguente test si basa sulle istruzioni dalla creazione di un client WebSocket in tempo reale per AWS AppSync.

      1. Crea un payload Handshake da inviare durante l'apertura della connessione WebSocket. Sul tuo strumento di riga di comando, eseguire il comando seguente, sostituendo il nome di dominio con il proprio e usando il token definito nell'autorizer Lambda. Il risultato dovrebbe essere una stringa crittografata di Base64: salva questa stringa in un blocco note perché tu&rsquo;ne ho bisogno più tardi per Postman&rsquo;configurazione s.
        $ echo '' | Base64
      2. Su Postman, crea una nuova connessione WebSocket seguendo le istruzioni in questa pagina. Dovresti essere in grado di farlo selezionando il pulsante Nuovo, quindi selezionando il pulsante di richiesta WebSocket.
      3. Nella casella URL del server, digita il seguente URL, assicurandoti di sostituire il nome di dominio:
        WSS: // Global-API.esempio.com/graphql/in tempo reale
      4. Nella sezione Parame, aggiungi i seguenti parametri:
        1. Chiave: payload, valore: e30 = (Questo è uguale a vuoto <>)
        2. Chiave: intestazione, valore: (la stringa di base64 creata nel primo passaggio)
        1. Chiave: Sec-Websocket-Protocol, Valore: GraphQL-WS
        1. Verificare che la connessione sia stata stabilita cercando Postman&rsquo;S Etichetta verde connessa nella sezione Messaggi e cercando il WSS connesso: //. messaggio su quella stessa sezione.

        < "id":"test", "payload": < "data": "", "extensions": < "authorization": < "Authorization":"", "host": "", > >>, "tipo": "start">

        sottoscrizione < subscribeToEventComments(eventId: "Ireland") < content >>

        1. Verificare che l'abbonamento sia stato creato correttamente cercando il messaggio di risposta start_ack su Postman&rsquo;sezione S Messaggi. Per il messaggio di abbonamento sopra, la risposta dovrebbe essere .

        mutazione < commentOnEvent( content: "test-comment", createdAt: "2000-01-01", eventId: "Ireland" ) < commentId eventId createdAt content >>

        Come puoi vedere, le mutazioni eseguite in una regione (E.G., Irlanda) Attiva gli abbonamenti collegati a quella regione. Per una singola mutazione regionale per innescare abbonamenti ai clienti su tutte le regioni (E.G., Irlanda e Sydney), è necessario impostare la replicazione incrociata con propagazione della mutazione. Segui la distribuzione post regione di AWS AppSync con le tabelle globali di Amazon DynamoDB per imparare a farlo.

        Costruire un'applicazione Amplifica per testare la tua API graphql multi-regione

        Ora che tu&rsquo;Rifronta che la tua API grafica attiva/attiva multi-regione funzioni sia per le query che per gli abbonamenti, è possibile sfruttare AWS amplificare per creare un client di test per l'API.

        In questo articolo, usiamo Vue.JS con amplificare JavaScript per creare una semplice applicazione client, ma amplificare le librerie supportano anche i clienti iOS, Android e Flutter, fornendo così le stesse funzionalità in questi diversi tempi. I client Amplify supportati forniscono semplici astrazioni per interagire con i backend API di AppSyNC GraphQL con poche righe di codice, comprese le funzionalità WebSocket integrate completamente compatibili con il protocollo in tempo reale di appsync WebSocket.

        Segui questa sequenza di passaggi per creare l'applicazione di test.

        1. Assicurati di avere il nodo.JS installato: ne hai bisogno per il passaggio successivo.
        2. Crea un Vue.JS amplifica l'applicazione nella regione Irlanda eseguendo questi passaggi.
        3. Collega la tua applicazione all'Irlanda&rsquo;s api.
          1. Esegui il comando seguente per vincolare l'applicazione all'Irlanda&rsquo;s appsync endpoint, sostituendo il e:
            amplifica add codegen --piid --profile
          2. Esegui il seguente comando per generare il codice associato per query e abbonamenti:
            amplificare Codegen
          1. Esegui NPM Esegui Servire sul tuo strumento di comando.
          2. Verifica che ci sia&rsquo;T eventuali errori.
          3. Passare a http: // localhost: 8080/ - Dovresti vedere la Vue predefinita.Applicazione JS.

          Listevents (Filtro: $ Filtro, Limite: $ Limite, NextToken: $ NextToken) < items < id name where when description comments < items < content commentId >>> NextToken>

             

          1. Esegui NPM Esegui Servire sul tuo strumento di comando.
          2. Verifica che ci sia&rsquo;T eventuali errori.
          3. Passa a http: // localhost: 8080/ - Ora dovresti vedere l'evento elencato precedentemente creato nei tuoi test, indipendentemente da dove nel mondo tu&rsquo;RE EFFETTUARE L'applicazione. Questo perché tu&rsquo;essere connesso direttamente all'Irlanda&rsquo;S Endpoint regionale.
          4. Prima del passaggio successivo, copia l'evento Irlanda&rsquo;S ID a un blocco note (questo è un uuid casuale a 36 caratteri).

          mutazione < commentOnEvent( content: "test-comment", createdAt: "2000-01-01", eventId: "" ) < commentId eventId createdAt content >>

          1. Modifica Exports SRC/AWS.File JS, modificando il valore del parametro AWS_APPSYNC_GRAPHQLendPoint dall'Irlanda&rsquo;S API Endpoint sul tuo punto di accesso globale (E.G., https: // global-api.esempio.com/graphql).
          2. L'applicazione deve aggiornare automaticamente, elencando l'oggetto Irlanda o l'oggetto Sydney, a seconda di dove ti trovi nel mondo.

          Testare l'applicazione Amplifica contro la tua API graphql multi-regione

          Segui questi passaggi per testare l'endpoint API GraphQL multi-regione con un'applicazione AMPLIFICA.

          1. Sul tuo client VPN, imposta una connessione a un server VPN vicino a Sydney (E.G., Melbourne, Australia).
          2. Passare all'applicazione Amplifica in un browser Web (E.G., http: // localhost: 8080). Ora dovresti vedere elencato l'evento Sydney precedentemente creato nei tuoi test.
          3. Esegui un comando di mutazione per aggiungere un commento nell'evento Sydney allo stesso modo in cui hai fatto per l'Irlanda.
          4. Verifica che il nuovo commento sia apparso automaticamente sulla tua applicazione, proprio sotto l'evento Sydney.

          Come puoi vedere, la tua applicazione colpisce perfettamente l'endpoint API appsync più vicino, sia per query che per abbonamenti, pur essendo connessa a un singolo endpoint API globale.

          Ripulire

          Per ripulire l'infrastruttura creata, eliminare le API AppSync, la distribuzione di Cloudfront, la funzione Lambda@Edge e il record di Route53 creato per questo test.

          Conclusione

          In questo post, abbiamo descritto come ridurre la latenza per gli utenti finali, aumentando un'applicazione&rsquo;D disponibilità, fornendo endpoint API in più regioni AWS.

          La soluzione sfrutta CloudFront, Route 53 e ACM per supportare la tua API globale&rsquo;S Nome del dominio personalizzato e utilizza Lambda@Edge per inoltrare le richieste in arrivo all'endpoint API migliore in base alla latenza di rete al richiedente.

          Per spiegare la soluzione agli sviluppatori di API GraphQL, abbiamo fornito una durata approfondita dell'architettura di riferimento che puoi scaricare come PDF qui. Se tu&rsquo;RE A REST API Developer, è possibile ottenere risultati simili seguendo il post utilizzando il routing basato sulla latenza con Amazon Cloudfront per un'architettura attivo attivo multi-regione.

          Per mantenere i test semplici, non abbiamo fatto&rsquo;t Abilita la replica dei dati transnati. Se tu&rsquo;D Ti piace creare un endpoint grafico attivo/attivo multi-regione con dati trasversali e repliche di abbonamento, quindi combinare ciò che hai appreso da questo articolo insieme alla distribuzione post-regione post di AWS AppSync con le tabelle globali di Amazon DynamoDB.

          Aaron Sempf

          Aaron Sempf è un architetto globale di soluzioni per partner principali, nel team di integratori di sistemi globali. Quando non si lavora con i partner AWS GSI, può essere trovato prototipi di codifica per robot autonomi, dispositivi IoT e soluzioni distribuite.

          Fernando Ibanez

          Fernando Ibanez è un architetto di soluzioni con sede nella Carolina del Nord nel team di istruzione superiore. A Fernando piace aiutare i clienti a progettare e implementare soluzioni di automazione per rendere più semplice l'uso del cloud. Nel suo tempo libero, a Fernando piace andare a teatro, provare nuove cucine e passare del tempo con la sua famiglia.

          Jorge Fonseca

          Jorge è un architetto di soluzioni con oltre 20 anni, in possesso di 2 lauree e tutte le certificazioni AWS. In AWS, aiuta i clienti attraverso i loro viaggi cloud convertendo sfide complesse in tabelle di marcia utili per il pubblico sia tecnico che per il pubblico.

          Ralph Richards

          Ralph è un architetto di soluzioni presso Amazon Web Services con sede a Londra. Lavora con i clienti Enterprise Software e SaaS come consulente tecnico che li aiuta a raggiungere i loro obiettivi aziendali nel cloud. È anche specializzato nelle tecnologie container, con un forte interesse per la costruzione di applicazioni moderne utilizzando un approccio di microservizi. Al di fuori del lavoro, gli piace la fotografia, leggere ed esplorare nuovi luoghi nei viaggi su strada.

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

          Amazon Cloudfront - это сервис сети доставки контента (cdn), соззаный д inestinoso в.

          Примеры ипозззвн

          Предоставляйте ыыые беззопасные веб-сййй

          Ххватыыйе зрителей по ве м м в в течечение милисекун cercar лений и шифрванию на уровне поляtal.

          Ускоряйте доставку динамического к контента и api

          Опт ззййй доо динамического веб-контента с с с по со сл сй сй сй сй сц сй сй сц сй сй сл сл сл сц сл сл с е н н н н н н н н н ieri фраquisiti AWS, которая подерживает периферийное завершение и websocketset.

          Потоковая передача видео в ржиме реального времени ил по

          Оперативно запускайй потоков п передач, воопп ззз хе хо пюе нюе нюе нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее нее не ieri е устройство благодаря AWS Media Service и интеграции Elemental.

          Расmmoоuse

          А ттоматически масшшийййй дя ыыыттт доств о обо оо пot пot пot пot пot пot пot оot оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо оо о&IA й сети (ota).

          Клиенты

          Иттория клиента King

          Как начать рide

          Ззнайте о принципах работы Amazon Cloudfrontfront

          Прочийте рководllig о начале работы и ззнайте, что Cloudfront может сделать для в д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д дule.

          Начать рбту с помощю практического yo youчебного пособия

          Узнайте, как с помощью Amazon CloudFront наладить доставку контента и ускорить работу интернет-приложений для конечных пользователей.

          Поппййй Cloudfront бесmmo

          Начните разработку на aws yoth сегодня блоодаря бесmmote.

          Подробнее è AWS

          Подробнее è AWS

          • Чч тке AWS?
          • "?
          • Инклюзиbito
          • Чч тке Devops?
          • Чч тке койй?
          • "?
          • Беззпп tribuna aws
          • Ноы вззжжст
          • Блоги
          • Пре Rich - релизы

          Ресурсы дя рбы с aws

          • Начало работы
          • Обчение и сертификация
          • Библиотека решений AWS
          • Центр архитектуры
          • Вопросы и ответы по пркктам и техническим темам
          • Аналитические очеты
          • Партнеры AWS

          Разработчики на AWS

          • Центр разработчика
          • Пакеты sdk и инструментарий
          • .Net на aws
          • Python на AWS
          • Java на AWS
          • Php на AWS
          • JavaScript на AWS

          Подержка

          • Свяжитесь с нами
          • Полчение помощи спиалиста
          • Обратитьс в с слж подержки
          • Центр знаний
          • AWS RE: POST
          • Supporto AWS озор
          • Юридическая информация
          • Рide а AWS

          Amazon.com - работодатель равных вззжжсстй. Мы предоставляеtal преmmila ендерных груп ю юй сексуаstituci.

          • Конфиденциальность
          • |
          • Условия полззвания сйтом
          • |
          • Параметры файлов Cookie
          • |
          • © 2023 г. Amazon Web Services, Inc. ". Ве права защищены.

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

          Прекращение подержки Internet Explorer

          Подержка AWS для Internet Explorer заканчивается 07/31/2022. Подерживаемые бразеры: Chrome, Firefox, Edge и Safari. Подробнеi &raquo;

CloudEndure funziona con RDS ClouDready ha Play Store

Related Posts

Notizia

Vinyl suona bene su Sonos

Notizia

Fa Epson 4700 Print Cardstock

Notizia

Le cuffie ad alto volume di volume

banner
banner

PROMO

racavedigger.com
© racavedigger.com 2026