Mengkonfigurasi caching sisi server dan kompresi muatan di API AWS AppSync - AWS AppSync

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi caching sisi server dan kompresi muatan di API AWS AppSync

AWS AppSync Kemampuan caching data sisi server membuat data tersedia dalam cache dalam memori berkecepatan tinggi, meningkatkan kinerja, dan mengurangi latensi. Ini mengurangi kebutuhan untuk mengakses sumber data secara langsung. Caching tersedia untuk resolver unit dan pipeline.

AWS AppSync juga memungkinkan Anda untuk mengompres API respons sehingga konten muatan dimuat dan diunduh lebih cepat. Ini berpotensi mengurangi ketegangan pada aplikasi Anda sekaligus berpotensi mengurangi biaya transfer data Anda. Perilaku kompresi dapat dikonfigurasi dan dapat diatur sesuai kebijaksanaan Anda sendiri.

Lihat bagian ini untuk membantu mendefinisikan perilaku caching dan kompresi sisi server yang diinginkan di bagian Anda. AWS AppSync API

Tipe instans

AWS AppSync meng-host instans Amazon ElastiCache (RedisOSS) di AWS akun dan AWS Wilayah yang sama dengan Anda. AWS AppSync API

Jenis instans ElastiCache (RedisOSS) berikut tersedia:

small

1 vCPU, 1,5 GiBRAM, kinerja jaringan rendah hingga sedang

medium

2 vCPU, 3 GiBRAM, kinerja jaringan rendah hingga sedang

large

2 vCPU, 12,3 RAM GiB, hingga 10 kinerja jaringan Gigabit

xlarge

4 vCPU, 25,05 RAM GiB, hingga 10 kinerja jaringan Gigabit

2xlarge

8 vCPU, 50,47 GiBRAM, hingga 10 kinerja jaringan Gigabit

4xlarge

16 vCPU, 101,38 GiBRAM, hingga 10 kinerja jaringan Gigabit

8xlarge

32 vCPU, 203.26 GiBRAM, kinerja jaringan 10 Gigabit (tidak tersedia di semua Wilayah)

12xlarge

48 vCPU, 317,77 GiB, kinerja jaringan 10 RAM Gigabit

catatan

Secara historis, Anda menentukan jenis instance tertentu (sepertit2.medium). Mulai Juli 2020, jenis instans lama ini terus tersedia, tetapi penggunaannya tidak digunakan lagi dan tidak disarankan. Kami menyarankan Anda menggunakan jenis instance generik yang dijelaskan di sini.

Perilaku caching

Berikut ini adalah perilaku yang terkait dengan caching:

Tidak ada

Tidak ada caching sisi server.

Caching permintaan penuh

Jika data tidak dalam cache, itu diambil dari sumber data dan mengisi cache sampai waktu untuk live (TTL) kedaluwarsa. Semua permintaan berikutnya untuk API Anda dikembalikan dari cache. Ini berarti bahwa sumber data tidak dihubungi secara langsung kecuali TTL kedaluwarsa. Dalam pengaturan ini, kami menggunakan konten context.arguments dan context.identity peta sebagai kunci caching.

Caching per penyelesai

Dengan pengaturan ini, setiap resolver harus secara eksplisit memilih untuk men-cache respons. Anda dapat menentukan kunci a TTL dan caching pada resolver. Kunci cache yang dapat Anda tentukan adalah peta tingkat atas, dan context.arguments context.sourcecontext.identity, dan/atau bidang string dari peta ini. TTLNilainya wajib, tetapi kunci caching bersifat opsional. Jika Anda tidak menentukan kunci caching apa pun, defaultnya adalah isi daricontext.arguments,, context.source dan peta. context.identity

Misalnya, Anda dapat menggunakan kombinasi berikut:

  • context.arguments dan context.source

  • context.arguments dan context.identity.sub

  • context.arguments.id atau context.arguments. InputType.id

  • context.source.id dan context.identity.sub

  • context.identity.claims.username

Bila Anda hanya menentukan kunci caching TTL dan tidak ada, perilaku resolver sama dengan caching permintaan penuh.

Waktu cache untuk hidup

Pengaturan ini menentukan jumlah waktu untuk menyimpan entri yang di-cache dalam memori. Maksimum TTL adalah 3.600 detik (1 jam), setelah itu entri dihapus secara otomatis.

Enkripsi cache

Enkripsi cache hadir dalam dua rasa berikut. Ini mirip dengan pengaturan yang ElastiCache (RedisOSS) memungkinkan. Anda dapat mengaktifkan pengaturan enkripsi hanya ketika pertama kali mengaktifkan caching untuk Anda. AWS AppSync API

  • Enkripsi dalam perjalanan — Permintaan antara AWS AppSync, cache, dan sumber data (kecuali sumber HTTP data yang tidak aman) dienkripsi di tingkat jaringan. Karena ada beberapa pemrosesan yang diperlukan untuk mengenkripsi dan mendekripsi data di titik akhir, enkripsi dalam transit dapat memengaruhi kinerja.

  • Enkripsi saat istirahat — Data yang disimpan ke disk dari memori selama operasi swap dienkripsi pada instance cache. Pengaturan ini juga memengaruhi kinerja.

Untuk membatalkan entri cache, Anda dapat membuat API panggilan cache flush menggunakan AWS AppSync konsol atau (). AWS Command Line Interface AWS CLI

Untuk informasi selengkapnya, lihat tipe ApiCachedata di AWS AppSync API Referensi.

Penggusuran cache

Saat Anda mengatur AWS AppSync caching sisi server, Anda dapat mengonfigurasi maksimum. TTL Nilai ini mendefinisikan jumlah waktu entri cache disimpan dalam memori. Dalam situasi di mana Anda harus menghapus entri tertentu dari cache Anda, Anda dapat menggunakan AWS AppSync utilitas evictFromApiCache ekstensi dalam permintaan atau respons resolver Anda. (Misalnya, ketika data Anda di sumber data Anda telah berubah, dan entri cache Anda sekarang basi.) Untuk mengusir item dari cache, Anda harus tahu kuncinya. Untuk alasan ini, jika Anda harus mengusir item secara dinamis, sebaiknya gunakan caching per-resolver dan secara eksplisit mendefinisikan kunci yang akan digunakan untuk menambahkan entri ke cache Anda.

Mengusir entri cache

Untuk mengusir item dari cache, gunakan utilitas evictFromApiCache ekstensi. Tentukan nama tipe dan nama bidang, lalu berikan objek item nilai kunci untuk membangun kunci entri yang ingin Anda usir. Dalam objek, setiap kunci mewakili entri yang valid dari context objek yang digunakan dalam daftar resolver cache. cachingKey Setiap nilai adalah nilai aktual yang digunakan untuk membangun nilai kunci. Anda harus meletakkan item dalam objek dalam urutan yang sama dengan kunci caching dalam daftar resolver cache. cachingKey

Misalnya, lihat skema berikut:

type Note { id: ID! title: String content: String! } type Query { getNote(id: ID!): Note } type Mutation { updateNote(id: ID!, content: String!): Note }

Dalam contoh ini, Anda dapat mengaktifkan caching per-resolver, lalu mengaktifkannya untuk kueri. getNote Kemudian, Anda dapat mengonfigurasi kunci caching untuk terdiri dari. [context.arguments.id]

Ketika Anda mencoba untuk mendapatkanNote, untuk membangun kunci cache, AWS AppSync melakukan pencarian di cache sisi server menggunakan id argumen kueri. getNote

Ketika Anda memperbaruiNote, Anda harus mengusir entri untuk catatan tertentu untuk memastikan bahwa permintaan berikutnya mengambilnya dari sumber data backend. Untuk melakukan ini, Anda harus membuat penangan permintaan.

Contoh berikut menunjukkan salah satu cara untuk menangani penggusuran menggunakan metode ini:

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;

Atau, Anda juga dapat menangani penggusuran di penangan respons.

Ketika updateNote mutasi diproses, cobalah untuk AWS AppSync mengusir entri. Jika entri berhasil dihapus, respons berisi apiCacheEntriesDeleted nilai dalam extensions objek yang menunjukkan berapa banyak entri yang dihapus:

"extensions": { "apiCacheEntriesDeleted": 1}

Mengusir entri cache berdasarkan identitas

Anda dapat membuat kunci caching berdasarkan beberapa nilai dari context objek.

Misalnya, ambil skema berikut yang menggunakan kumpulan pengguna Amazon Cognito sebagai mode autentikasi default dan didukung oleh sumber data 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 }

Jenis Note objek disimpan dalam tabel DynamoDB. Tabel memiliki kunci komposit yang menggunakan nama pengguna Amazon Cognito sebagai kunci utama dan id (siput) Note sebagai kunci partisi. Ini adalah sistem multi-penyewa yang memungkinkan banyak pengguna untuk meng-host dan memperbarui Note objek pribadi mereka, yang tidak pernah dibagikan.

Karena ini adalah sistem read-heavy, getNote kueri di-cache menggunakan caching per-resolver, dengan kunci caching terdiri dari. [context.identity.username, context.arguments.id] Ketika a Note diperbarui, Anda dapat mengusir entri untuk spesifik itu. Note Anda harus menambahkan komponen dalam objek dalam urutan yang sama yang ditentukan dalam daftar resolver Anda. cachingKeys

Contoh berikut menunjukkan ini:

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;

Sistem backend juga dapat memperbarui Note dan mengusir entri. Misalnya, ambil mutasi ini:

type Mutation { updateNoteFromBackend(id: ID!, content: String!, username: ID!): Note @aws_iam }

Anda dapat mengusir entri, tetapi menambahkan komponen kunci caching ke objek. cachingKeys

Dalam contoh berikut, penggusuran terjadi sebagai respons penyelesai:

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; }

Dalam kasus di mana data backend Anda telah diperbarui di luar AWS AppSync, Anda dapat mengusir item dari cache dengan memanggil mutasi yang menggunakan sumber data. NONE

Mengompresi tanggapan API

AWS AppSync memungkinkan klien untuk meminta muatan terkompresi. Jika diminta, API tanggapan dikompresi dan dikembalikan sebagai tanggapan atas permintaan yang menunjukkan bahwa konten terkompresi lebih disukai. APIRespons terkompresi dimuat lebih cepat, konten diunduh lebih cepat, dan biaya transfer data Anda juga dapat dikurangi.

catatan

Kompresi tersedia pada semua yang baru APIs dibuat setelah 1 Juni 2020.

AWS AppSync mengompres objek dengan upaya terbaik. Dalam kasus yang jarang terjadi, AWS AppSync dapat melewatkan kompresi berdasarkan berbagai faktor, termasuk kapasitas saat ini.

AWS AppSync dapat mengompres ukuran muatan kueri GraphQL antara 1.000 hingga 10.000.000 byte. Untuk mengaktifkan kompresi, klien harus mengirim Accept-Encoding header dengan nilaigzip. Kompresi dapat diverifikasi dengan memeriksa nilai Content-Encoding header dalam respon (gzip).

Penjelajah kueri di AWS AppSync konsol secara otomatis menetapkan nilai header dalam permintaan secara default. Jika Anda menjalankan kueri yang memiliki respons yang cukup besar, kompresi dapat dikonfirmasi menggunakan alat pengembang browser Anda.