2013-08-16 9 views
9

PHP में बैच प्रोसेसर लिखते समय (जैसा कि, यह स्पष्ट रूप से क्रॉन-एड होना होगा), गियरमैन का उपयोग करने के बीच व्यावहारिक अंतर क्या हैं और बस संसाधित होने के लिए डेटा संग्रहीत करना Redis?PHP बैच प्रोसेसर लिखते समय गियरमैन बनाम रेडिस

मेरे अवलोकन अब तक हैं कि गियरमैन वास्तविक समय में काम को धक्का देने में सक्षम है, क्योंकि PHP कोड केवल अंतराल पर चलता है, नियमित रूप से निर्धारित कमांड का उपयोग करके रेडिस कम या कम समकक्ष लगता है।

इसके अलावा, ऐसा लगता है कि गियरमैन गियरमैन लाइब्रेरी के प्रेषण जीवन चक्र को बाध्य करके ऐप में अनावश्यक जटिलता जोड़ता है।

यह सब कहा, क्या यह मानना ​​सही होगा कि गियरमैन + PHP Redis + PHP पर कोई लाभ नहीं देता है, बेंच प्रोसेसर लगातार नहीं चल रहा है?

+5

गियरमैन = बैच प्रोसेसर; redis = डेटा कैश; गियरमैन! == रेडिस; चाक! == पनीर; –

+0

खैर, रेडिस एक साधारण डेटा कैश से थोड़ा अधिक है। रेडिस के शीर्ष पर एक वितरित नौकरी सर्वर को लागू करना निश्चित रूप से संभव है, लेकिन यह इतना छोटा नहीं है। –

+0

@ मार्कबकर आपका मतलब है कि मेरे फ्रिग में पीला चाक _not_ पनीर है? :-) – raffian

उत्तर

17

गियरमैन एक वितरित नौकरी सर्वर है, रेडिस एक वितरित स्टोर है। तो यह संतरे से सेब की तुलना करने की तरह थोड़ा है।

अब, रेडिस के साथ गियरमैन जैसी सुविधाओं को लागू करना संभव है (उदाहरण के लिए सूची डेटा प्रकार के आधार पर), लेकिन यह एक ऐसा स्वयं दृष्टिकोण है। जबकि सिद्धांत सरल है, शैतान विवरण में है।

सर्वश्रेष्ठ रेडिस वितरित कतार कार्यान्वयन रूबी (रेस्क्यू) और पायथन (सेलेरी, आरक्यू) के लिए हैं। वहाँ PHP के लिए Resque का एक पोर्ट है:

https://github.com/chrisboulton/php-resque

वहाँ महत्वपूर्ण बिंदुओं जब एक Redis आधारित कार्यान्वयन के लिए Gearman तुलना करने पर विचार करने के लिए कर रहे हैं:

  • Gearman नौकरियों ग्राहक को उनके पूरा होने के बारे में सूचित, और तुल्यकालिक या असीमित हो सकता है। यदि आप कुछ विशिष्ट लागू नहीं करते हैं, तो एक रेडिस कतार केवल समापन अधिसूचना के बिना असीमित नौकरियों का समर्थन करेगी।

  • ब्रोकर की उच्च उपलब्धता। गियरमैन ऑफ-द-शेल्फ रणनीति का प्रस्ताव देते हैं। रेडिस नहीं करता है। जबकि आप मास्टर-गुलाम प्रतिकृति को कॉन्फ़िगर कर सकते हैं, और रेडिस सेंटीनेल का उपयोग कर सकते हैं, रेडिस एच एक साधारण समस्या नहीं है।

  • दृढ़ता। गियरमैन इन-मेमोरी कतारों का समर्थन करता है, लेकिन कुछ लगातार बैकएंड्स (MySQL, Drizzle, sqlite, PostgreSQL) भी समर्थन करता है। रेडिस विभिन्न दृढ़ता विकल्पों का प्रस्ताव करता है, लेकिन उनमें से कोई भी एक लेनदेन इंजन जैसे MySQL या PostgreSQL के रूप में विश्वसनीय नहीं है।

  • वर्टिकल स्केलेबिलिटी। जबकि रेडिस बहुत ही कुशल है, यह एक सिंगल थ्रेडेड प्रक्रिया है। गियरमंड एक बहु थ्रेडेड प्रक्रिया है, जो शायद बेहतर पैमाने पर हो सकती है (एक प्रक्रिया पर विचार करना)।

एक Redis आधारित वितरित काम प्रणाली को लागू करने मजेदार और दिलचस्प है, लेकिन अगर आप जल्दी से काम कर रहे कुछ चाहिए, Gearman आपका सर्वश्रेष्ठ दांव है।

+0

रेडिस बहुत तेज़ है क्योंकि यह एसिंक मॉडल पर आधारित है। –

3

डिडिएर के जवाब के अलावा, Gearman भी ऐसी है कि यदि उदाहरण के लिए ग्राहकों के एक समूह के सभी एक समान अनुरोध से पहले कार्यकर्ता काम खत्म कर दिया है, यह काम की प्रतिक्रिया वापस सभी ग्राहकों को भेज सकते हैं coalescion कार्यक्षमता प्रदान कर सकते हैं ।

विकिपीडिया से:

Gearman एक ग्राहक द्वारा भेजे गए काम पर संघीकरण प्रदर्शन करती है।यदि दो या दो से अधिक ग्राहक काम के एक ही शरीर पर काम पूरा करने के लिए कहते हैं, तो या तो देखकर कि एक ही ब्लॉक भेजे जा रहे हैं या ग्राहक द्वारा भेजे गए अद्वितीय मूल्य का उपयोग करके, यह काम को सहारा देगा ताकि केवल एक कार्यकर्ता उपयोग किया गया। यह इस विशेष रूप से गरजने झुंड समस्याओं जो कैश हिट विफलताओं के लिए आम हैं से बचने के लिए करता है

यह और अधिक जटिल Redis में लागू करने के लिए किया जाएगा।

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