Yapay Zeka - AI

İş akışlarında idempotency ile aynı işi iki kez yapmayı önleme

By Eylül

August 10, 2026

Bir API çağrısı zaman aşımına uğradı, kullanıcı “Gönder” butonunaiki kez tıkladı ya da ağ bağlantısı tam işlem ortasında koptu. Sonuç? Aynı sipariş iki kez oluşturuldu, müşterinin kartından çiftödeme çekildi veya aynı e-posta üç kere gönderildi. İş akışlarında idempotency kavramı, tam olarak bu tür senaryoları önlemek için var. Dağıtık sistemlerde, mikroservis mimarilerinde veotomasyon süreçlerinde idempotent tasarım, hem veri bütünlüğünü korur hem de kullanıcı deneyimini olumsuz etkileyen tekrarlı işlemlerin önüne geçer.

Bu yazıda idempotency’nin ne anlama geldiğini, iş akışlarında neden kritik olduğunu ve pratik uygulama yöntemlerini inceleyeceğiz. Ayrıca yaygın hataları, farklı senaryolara uygun stratejileri ve gerçek dünya örneklerini de ele alacağız.

Idempotency Nedir? Kısa Tanım

Idempotency (eşgüçlülük), bir işlemin bir kez veya birden fazla kez çalıştırılmasının aynı sonucu üretmesi anlamına gelir. Yani aynı isteği1kez de gönderseniz, 10 kez de gönderseniz sistem durumu değişmez. Matematiksel olarak düşünürsek: f(x) = f(f(x)) formülü tam olarak bunu ifade eder.

Pratikte en sık görülen örnek HTTP metodlarıdır:

Kilit Çıkarım: Idempotency, “tekrar denemek güvenli mi?” sorusuna “evet” diyebilmeni sağlar.

İş Akışlarında Idempotency Neden Bu Kadar Önemli?

Modern yazılım sistemleri nadiren tek bir sunucuda çalışır. Mikroservisler, message queue’lar, webhook’lar ve üçüncü parti API entegrasyonları işin içine girdiğinde, ağ güvenilirliği hiçbir zaman %100 olamaz. İşte bu noktada idempotent tasarım hayat kurtarır.

Dağıtık Sistemlerde Belirsizlik Sorunu

Bir servis diğerine istek gönderdiama yanıt alamadı. İşlem başarılı mı oldu, başarısız mı? Bilemezsin. Bu durumda güvenli şekilde tekrar deneyebilmek için işlemin idempotent olması gerekir. Aksi halde:

Retry Mekanizmalarıyla Uyum

Çoğu modern altyapı (Kubernetes, message broker’lar, API gateway’ler) başarısız işlemleri otomatik olarak tekrardener. Eğer endpoint’lerin idempotent değilse, bu retry mekanizmaları fayda yerine zarar verir. Idempotent tasarım, “at-least-once delivery” garantisi veren sistemlerde bile tutarlılığı korur.

Basit senaryo: Bir kullanıcı online bankacılıkta para transferi yapıyor. Butona tıkladı, sayfa dondu, tekrar tıkladı. Idempotent olmayan bir sistemde hesaptaniki kez para çıkabilir. Idempotent bir sistemde ise ikinci istek algılanır ve işlem tekrarlanmaz.

Idempotency Nasıl Sağlanır? Pratik Stratejiler

Idempotent iş akışları tasarlamak için birkaç temel yaklaşım var. Senaryona göre bunları tek başına veya birlikte kullanabilirsin.

1) Idempotency Key Kullanımı

En yaygın yöntem, her işleme benzersiz bir anahtar (idempotency key) atamaktır. Bu anahtar genellikle istemci tarafından üretilir ve her istekle birlikte gönderilir.

Stripe, PayPal gibi ödeme API’leri bu yöntemi standart olarak sunar. Header’da “Idempotency-Key” göndererek aynı ödeme isteğinin tekrar işlenmesini engellersin.

2) Doğal Anahtarlar ve Unique Constraint’ler

Bazı durumlarda işindoğası gereği benzersiz bir tanımlayıcı zaten vardır. Örneğin:

Veritabanında bu kombinasyonlara unique constraint koyarak, aynı kaydıniki kez oluşmasını fiziksel olarak engelle. INSERT işlemi zaten varsa hata verir, sen de bunu yakalar ve “zaten işlendi” yanıtı dönersin.

3) Durum Makinesi (State Machine) Yaklaşımı

Karmaşık iş akışlarında her adımı bir durum olarak modellemek etkili bir stratejidir. İşlem ancak belirli bir durumdaykenilerleyebilir:

Bu yaklaşım özellikle uzun süren iş akışlarında (saga pattern, workflow orchestration) oldukça faydalıdır.

4) Conditional Updates

Veritabanı güncellemelerinde “eğer şu durumdaysa güncelle” mantığı kullan. Örneğin:

UPDATE orders SET status = ‘shipped’ WHERE id = 123 AND status = ‘processing’

Bu sorgu, sipariş zaten “shipped” durumundaysa hiçbir satırı etkilemez. Böylece aynı güncelleme isteği birden fazla kez gelse de sonuç değişmez.

Yaygın Hatalar ve Yanlış Bilinenler

Idempotency implementasyonunda sık karşılaşılan bazı tuzaklar var. Bunlardan kaçınmak, sağlam bir sistem tasarlamak için kritik.

Yanlış Bilinen #1: “Veritabanı Transaction’ı Yeterli”

Transaction atomiklik sağlarama idempotency sağlamaz. İşlem başarılı olduktan sonra ağ hatası yaşanırsa istemci yanıt alamaz ve tekrar dener. Transaction bunu engellemez, sadece yarım kalmış işlemleri geri alır.

Yanlış Bilinen #2: “UUID Üretmek Yeterli”

Sunucu tarafında UUID üretmek idempotency sağlamaz. Çünkü her istekte yeni UUID üretilir. Anahtar istemci tarafından üretilmeli ve tekrarlayan isteklerde aynı anahtar kullanılmalı.

Yanlış Bilinen #3: “Sadece Yazma İşlemlerinde Gerekli”

Okuma işlemleri de yan etkiler yaratabilir. Örneğin bir API çağrısı “görüntülenme sayısını artır” gibi bir yan etki tetikliyorsa, bu da idempotent tasarlanmalı.

Dikkat Edilmesi Gereken Noktalar

Gerçek Dünya Senaryoları

Teorik bilgiyi pratiğe dökmek için birkaç somut örneğe bakalım.

Senaryo 1: E-Ticaret Sipariş Oluşturma

Kullanıcı sepetini onayladı, “Siparişi Tamamla” butonuna tıkladı. Ağ yavaş, sayfa yanıt vermedi, kullanıcı tekrar tıkladı. Çözüm: Sepet ID + kullanıcı ID + timestamp kombinasyonuyla bir idempotency key oluştur. Bu key ile gelen ikinci istek algılanır, aynı sipariş numarası döndürülür.

Senaryo 2: Webhook İşleme

Üçüncü parti servis (örneğin ödeme sağlayıcısı) sana webhook gönderiyor. Bazen aynı event birden fazla kez gelebilir (bu normal ve beklenen bir davranıştır). Çözüm: Webhook payload’ındaki event ID’yi sakla. Aynı ID tekrar geldiğinde işlemi atla.

Senaryo 3: Mesaj Kuyruğu Tüketimi

RabbitMQ veya Kafka’dan mesaj okuyorsun. Consumer işlemi tamamladıama ACK göndermeden çöktü. Mesaj tekrar kuyruğa düştü. Çözüm: Her mesajda benzersiz bir correlation ID olmalı ve işlem bu ID’ye göre idempotent tasarlanmalı.

Sıkça Sorulan Sorular

Idempotency key ne kadar süre saklanmalı?

Genelde 24ila 48 saat yeterlidir. Çok kısa tutarsan meşru retry’ları yakalayamazsın, çok uzun tutarsan depolama maliyeti artar. Kritik finansal işlemler için bu süreyi uzatmayı düşünebilirsin.

Tüm API endpoint’leri idempotent mi olmalı?

Hayır,ama yan etkisi olan (state değiştiren) tüm endpoint’ler için idempotency düşünülmeli. Salt okuma yapan GET istekleri zaten idempotent. POST, PUT, PATCH, DELETE için mutlaka değerlendir.

Idempotency ile caching aynı şey mi?

Hayır. Caching performans optimizasyonu için sonuçları saklar. Idempotencyise işlemin tekrar çalıştırılmasını engelleyerek veri tutarlılığını korur. Farklı amaçlara hizmet ederlerama birlikte kullanılabilirler.

Microservices mimarisinde her servis ayrı ayrı mı idempotent olmalı?

Evet. Dağıtık sistemlerde her servis bağımsız olarak idempotent tasarlanmalı. Saga pattern gibi orchestration yaklaşımlarında her adımın idempotent olması, compensation (geri alma) işlemlerini de kolaylaştırır.

Idempotency performansı olumsuz etkiler mi?

Ek bir veritabanı sorgusu veya cache lookup gerektirir, bu da küçük bir overhead yaratır. Ancak bu maliyet, çift işlem kaynaklı sorunların maliyetiyle karşılaştırıldığında ihmal edilebilir düzeydedir.

Sonuç: Güvenli Tekrar Deneme Kültürü

İş akışlarında idempotency, modern yazılım sistemlerinin olmazsa olmazlarından biri. Ağ güvenilirliğinin hiçbir zaman %100 olmadığı, retry mekanizmalarının standart hale geldiği bir dünyada, aynı işlemin güvenle tekrar denenebilmesi kritik bir gereklilik. Idempotency key’ler, unique constraint’ler, state machine yaklaşımları ve conditional update’ler bu hedefe ulaşmak için kullanabileceğin temel araçlar.

Yeni bir API endpoint veya iş akışı tasarlarken “bu işlem iki kez çalışırsa ne olur?” sorusunu kendinesor. Yanıt “sorun olmaz” ise doğru yoldasın. Eğer “veri tutarsızlığı olabilir” ise idempotency stratejini gözden geçirmen gerekiyor. Bu yaklaşımı benimseyerek hem kullanıcı deneyimini iyileştirir hem de gece yarısı çağrılarından kurtulursun.