Idempotent operation — bir xil boshlang‘ich maqsad va bir xil parametrlar bilan bir yoki ko‘p marta bajarilganda tizimning yakuniy kuzatiladigan holatini birinchi muvaffaqiyatli bajarishdan keyin yana o‘zgartirmaydigan amal. Bu xususiyat “javob har safar aynan bir xil bo‘ladi” yoki “amal hech qanday yon ta’sirga ega emas” degani emas. Muhim mezon — takroriy bajarish qo‘shimcha mantiqiy ta’sir yaratmasligidir.
Matematik va amaliy ma’no
Matematik ko‘rinishda idempotent funksiya uchun f(f(x)) = f(x) tengligi bajariladi. Tizimlarda esa operatsiya holatga tatbiq etiladi. “Foydalanuvchi holatini faolga o‘rnatish” bir marta ham, besh marta ham yakunda active holatini beradi. “Balansga 10 000 so‘m qo‘shish” esa har takrorda balansni oshiradi va o‘z-o‘zidan idempotent emas.
Natijaning yordamchi qismlari farq qilishi mumkin. Masalan, bir xil konfiguratsiyani qayta qo‘llashda audit jurnaliga yangi yozuv tushishi yoki javob vaqti o‘zgarishi mumkin. Agar domen nuqtayi nazaridan resursning maqsad holati o‘zgarmasa, amal idempotent deb loyihalanishi mumkin. Qaysi yon ta’sirlar kuzatiladigan holatga kirishi tizim shartnomasida aniq belgilanadi.
HTTP metodlaridagi talqin
HTTP semantikasida GET, HEAD, PUT va DELETE idempotent metodlar sifatida ta’riflanadi. PUT /users/42 resursni yuborilgan to‘liq holatga keltiradi; bir xil so‘rov takrori yana shu holatni o‘rnatadi. DELETE /users/42 birinchi urinishda resursni o‘chiradi, keyingisida 404 kabi boshqa status qaytarishi mumkin, ammo resurs baribir mavjud emas.
POST umumiy holda idempotent emas, chunki har so‘rov yangi buyurtma yoki to‘lov yaratishi mumkin. Biroq endpoint qo‘shimcha protokol, masalan idempotency key yordamida POST so‘rovini amalda idempotent qilishi mumkin. Metod nomining o‘zi server implementatsiyasini kafolatlamaydi: noto‘g‘ri yozilgan GET so‘rovi ma’lumotni o‘zgartirsa, standart semantikani buzadi.
Taqsimlangan tizimlardagi ahamiyati
Tarmoqda mijoz so‘rov yuborib, server amali bajarilgandan keyin javob yo‘qolishi mumkin. Mijoz natijani bilmaydi va timeoutdan so‘ng qayta urinadi. Idempotent amal bu noaniqlikni xavfsiz boshqaradi: takroriy so‘rov yangi buyurtma yoki ikkinchi to‘lov yaratmaydi.
Xabar brokerlaridagi at-least-once delivery bir xabarni iste’molchiga takroran yetkazishi mumkin. Iste’molchi hodisa identifikatorini qayd etishi, ma’lumotlar bazasida unique constraint ishlatishi yoki maqsad holatini qayta o‘rnatishi orqali takroriy ta’sirni bartaraf etadi. “Exactly once” deb nomlangan tizim kafolatlari ham odatda ma’lum chegaralar va tranzaksiya modeliga bog‘liq; biznes operatsiyasining idempotentligi baribir foydali.
Loyihalash usullari
Amalni idempotent qilishning bir necha yo‘li mavjud:
- orttirma buyruq o‘rniga kerakli yakuniy holatni yuborish;
- operatsiya yoki hodisa uchun global takrorlanmas identifikator berish;
- identifikatorga unique constraint qo‘yib, yozuvni atomik yaratish;
- birinchi natijani saqlab, takroriy so‘rovga o‘sha mantiqiy natijani qaytarish;
- holat o‘tishini “faqat kutilgan versiyadan” sharti bilan bajarish.
Tekshiruv va holatni o‘zgartirish alohida bajarilsa, ikki parallel so‘rov ikkalasi ham “hali ishlanmagan” degan natija olishi mumkin. Shu bois deduplikatsiya atomik tranzaksiya, compare-and-set yoki ma’lumotlar bazasi chekloviga tayangan holda bajariladi. Idempotentlik kalitlarni abadiy saqlashni shart qilmaydi, lekin saqlash muddati mijoz qayta urinish oynasidan qisqa bo‘lsa, kech takror kelganda himoya ishlamaydi.
Sinovda amal ketma-ket va parallel takrorlanib, domen holati bir martalik natija bilan solishtiriladi. Javob yo‘qolishi ham sun’iy yaratiladi, chunki idempotentlikning asosiy qiymati aynan natijasi noma’lum qolgan urinishdan keyin ko‘rinadi.
Bog‘liq tushunchalar
Idempotency key, Retry, Duplicate request, HTTP method, Distributed system, Deduplication