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
dancontext.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.source
context.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.