Saat memanggil API Auto Scaling, permintaan dapat mengalami timeout atau gagal akibat error internal server. Jika klien Anda mencoba ulang permintaan tersebut, sertakan parameter ClientToken untuk mencegah operasi duplikat.
Apa itu idempotensi?
Idempotensi adalah properti dari beberapa operasi atau resource dalam matematika dan ilmu komputer yang menjamin hasil yang sama, terlepas dari berapa kali permintaan dikirim. Idempotensi memainkan peran penting dalam desain sistem terdistribusi.
Memastikan idempotensi
Umumnya, klien sebaiknya hanya mencoba ulang permintaan jika menerima error 500 (InternalError) atau 503 (ServiceUnavailable), atau jika tidak menerima respons sama sekali. Untuk memastikan idempotensi pada permintaan yang dicoba ulang saat menggunakan API Auto Scaling, buat string unik hingga 64 karakter ASCII di sisi klien dan tetapkan ke parameter ClientToken.
ClientToken
ClientToken adalah string unik yang peka huruf besar/kecil dengan panjang maksimal 64 karakter ASCII yang Anda buat di sisi klien. Contohnya:
ClientToken=123e4567-e89b-12d3-a456-42665544****.Jika Anda menggunakan kembali ClientToken yang sama dengan parameter permintaan berbeda, Auto Scaling akan mengembalikan error
IdempotentParameterMismatch.CatatanParameter SignatureNonce, Timestamp, dan Signature harus berubah pada setiap percobaan ulang. Auto Scaling menggunakan SignatureNonce untuk mencegah serangan replay dan Timestamp untuk menandai waktu setiap permintaan. Oleh karena itu, saat Anda mencoba ulang permintaan, Anda harus memberikan nilai berbeda untuk SignatureNonce dan Timestamp, yang pada gilirannya mengubah parameter Signature.
Setelah Anda menyertakan parameter ClientToken:
Jika permintaan mengembalikan kode status HTTP 200, mencoba ulang dengan token yang sama akan mengembalikan hasil asli tanpa mengubah status server.
Jika permintaan mengembalikan kode status HTTP 4xx, mencoba ulang akan gagal kecuali pesan error menyarankan sebaliknya (misalnya,
try it later). Anda harus menyelesaikan masalah tersebut berdasarkan pesan error sebelum mencoba ulang permintaan.
Contoh permintaan idempoten
Misalnya, saat Anda memanggil API CreateScalingGroup untuk membuat grup penskalaan, penggunaan ClientToken yang sama dengan parameter permintaan identik memastikan bahwa server mengembalikan respons yang sama dan hanya membuat satu scaling group.
http(s)://ess.aliyuncs.com/?Action=CreateScalingGroup
&ScalingGroupName=scalinggroup****
&InstanceId=i-28wt4****
&RegionId=cn-qingdao
&MinSize=2
&MaxSize=20
&DefaultCooldown=300
.......
&ClientToken=123e4567-e89b-12d3-a456-42665544****
&<common request parameters>Daftar API
Daftar berikut mencakup beberapa API yang mendukung parameter ClientToken. Untuk daftar lengkap, lihat dokumentasi API spesifik untuk setiap operasi.
Buat grup penskalaan: CreateScalingGroup
Buat konfigurasi penskalaan untuk Instance ECS: CreateScalingConfiguration
Hapus satu atau beberapa Instance ECS dari grup penskalaan: RemoveInstances
Jalankan aturan penskalaan: ExecuteScalingRule
Lampirkan satu atau beberapa Instance RDS: AttachDBInstances
Lampirkan satu atau beberapa kelompok server ke grup penskalaan: AttachServerGroups
Lampirkan satu atau beberapa Instance SLB: AttachLoadBalancers
Lampirkan satu atau beberapa kelompok server ALB ke grup penskalaan: AttachAlbServerGroups
Lampirkan satu atau beberapa Kelompok vServer dari Instance SLB: AttachVServerGroups