Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurazione della memorizzazione nella cache lato server e della compressione del payload in API AWS AppSync
AWS AppSync le funzionalità di caching dei dati lato server rendono disponibili i dati in una cache in memoria ad alta velocità, migliorando le prestazioni e riducendo la latenza. Ciò riduce la necessità di accedere direttamente alle fonti di dati. La memorizzazione nella cache è disponibile sia per i resolver di unità che per quelli di pipeline.
AWS AppSync consente inoltre di comprimere le API risposte in modo che i contenuti del payload vengano caricati e scaricati più velocemente. Ciò riduce potenzialmente il carico sulle applicazioni e allo stesso tempo riduce potenzialmente i costi di trasferimento dei dati. Il comportamento di compressione è configurabile e può essere impostato a propria discrezione.
Consultate questa sezione per informazioni sulla definizione del comportamento desiderato della memorizzazione nella cache e della compressione lato server nel vostro. AWS AppSync API
Tipi di istanza
AWS AppSync ospita istanze Amazon ElastiCache (RedisOSS) nello stesso AWS account e nella stessa AWS regione del tuo. AWS AppSync API
Sono disponibili i seguenti tipi di istanze ElastiCache (RedisOSS):
- small
-
1 vCPU, 1,5 GiBRAM, prestazioni di rete da basse a moderate
- medium
-
2 vCPU, 3 GiBRAM, prestazioni di rete da basse a moderate
- large
-
Prestazioni di rete 2 vCPU, 12,3 RAM GiB, fino a 10 Gigabit
- xlarge
-
Prestazioni di rete 4 vCPU, 25,05 RAM GiB, fino a 10 Gigabit
- 2xlarge
-
8 vCPU, 50,47 RAM GiB, prestazioni di rete fino a 10 Gigabit
- 4xlarge
-
16 vCPU, 101,38 GiBRAM, prestazioni di rete fino a 10 Gigabit
- 8xlarge
-
Prestazioni di rete 32 vCPU, 203,26 GiBRAM, 10 Gigabit (non disponibile in tutte le aree geografiche)
- 12xlarge
-
Prestazioni di rete 48 vCPU, 317,77 GiBRAM, 10 Gigabit
Nota
Storicamente, si specificava un tipo di istanza specifico (ad esempio). t2.medium
A luglio 2020, questi tipi di istanze legacy continuano a essere disponibili, ma il loro utilizzo è obsoleto e sconsigliato. Ti consigliamo di utilizzare i tipi di istanza generici descritti qui.
Comportamento della cache
Di seguito sono riportati i comportamenti relativi alla memorizzazione nella cache:
- Nessuno
-
Nessuna memorizzazione nella cache sul lato server.
- Memorizzazione nella cache della richiesta completa
-
Se i dati non sono presenti nella cache, vengono recuperati dall'origine dati e popolati la cache fino alla scadenza di live (). TTL Tutte le richieste successive API vengono restituite dalla cache. Ciò significa che le fonti di dati non vengono contattate direttamente a meno che non TTL scada. In questa impostazione, utilizziamo i contenuti delle
context.identity
mappecontext.arguments
e come chiavi di memorizzazione nella cache. - Memorizzazione nella cache dei resolver
-
Con questa impostazione, è necessario attivare esplicitamente ogni resolver per memorizzare nella cache le risposte. È possibile specificare a TTL e memorizzare nella cache le chiavi sul resolver. Le chiavi di memorizzazione nella cache che è possibile specificare sono le mappe di primo livello e
context.identity
e/ocontext.arguments
icontext.source
campi di stringa di queste mappe. Il TTL valore è obbligatorio, ma le chiavi di memorizzazione nella cache sono opzionali. Se non si specifica alcuna chiave di memorizzazione nella cache, le impostazioni predefinite sono i contenuti delle mappecontext.arguments
,context.source
e.context.identity
Ad esempio, è possibile utilizzare le seguenti combinazioni:
-
context.arguments e context.source
-
context.arguments e context.identity.sub
-
context.arguments.id o context.arguments. InputType.id
-
context.source.id e context.identity.sub
-
context.identity.claims.username
Quando si specifica solo una chiave di memorizzazione nella cache TTL e nessuna, il comportamento del resolver è lo stesso della memorizzazione nella cache completa delle richieste.
-
- Tempo di utilizzo della cache
-
Questa impostazione definisce la quantità di tempo per archiviare le voci memorizzate nella cache. Il massimo TTL è 3.600 secondi (1 ora), dopodiché le voci vengono eliminate automaticamente.
Crittografia cache
La crittografia della cache è disponibile nelle due versioni seguenti. Sono simili alle impostazioni consentite da ElastiCache (RedisOSS). È possibile abilitare le impostazioni di crittografia solo quando si attiva per la prima volta la memorizzazione nella cache per. AWS AppSync API
-
Crittografia in transito: le richieste tra AWS AppSync la cache e le fonti di dati (eccetto le fonti di HTTP dati non sicure) vengono crittografate a livello di rete. Poiché è necessaria una certa elaborazione per crittografare e decrittografare i dati sugli endpoint, la crittografia in transito può influire sulle prestazioni.
-
Crittografia a riposo: i dati salvati su disco dalla memoria durante le operazioni di swap vengono crittografati nell'istanza di cache. Questa impostazione influisce anche sulle prestazioni.
Per invalidare le voci della cache, puoi effettuare una API chiamata flush cache utilizzando la AWS AppSync console o il AWS Command Line Interface ().AWS CLI
Per ulteriori informazioni, consultate il tipo di ApiCachedati nel Reference. AWS AppSync API
Eliminazione della cache
Quando configuri la memorizzazione AWS AppSync nella cache lato server, puoi configurarne un massimo. TTL Questo valore definisce la quantità di tempo in cui le voci memorizzate nella cache vengono archiviate in memoria. In situazioni in cui è necessario rimuovere voci specifiche dalla cache, AWS AppSync è possibile utilizzare l'utilità evictFromApiCache
extensions nella richiesta o nella risposta del resolver. (Ad esempio, quando i dati nelle fonti di dati sono cambiati e la voce della cache è ora obsoleta.) Per rimuovere un elemento dalla cache, è necessario conoscerne la chiave. Per questo motivo, se devi rimuovere gli elementi in modo dinamico, ti consigliamo di utilizzare la memorizzazione nella cache per resolver e di definire esplicitamente una chiave da utilizzare per aggiungere voci alla cache.
Eliminare una voce dalla cache
Per eliminare un elemento dalla cache, utilizzate l'evictFromApiCache
utilità extensions. Specificate il nome del tipo e il nome del campo, quindi fornite un oggetto di elementi chiave-valore per creare la chiave della voce che desiderate eliminare. Nell'oggetto, ogni chiave rappresenta una voce valida dell'context
oggetto utilizzato nell'elenco del resolver memorizzato nella cache. cachingKey
Ogni valore è il valore effettivo utilizzato per costruire il valore della chiave. È necessario inserire gli elementi nell'oggetto nello stesso ordine delle chiavi di memorizzazione nella cache nell'elenco del resolver memorizzato nella cache. cachingKey
Ad esempio, vedete lo schema seguente:
type Note { id: ID! title: String content: String! } type Query { getNote(id: ID!): Note } type Mutation { updateNote(id: ID!, content: String!): Note }
In questo esempio, è possibile abilitare la memorizzazione nella cache per resolver, quindi abilitarla per la query. getNote
Quindi, è possibile configurare la chiave di memorizzazione nella cache in modo che sia composta da. [context.arguments.id]
Quando si tenta di ottenere unaNote
, per creare la chiave della cache, AWS AppSync esegue una ricerca nella sua cache lato server utilizzando l'id
argomento della query. getNote
Quando aggiorni aNote
, devi eliminare la voce relativa alla nota specifica per assicurarti che la richiesta successiva la recuperi dalla fonte dati di backend. A tale scopo, è necessario creare un gestore di richieste.
L'esempio seguente mostra un modo per gestire lo sfratto utilizzando questo metodo:
import { util, Context } from '@aws-appsync/utils'; import { update } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { extensions.evictFromApiCache('Query', 'getNote', { 'ctx.args.id': ctx.args.id }); return update({ key: { id: ctx.args.id }, update: { context: ctx.args.content } }); } export const response = (ctx) => ctx.result;
In alternativa, puoi anche gestire lo sfratto nel gestore delle risposte.
Quando la updateNote
mutazione viene elaborata, AWS AppSync tenta di eliminare la voce. Se una voce viene cancellata con successo, la risposta contiene un apiCacheEntriesDeleted
valore nell'extensions
oggetto che mostra quante voci sono state eliminate:
"extensions": { "apiCacheEntriesDeleted": 1}
Eliminare una voce della cache in base all'identità
È possibile creare chiavi di memorizzazione nella cache basate su più valori dell'oggetto. context
Ad esempio, prendi lo schema seguente che utilizza i pool di utenti di Amazon Cognito come modalità di autenticazione predefinita ed è supportato da un'origine dati Amazon DynamoDB:
type Note { id: ID! # a slug; e.g.: "my-first-note-on-graphql" title: String content: String! } type Query { getNote(id: ID!): Note } type Mutation { updateNote(id: ID!, content: String!): Note }
I tipi di Note
oggetto vengono salvati in una tabella DynamoDB. La tabella ha una chiave composita che utilizza il nome utente di Amazon Cognito come chiave primaria e il id
(uno slug) di Note
come chiave di partizione. Si tratta di un sistema multi-tenant che consente a più utenti di ospitare e aggiornare i propri Note
oggetti privati, che non vengono mai condivisi.
Poiché si tratta di un sistema ad alta intensità di lettura, la getNote
query viene memorizzata nella cache utilizzando la memorizzazione nella cache per resolver, con la chiave di memorizzazione composta da. [context.identity.username, context.arguments.id]
Quando a Note
viene aggiornato, puoi rimuovere la voce relativa a quello specifico. Note
È necessario aggiungere i componenti dell'oggetto nello stesso ordine in cui sono specificati nell'elenco del resolver. cachingKeys
L'esempio seguente lo dimostra:
import { util, Context } from '@aws-appsync/utils'; import { update } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { extensions.evictFromApiCache('Query', 'getNote', { 'ctx.identity.username': ctx.identity.username, 'ctx.args.id': ctx.args.id, }); return update({ key: { id: ctx.args.id }, update: { context: ctx.args.content } }); } export const response = (ctx) => ctx.result;
Un sistema di backend può anche aggiornare Note
ed eliminare la voce. Ad esempio, prendiamo questa mutazione:
type Mutation { updateNoteFromBackend(id: ID!, content: String!, username: ID!): Note @aws_iam }
È possibile eliminare la voce, ma aggiungere i componenti della chiave di memorizzazione nella cache all'oggetto. cachingKeys
Nell'esempio seguente, lo sfratto avviene nella risposta del resolver:
import { util, Context } from '@aws-appsync/utils'; import { update } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { return update({ key: { id: ctx.args.id }, update: { context: ctx.args.content } }); } export function response(ctx) { extensions.evictFromApiCache('Query', 'getNote', { 'ctx.identity.username': ctx.args.username, 'ctx.args.id': ctx.args.id, }); return ctx.result; }
Nei casi in cui i dati del backend sono stati aggiornati all'esterno AWS AppSync, è possibile rimuovere un elemento dalla cache richiamando una mutazione che utilizza una fonte di dati. NONE
Compressione delle risposte API
AWS AppSync consente ai clienti di richiedere payload compressi. Se richiesto, API le risposte vengono compresse e restituite in risposta alle richieste che indicano che è preferibile il contenuto compresso. APILe risposte compresse vengono caricate più velocemente, i contenuti vengono scaricati più velocemente e anche i costi di trasferimento dei dati possono essere ridotti.
Nota
La compressione è disponibile per tutte le novità APIs create dopo il 1° giugno 2020.
AWS AppSync comprime gli oggetti nel miglior modo possibile. In rari casi, AWS AppSync può saltare la compressione in base a una serie di fattori, inclusa la capacità attuale.
AWS AppSync può comprimere dimensioni del payload delle query GraphQL comprese tra 1.000 e 10.000.000 di byte. Per abilitare la compressione, un client deve inviare l'intestazione con il valore. Accept-Encoding
gzip
La compressione può essere verificata controllando il valore dell'Content-Encoding
intestazione nella risposta ()gzip
.
Per impostazione predefinita, il query explorer nella AWS AppSync console imposta automaticamente il valore dell'intestazione nella richiesta. Se esegui una query con una risposta sufficientemente ampia, la compressione può essere confermata utilizzando gli strumenti di sviluppo del browser.