Web Uygulama Mimarisi: Gelecek Sağlama

7 Cevap php

Şu anda e-postalar gönderen bir web uygulaması var. Zaman benim web uygulamaları (e-posta gönderme ve kullanıcı eylemlerine dayanmaktadır - otomatik değil) e-posta gönderir, bu dosyaları sıkıştırma gibi diğer süreçleri çalıştırmak zorundadır.

Benim uygulama "gelecek kanıtı" yapmaya çalışıyorum - ben orada sunucu gergin istemeyen kullanıcılar çok sayıda, bu yüzden ne zaman bu yüzden gönderilmesi gereken e-postalar ve sıkıştırılmış olması gereken dosyaları koyarak düşündüm Bir kuyrukta. Tabloda koyun ve sonra her saniye kontrol ve (bir defada x satır) onları yürütmek için bir cron işi kullanın.

Iyi bir fikir üstünde mi? Ya da daha iyi bir yaklaşım var mı? Ben gerçekten bu kendimi daha sonra baş ağrısı kaydetmek için düzgün yapılması için yardıma ihtiyacım var :)

Tüm teşekkürler

7 Cevap

Bu iyi bir yaklaşım, ama şu anda yapabileceğiniz en önemli şey mesajları sıraya için açık bir arayüzü var ve kuyruğunu tüketen için. DB kodlanmış sona ya da üzerinde kullanımını yapmayın.

Bu bir darboğaz olursa Daha sonra, hatta DB erişimi olmayan farklı bir makineden yapılabilir gönderirken postayı isteyebilirsiniz, bu nedenle ön bu küçük yatırım sonra size seçenekler verecektir.

Sen görmezden olabilecek tek yönü o bir kadar ekleyebileceğiniz (kolayca çift) zip sürede büyük iyileştirmeler yapmak gibi zip sürecinde hafif sıkıştırma düzeyini kullanmak senin yararına olabilir, kullandığınız vızıltının hız lot Birden fazla kullanıcı aleme olsun.

Hatta daha iyi sıkıştırma akıllı yapmak ve büyük zaten sıkıştırılmış dosyaları (MP3, ZIP, DOCX, XLSX, JPG, GIF, vb) sıkıştırma ve yüksek sıkıştırma kullanarak olduğunuzda basit metin dosyaları (TXT, XML olduğunda hiçbir sıkıştırması kullanırsanız DOC, onlar bile ağır sıkıştırma ile çok hızlı bir şekilde zip gibi XLS, vb.)

Bir önemli nokta daha ziyade bir kez cron işi çalıştırmak zorunda daha olabilir, her saniye, çıkışta otomatik olarak yeniden başlatılır olan bir zaman çalışan daemon var - ya da bunun gibi bir şey.

Bir nedeni, kullanıcıların bir sürü gönderdi ve kuyruk bir cronjob ext biri istatistiklerini önce Fince için zaman yok olacak, kurar olmak için e-posta eğer sen istemek, bunu kendiniz gibi tarif olduğunu, ve sistem sular altında olan risk süreçlerle.

Iyi bir fikir üstünde mi? evet

yolda milyonlarca kullanıcı işlemek için daha iyi bir çözüm olabilir mi? belki .. ama thats değil önemli olan. Önemli olan bu soyutlama tabakası inşa olmasıdır. Deli trafik var ve cron kuyruk uydurarak değil, bir gün yolda Eğer kullandığı kod herhangi değiştirmeden katmanın işlevlerini değiştirebilirsiniz.

Hmm. Ben cron her saniye bir şey çalışan fikir gerçekten sevmiyorum. Bu şekilde çok sık gibi görünüyor. Uygulama gerçekten duyarlı olması gerekiyorsa, o zaman senkron tutmak gerektiğini düşünüyorum. Bu web uygulamasında işleme tutmak ve sunucu gerginlik seviyesini düşük tutmak için başka yollar aramaya vardır.

Eğer kontrol arasında daha bekleyebilir, o cron işi bir defada 1 öğe için kuyruğunu kontrol olması daha iyi olurdu. Bir, süreç, ve sonra çıkmadan bir sonraki için tekrar kontrol edin varsa. Bir, çıkış ve beş dakika kadar tekrar deneyin yoksa.

Ancak, tüm bu söyleniyor, herhangi bir iyi Mail Transfer Agent (sendmail, postfix, Exchange) built-in kuyruk olacak. Muhtemelen beklenmedik olur emin teslimatı yapma olabilir oluşur daha iyi bir iş yapmak olacaktır. Işleme e-posta sıraya hakkında düşünmek için bir çok şey var. Ben genelde erken sürecinde ben olabildiğince bir MTA el-off giden e-posta için tercih.

--
bmb

Kuyruğa dağıtılan şeylere oluşturun. Eğer hacim ölçeklediğinizde bir darboğaz gelebilir nereye katmanlı farklı katmanları ölçekli olabilir.

Cron her saniye çalıştırmak için bir sebep var mı? Hacmi yüksek mi? Onlar İlginiz için mücadele gibi şeyleri içinde ve dışında ve Refactor bit takas çünkü ben bunu bir n-katmanlı uygulama tutmak için elinden geleni söyleyebilirim.

Eğer birkaç hafta için tasarım bir şey inşa etmek için çalışın. Şeyler in kilitli olsun önce sık sık diğer senaryolar sonra size gelecektir

İyi bir yaklaşım. Bazı iyileştirmeler:

  1. Bir cron işi kullanmayın, bunun yerine bir zamanlayıcı üzerinde sorgulayabilir.
  2. Kriteri birden fazla okuyucu / yazar tutmak için bir devlet bayrağını içerir.
  3. Okuyucu kuyruğunu tahliye olmalıdır - kuyruğu okuma bitinceye kadar blok yok.
  4. Basit tutun. Yazar / okuyucu konuşma içine karmaşıklığı ve incelik koyun.

Benim durumumda bu güzel dönüşebilecek.