Bana nasıl mesaj kuyruk çalıştığını anlamak yardımcı

2 Cevap php

Oldukça uzun bir süre için PHP kullanıyorum ve ben bütün bu "mesaj kuyruğu" tüm hakkında ne olduğunu merak ediyordum. Kullanıcı örneğin facebook alalım. Benim durumunu güncelleyebilirsiniz ama sonra ben tüm arkadaşlarıma (Diyelim ki 3000 takipçileri var diyelim) bu durum güncellemelerini göstermek zorunda. Orada yorum ve e-posta yoluyla bir yorum yaptı tüm arkadaşlara bildirilmek zorunda bile daha fazla çalışıyor. Ben gördüğüm örnek, tüm bir mesaj kuyruğu "mesajı" (my status update) take olmadığını görünür ve bazı geçici boşluk (dosya sistemi veya DB tablo) içine koyar. Ben o zaman dışarı çıkarır ve benim tablo güncelleştiren bir cron işi var.

Bunu dedi, nasıl bu verileri manipüle hakkında nasıl gidiyor? Ben bu gerçekten bana yardımcı olacağını nasıl karıştı alıyorum sanırım. Nasıl bir mesaj kuyruğuna aşağıdaki işlevi tercüme yapmak ve ardından daha sonraki bir zamanda çalışacak şekilde işlev için zamanlama?

1 - Update my status 2 - Now publish it across my page and all my friends. 3 - If comment is left, now email that latest comment to those who "subscribe" to that comment.

Benim soru nasıl bu verileri işlemek mi, nedir? Ben sadece yorum çeker "comment" sonra olan bir "iş" dışarı yerleştirin ve onu işleyen bir işlevi takın musunuz?

Burada bakarak planı bir örnek.

http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html

Şimdiden teşekkürler.

2 Cevap

My question is, how do I manipulate that data? Do I just insert the "comment" then have a "job" that pulls that comment out and plug it into a function that processes it?

Kesinlikle.

Facebook sayfaları arasında Yayıncılık durum güncellemeleri muhtemelen mesajı kuyruğa anlamına gelmez - Ben aslında onların özel tasarım bilmiyorum, ama kullanıcılar kendi sayfalarını yüklemek zaman güncel veri sadece bir sorgu üzerinden on-demand verilir olduğunu tahmin ediyorum. (Facebook durum güncelleme verilerini denormalize ayrı bir işlem olmadığı sürece.) 1

Buna karşılık, durum güncelleme e-posta bildirimleri göndermek mesajı kuyruk için büyük bir aday.

Belki de "EmailStatusUpdateNotifications" kuyruk - Tipik bir uygulama, özel bir mesaj kuyruğuna (genellikle az, belki de sadece kullanıcı id) Yeni bir mesaj yazarken içerecektir.

Başka bir işlem daha sonra mesajları Dequeues ve onlarla tam olarak ne bilir. Durum güncelleme e-posta mesajları göndermek adanmış bir süreç, mevcut durumu ve arkadaşlarınızın e-posta adreslerinin listesini yüklemek e-posta mesajları oluşturmak ve bunları göndermek için kullanıcı kimliği (mesajın içeriği) kullanmak istiyorsunuz.

1 Bu Yüksek ölçeklenebilirlik de Why are Facebook, Digg, and Twitter so hard to scale? Facebook'un mimarisi hakkında iyi bilgi bir sürü bulabilirsiniz çıkıyor.

Ben sadece yorum çeker "comment" sonra olan bir "iş" dışarı yerleştirin ve onu işleyen bir işlevi takın musunuz?

Ileti kuyrukları ile noktalarından biri hizmetlerini ayrılabilmesi için, ve asenkron işlem yapmaktır.

Eğer birisi kendi durumunu değiştirdiğinde belirli bir sıraya bir mesaj göndermek istiyorum, bir ileti sırası hizmeti çalışıyor olurdu. Eğer bir kullanıcı kendi durumunu değiştirmek yaptığında çalıştırmak alır php kodundan o yapabilir.

Eğer o sıradan iletileri çeker bir hizmet / arka plan iş çalıştıran bir yere olurdu. Bu kesinlikle bir HTTP çağrısı dayalı mesaj gönderdi PHP sürecine harici bir şey olurdu. Bu iş sırasından mesajlar çeker, yapar ileti posta göndermek ve ardından posta göndermek için kim bulmaktan işleme gibi.

Şimdi böyle posta güncellemeleri işlemek için esnek bir yol var.

  • Bu posta güncelleme hizmeti web sunucusu başka bir makinede çalıştırmak için oldukça kolay olurdu.
  • Bu size daha fazla güce ihtiyacınız olsaydın ölçekli kolay.
  • Daha kolay bir gecikmiş gönderme uygulamak - örneğin Eğer posta göndererek bir dakika veya 2 beklemek olabilir ve kullanıcı tekrar durumunu günceller ise, 2, sadece 1 mail gönderecek
  • Onun durumunu değiştirdi kullanıcının http isteği dahilinde bütün bunları yapmıştı, o tüm bu işlem bitene kadar beklemek zorunda kalacak.