PHP

2011-10-11 6 views
12

के साथ बीनस्टॉकड कैसे सेट करें हाल ही में मैं PHP के साथ बीनस्टॉकड के उपयोग की खोज कर रहा हूं। मैं काफ़ी सीखा है लेकिन एक सर्वर पर सेटअप के बारे में कुछ प्रश्न हैं, आदिPHP

यहाँ कैसे मैं इसे काम करते हुए देखना है:

  1. मैं Beanstalkd और (जैसे libevent के रूप में) किसी भी निर्भरता स्थापित मेरे उबंटू सर्वर पर। मैं फिर बीनस्टॉकड डिमन शुरू करता हूं (जिसे मूल रूप से हर समय चलाना चाहिए)।
  2. कहीं मेरी वेबसाइट में (जैसे जब कोई उपयोगकर्ता कुछ क्रियाएं करता है, आदि) कार्य Beanstalkd कतार के भीतर विभिन्न ट्यूबों में जोड़ा जाता है।
  3. मेरे पास एक बैश स्क्रिप्ट है (जैसे निम्न एक) जो एक डेमॉन के रूप में चलाया जाता है जो मूल रूप से एक PHP स्क्रिप्ट निष्पादित करता है।

    #!/bin/sh 
    php worker.php 
    

4) कार्यकर्ता स्क्रिप्ट ऊपर पंक्तिबद्ध कार्य निष्पादित करने के लिए कुछ इस तरह होगा:

while(1) { 
    $job = $this->pheanstalk->watch('test')->ignore('default')->reserve(); 
    $job_encoded = json_decode($job->getData(), false); 
    $done_jobs[] = $job_encoded; 
    $this->log('job:'.print_r($job_encoded, 1)); 
    $this->pheanstalk->delete($job); 
} 

अब यहाँ मेरे सवालों से ऊपर सेटअप के आधार पर (जो मुझे ठीक कर लें मैं कर रहे हैं मैं इसके बारे में गलत हूं):

  1. कहें कि मेरे पास किसी डेटाबेस या किसी चीज़ में आरएसएस फ़ीड आयात करने का कार्य है। यदि 10 उपयोगकर्ता इसे एक साथ करते हैं, तो वे सभी "परीक्षण" ट्यूब में कतारबद्ध होंगे। हालांकि, वे एक समय में केवल एक ही निष्पादित किया जाएगा। क्या एक ही समय में 10 अलग-अलग ट्यूबों को निष्पादित करना बेहतर होगा?

  2. यदि मुझे और ट्यूब की आवश्यकता है, तो क्या इसका मतलब यह भी है कि मुझे 10 कार्यकर्ता स्क्रिप्ट की आवश्यकता होगी? प्रत्येक ट्यूब के लिए सभी घड़ी() फ़ंक्शन में स्ट्रिंग अक्षर के अलावा मूल रूप से एक ही कोड के साथ एक साथ चलते हैं।

  3. यदि मैं उस स्क्रिप्ट को डिमन के रूप में चलाता हूं, तो यह कैसे काम करता है? क्या यह लगातार कार्यकर्ता.एचपीपी स्क्रिप्ट निष्पादित करेगा? वह स्क्रिप्ट तब तक रुक जाती है जब तक कतार सैद्धांतिक रूप से खाली न हो जाए, तो क्या इसे केवल एक बार लात नहीं किया जाना चाहिए? डेमॉन कैसे तय करता है कि वर्कर.एफपी को कितनी बार निष्पादित किया जाए? क्या यह सिर्फ एक सेटिंग है?

धन्यवाद!

उत्तर

5
  1. यदि कर्मचारी फ़ीड लाने के लिए बहुत अधिक समय नहीं ले रहा है, तो यह ठीक होगा। एक समय में एक से अधिक प्रक्रिया करने के लिए आवश्यक होने पर आप कई श्रमिकों को चला सकते हैं। मेरे पास एक प्रणाली है (वर्तमान में अमेज़ॅन एसक्यूएस का उपयोग कर रही है, लेकिन मैंने पहले बीनस्टॉकडी के साथ समान किया है), कतार से खींचने वाले 200 (या अधिक) श्रमिकों के साथ।
  2. एक एकल कार्यकर्ता स्क्रिप्ट (एक ही स्क्रिप्ट कई बार चल रही है) ठीक होनी चाहिए - स्क्रिप्ट एक ही समय में कई ट्यूब देख सकती है, और उपलब्ध पहला उपलब्ध होगा। आप job-stat कमांड का उपयोग यह देखने के लिए भी कर सकते हैं कि एक विशेष $ नौकरी (कौन सी ट्यूब) से आती है, या संदेश में कुछ मेटा-सूचना डाल दें यदि आपको प्रत्येक प्रकार से दूसरे प्रकार से बताना होगा।
  3. एक कर्मचारी चलाने का एक अच्छा उदाहरण described here है। मैंने शुरू करने के लिए supervisord (भी, useful post भी शुरू किया है) आसानी से शुरू करने और प्रति मशीन कई श्रमिकों को चलाने के लिए जोड़ा है (मैं first link में शेल स्क्रिप्ट चलाता हूं)।मैं इसे कितनी बार लूप्स की सीमा को सीमित कर दूंगा, और reserve() में एक संख्या भी रखूंगा ताकि इसे कुछ सेकंड तक इंतजार किया जा सके, या अगले काम के लिए एक तंग लूप में नियंत्रण से बाहर कताई के बिना उपलब्ध हो जाए जो रोक नहीं पाता बिलकुल भी - अगर ऐसा करने के लिए कुछ भी नहीं था।

परिशिष्ट: के रूप में आप की जरूरत है

  1. खोल स्क्रिप्ट में कई बार के रूप में चलाने की जाएगी। (लिंक दिखाता है कि exec [email protected] के साथ आवश्यकतानुसार इसे फिर से चलाने के लिए कैसे करें)। जब भी PHP स्क्रिप्ट निकलती है, तो यह PHP को फिर से चलाती है।
  2. स्पष्ट रूप से कुछ आंकड़े दिखाने के लिए एक Djanjo ऐप है, लेकिन यह डिमन से कनेक्ट करने के लिए काफी छोटा है, ट्यूबों की एक सूची प्राप्त करें, और उसके बाद प्रत्येक ट्यूब के आंकड़े प्राप्त करें - या बस गणना करें।
+0

लिंक के लिए धन्यवाद! मैं निश्चित रूप से उन पर ध्यान रखूंगा। # 2 के बारे में एक सवाल: उस स्क्रिप्ट को कितनी बार निष्पादित किया जाएगा? क्या यह पूरी तरह से आधारित है कि मेरे पास डेमॉन द्वारा कितनी बार मेरी बैश स्क्रिप्ट निष्पादित की गई है? – joshholat

+0

इसके अलावा, क्या कोई सुविधाजनक तरीका है (कोड स्निपेट या "डैशबोर्ड" चीज़ के माध्यम से) यह देखने के लिए कि सभी निष्पादन क्या है, आदि बीनस्टॉक के साथ? – joshholat

+1

अधिकांश/सभी लाइब्रेरी को आंकड़े, सूची-ट्यूब और स्टेट-ट्यूब आदेशों पर कॉल प्रदान करना चाहिए। कुछ अन्य भी हैं। मैंने https://github.com/andreisavu/django-jack को नहीं देखा है, लेकिन यह कुछ चीजें भी कर सकता है। –

संबंधित मुद्दे