全部产品
Search
文档中心

Elastic Compute Service:Cara memastikan idempotensi

更新时间:Jul 06, 2025

Jika terjadi timeout permintaan atau kesalahan server internal saat Anda memanggil operasi API Elastic Compute Service (ECS), klien mungkin akan mencoba untuk mengirim ulang permintaan. Dalam kasus ini, Anda dapat menentukan parameter ClientToken dalam permintaan untuk mencegah klien mengirim ulang permintaan secara berulang.

Apa itu idempotensi?

Idempotensi adalah properti dari beberapa operasi atau sumber daya dalam matematika dan ilmu komputer. Ini berarti bahwa suatu operasi atau sumber daya menghasilkan hasil yang sama, terlepas dari berapa kali permintaan dikirim. Idempotensi memainkan peran penting dalam desain sistem terdistribusi.

Memastikan idempotensi

Secara umum, klien hanya perlu mencoba ulang permintaan ketika kesalahan 500 (InternalError) atau 503 (ServiceUnavailable) dikembalikan atau ketika tidak ada respons yang diterima. Saat menggunakan Alibaba Cloud ECS API, klien menghasilkan nilai parameter yang terdiri dari hingga 64 karakter ASCII, dan Anda dapat memberikan nilai tersebut ke ClientToken untuk memastikan idempotensi dari permintaan yang diulang.

Detail ClientToken

Berikut ini menjelaskan detail tentang ClientToken:

  • Nilai ClientToken adalah string unik dan peka huruf besar-kecil yang dihasilkan oleh klien dan dapat berisi hingga 64 karakter ASCII. Contoh: ClientToken=123e4567-e89b-12d3-a456-426655440000.

  • Jika Anda menentukan permintaan dengan nilai ClientToken yang sedang digunakan tetapi dengan parameter permintaan yang berbeda, ECS mengembalikan kode kesalahan IdempotentParameterMismatch. Anda dapat mengubah nilai ClientToken dan mencoba lagi.

  • Saat Anda menggunakan kembali nilai ClientToken dan membiarkan parameter lainnya tetap tidak berubah dalam permintaan, klien menerima respons yang sama seperti saat permintaan pertama kali dikirim, yang tidak memengaruhi status instance ECS sisi server Anda.

    Catatan

    Anda harus mengubah nilai SignatureNonce, Timestamp, dan Signature saat Anda mencoba ulang permintaan API. Hal ini karena ECS menggunakan SignatureNonce untuk memastikan bahwa setiap permintaan unik dan mencegah serangan pemutaran ulang serta menggunakan Timestamp untuk mencatat cap waktu setiap permintaan. Oleh karena itu, Anda harus menentukan nilai SignatureNonce dan Timestamp yang berbeda dalam permintaan yang dicoba ulang. Akibatnya, ini mengubah nilai Signature.

  • Setelah Anda menambahkan parameter ClientToken ke permintaan yang diulang:

    • Jika kode status HTTP 200 dikembalikan, percobaan ulang menghasilkan hasil yang sama dengan permintaan terakhir dan status server Anda tidak terpengaruh.

    • Jika kode status HTTP 4xx dikembalikan, percobaan ulang gagal. Jika kode status dikembalikan dengan pesan kesalahan coba lagi nanti, server sedang sibuk. Coba lagi nanti. Anda harus menyelesaikan masalah berdasarkan pesan kesalahan yang dikembalikan sebelum mengirim ulang permintaan.

Contoh permintaan idempoten

Sebagai contoh, anggaplah Anda memanggil operasi RunInstance untuk membuat instance ECS. Jika Anda menggunakan nilai ClientToken yang sama sambil menjaga parameter permintaan lainnya tetap tidak berubah, server mengembalikan respons yang sama dan hanya menghasilkan satu nilai InstanceId. Jika Anda tidak dapat membuat instance karena sumber daya instance tidak mencukupi, selesaikan masalah kekurangan sumber daya, ubah nilai ClientToken, lalu buat instance.

https://ecs.aliyuncs.com/?Action=RunInstances
&RegionId=cn-hangzhou
&InstanceType=ecs.cm4.6xlarge
&ImageId=win2008r2_64_ent_sp1_en-us_40G_alibase_20170915.vhd
&SecurityGroupId=sg-securitygroupid
&Amount=1
.......
&ClientToken=123e4567-e89b-12d3-a456-426655440000
&<Common request parameters>

Jika Anda tidak menggunakan ClientToken, beberapa instance ECS mungkin dibuat saat klien mencoba ulang operasi setelah terjadi kesalahan.

Operasi API