API / Fonksiyon çağrılarını kullanarak veya Cron Job yaklaşım olacak - işlemler ile ilgili olarak bir soruşturma - Bunu nasıl ele alabileceğinizi?

2 Cevap php

Sizi bir şeyler çalıştırmak istedim. Ben kabaca şudur yeni bir proje başlıyorum:

Önemli bilgiler: PHP ve MySQL kullanarak am

Ben farklı kullanıcılardan bir API yapılacak işlemlerin bir listesini almak her dakika.

Örnek:

user1 send $1 to user2
userx send $2 to usera
userw send $0.50 to user2

etc..

User1 user2 için 1 $ göndermek istediğini söylüyorlar. Orada iki posibilities vardır bu başarılı olduğunu ya da orada yetersiz fon veya kullanıcı adı yanlış yazıldığından çünkü başarısız bulunuyor. Bu unsuccesfull eğer ben kullanıcıya bir mesaj göndermek.

Ben şimdi çeşitli seçenekler karşı karşıyayım - benim düşünce sürecinde benimle çıplak lütfen.

Option 1

Işlenmiş ve onları her dakika işleyen bir cronjob kullanmanız gereken işlemleri içeren bir veritabanı tablo oluşturun. Burada risk komut dosyası bir hata ya da bir zaman aşımı karşı çalıştırabilir ve diğer işlemler hala veritabanı tablosundaki Sürüyor göstermek olduğunu ifade etti. Yani bir zaman damgası karşı kontrol etmek için ikinci bir komut dosyası gerekir.

Option 2

Ben onları almak ve bana bir yanıt getiriyor sonra her bir işlem için çağrılan bir API veya Fonksiyon oluşturma. O zaman ben bu yanıt ile uğraşmak veya bir sonraki işlem geçmek için başka bir API veya Fonksiyonu arayabilirsiniz hangi. Ancak ben hala betiğin durursa onları kaybetme riski alamaz çünkü bir veritabanı tablosunda onları koymak gerekir. Yani aşağıdaki gibi çalışır: Veritabanı tablosundaki tüm işlemleri koymak - hareketi başlatmak - bitmiş işlem tablodan sildiğinizde - hareketi başlatmak 2.


Both options are flawed because you don't know how long the list of transactions will be. If it's long PHP is definitely not optimal to run for a long time - using set timeout to zero is risky. I am looking to create a solution that will scale with PHP. So I was thinking about an Option 3.


Option 3 (Optimal solution?)

10 işlemleri dönmek için bir API kullanın.

Veritabanında onlar gönderildikleri zaman söyleyecek bir senaryo ve zaman damgası gönderilen söylemek için bir bayrak

PHP script API 10 işlemleri retreives - 10 işlemleri yönetir.

Işlem Tamamlandığında - Bu tablodan silin ve tamamlanan işlem tabloya kopyalayın.

Timesent (10 işlemlerin yürütme zaman bir üst sınır dayalı) X dakika sonra büyük ise bir cronjob komut her 3 dakikada bir kontrol var. Gönderilmedi bunları ayarlamak - - Eğer büyükse bu yüzden tekrar dışarı gönderilebilir.


Gördüğünüz gibi ben bu konuda benim bütün düşünce sürecini yazdı ve girdi arıyorum. Kaçırdığım şeyler olacaksa bağlı bulunuyor. Ayrıca bu gerçek mali işlemlerin olmadığını fark edin - ben bunu açıkça yapmak için kullanabilirsiniz sadece iyi metafore bulunuyor.

Çok teşekkür ederim

Buz

2 Cevap

Eğer mevcut teknoloji yığından minimum varyans kullanarak yapmak istiyorsanız doğru yoldayız. Esasen bir çıplak kemikleri MQ ya da iş sunucuyu yeniden yaratıyoruz.

Eğer iş / görev / işlem kuyruğuna için gereken minimum özellikler şunlardır:

  • iş (user1 user2 $ 2 göndermek)
  • devlet (hazır, dışarı işleme, hata yapılır)

Ayrıca muhtemelen istediğiniz gidiyoruz

  • son hata dizesi (yani ne oldu anlamaya)
  • (başarısız önce denenmesi gereken görevler için, nedeniyle geçici hataları başarısız olabilir bir şey) muhtemelen bir deneme sayısı

Eğer işleme cron işi parallelize karar verirseniz, size büyük gruplar üzerinde çalışmaya başlar, özellikle işleme için bir iş çıkışı vardır komut hangi örneği izlemek isteyeceksiniz. (Eğer bunu yaparsan ve emin herhangi bir işlem hızlı bitirir yapmak izlemek istiyorum gidiyoruz, ya da etkili bir tek yavaş işin arkasında tüm işleri oyalayabilirim)

Eğer bir API veya düz veritabanından getir olsun biri 6, diğer yarım düzine.

Ben bu işlem için istek alındığında her işlem işleme öneririm.

IE Bob Alice için 20 $ göndermek için bir 'Para gönder' düğmesine tıklar. Ben bu işlem işlemek için bir fonksiyon çağırmak ve onlara bir 'Başarılı İşlem' ya da orada 'bir sorun vardı ..' mesajı gösterecektir.

Bir işlem uzun sürer, bunu işleme sunucu tarafında yapılırken, onlara 'İşleme ..' diyerek güzel bir ilerleme çubuğu göstererek, AJAX üzerinden yapılır ve sonra onları yönlendirmek ya olabilirdi {[(0) ]} veya yoursite.com/transactions.php?result=failure&id=$id