Zomato'da Ödeme Başarısız: Sistem Tasarımı Perspektifinden Ne Oluyor?
Gece yarısı pizza siparişi veriyorsun, ödeme ekranında Paytm'de bakiye yetersiz yazıyor, sipariş iptal oluyor. Ama senin bakiyesi aslında yeterliydi, sadece sistem bunu anlık göremedi. Bu durum, büyük ölçekli e-ticaret sistemlerinde sıkça karşılaşılan bir sorun ve tasarımsal bir zorluk.
Zomato gibi bir platformda ne oluyor? Kullanıcı ödeme yaptığında, sistem aslında üç ayrı işlemi sırayla gerçekleştirmeye çalışıyor: siparişi oluştur, ödeme işle, restorandan onay al. Eğer bu adımlardan biri başarısız olursa (mesela Paytm API'si gecikiyorsa ya da o anki yük yüksekse), sistem sipariş ve ödemeyi tutarsız bir durumda bırakabilir.
Bhanu Partap'ın sistem tasarım yazısında bu sorunu çözmek için SQS (Simple Queue Service) gibi mesaj kuyruğu sistemlerinin nasıl yardımcı olabileceği açıklanıyor. Fikir şu: ödeme başarısız olsa bile, sipariş ve ödeme bilgisini bir kuyruğa koy, sonra arka planda yeniden dene. Böylece kullanıcı "sipariş verildi ama ödeme bekleniyor" durumunu anlayabilir ve sistem daha tutarlı kalır.
Pratik olarak, iyi tasarlanmış bir sistem seni yanıltmaz. Eğer ödeme başarısızsa, sipariş oluşturulmaz veya hemen iptal edilir, belirsiz bir ara durumda kalmaz. Zomato'nun gerçek sisteminde bu tür sorunları minimize etmek için veritabanı işlemleri (transactions) ve retry mekanizmaları kullanılır. Ay sonunda bakiye sorunu yaşıyorsan, bankan veya Paytm'in API'sinin o anki durumunu kontrol etmek ilk adım.
0 yorum