2015-12-16 5 views
9

मेरे पास एक एकल सर्वर है जो रैक्स स्पेस पर चल रहा है जो एक एकल PHP वेब ऐप होस्ट कर रहा है।PHP के माध्यम से भारी प्रसंस्करण कार्यों के लिए पुश अधिसूचना कतार के रूप में AWS SQS/SNS का उपयोग कैसे करें?

PHP वेब ऐप एक फॉर्म सबमिशन स्वीकार करेगा जिसे फ़ॉर्म फ़ील्ड प्रविष्टियों के आधार पर एक कार्य करने की आवश्यकता है।

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

मैंने उसी वेब ऐप में संगीतकार का उपयोग करके "aws/aws-sdk-php": "~3.11" स्थापित किया है।

कोड कि फ़ॉर्म जमा

$result = $model->save($_POST); 
// this code will send the information to either SQS or SNS 
$awsClient->sendsMessage($_POST); 
if ($result) { 
    $this->redirect('success.html'); 
} 

मैं fanout architecture एडब्ल्यूएस द्वारा कहा गया के बारे में पढ़ा है संभालता है:

मेरे योजना शुरू में यह है।

फैनआउट वास्तुकला उदाहरण के साथ मेरी मुद्दों (मैं यह समझ के रूप में) इस प्रकार हैं:

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

मैंने पाया एक संभव समाधान का सुझाव दिया here

सुझाव दिया समाधान है:

  1. एक एसएनएस विषय के लिए संदेश भेजें।

  2. एसएनएस विषय एक एसक्यूएस कतार और मेरे वेब ऐप दोनों को संदेश देगा।

  3. मेरे वेब अनुप्रयोग, शुरू हो जाने के बाद, एक ही SQS कतार कि है अब कतार जब तक लगातार संदेश पंक्तिबद्ध पोल जाएगा खाली

दोष यह है कि मैं इस से देख रहा है अपने वेब एप्लिकेशन को कतार में संदेश से पहले कतार का चुनाव होगा।

एडब्ल्यूएस सेवाओं का उपयोग करके पुश कतारों को लागू करने का सबसे अच्छा तरीका क्या है?

उत्तर

23

अपने वेब एप्लिकेशन से पहले कतार में ही, सही संदेश

आप इसे करने की कोशिश नहीं किया है, तो कतार मतदान होगा? :) मुझे डर है कि आप इस पर विचार कर रहे हैं।एसक्यूएस में लंबी मतदान है, जो कम से कम एक संदेश उपलब्ध होने तक मतदान अनुरोध को निलंबित करने का कारण बनता है, जिस बिंदु पर संदेश (आपके द्वारा अनुरोधित अधिकतम संख्या तक) वापस कर दिया जाएगा। आप 1 से 20 सेकंड तक लंबे मतदान प्रतीक्षा समय निर्धारित कर सकते हैं। अगर इस समय के फ्रेम में कोई संदेश उपलब्ध नहीं है, तो प्रतिक्रिया संदेश के साथ वापस आती है।

यदि आप एसएनएस से अधिसूचना के जवाब में कतार मतदान करते हैं, तो यदि आप लंबे मतदान का उपयोग करते हैं तो वहां संदेश मिलेंगे। संदेशों में देरी हो सकती है, लेकिन अत्यधिक असंभव है।

दूसरी समस्या, हालांकि, आपका दावा है कि आप नहीं चाहते हैं कि ऐप लगातार एसक्यूएस मतदान कर रहा हो। मुझे इस आपत्ति का काफी बार सामना करना पड़ता है, और इसे अक्सर गलत स्थान दिया जाता है। एसक्यूएस लंबे मतदान के साथ, "लगातार" एक खाली कतार मतदान का मतलब हर 20 सेकंड में एक अनुरोध है। यह 3 रिक/मिनट, 180 रेक/घंटा, 4320 रिक/दिन, 12 9 600 रिक/माह ... है जो हर महीने अनुमति देने वाले 1 मिलियन से कम निःशुल्क अनुरोधों से कम हो जाता है।

आपकी सर्वर के साथ समस्याएं श्रमिकों की एक उचित संख्या के साथ पृष्ठभूमि में एक कतार मतदान करने के बजाय अधिसूचनाओं पर प्रतिक्रिया करने की समस्या यह है कि आप संभावित रूप से एक ही समय में आने वाली नौकरियों के एक बड़े समूह द्वारा आसानी से अभिभूत होंगे। यदि आपको 10 समवर्ती अनुरोध मिलते हैं, तो क्या आप इसे संभाल सकते हैं? 100? 1000? अक्सर, इस तरह के असीमित नौकरियों के लिए, नौकरी का अनुरोध करने के लिए नौकरी का अनुरोध करने के लिए यह कम लागत (संसाधनों के संदर्भ में) खर्च करता है (उदाहरण के लिए, किसी छवि को अपलोड करने के लिए उस छवि को आकार देने के बजाय बहुत कम CPU की आवश्यकता होनी चाहिए)। जब तक आप अपनी प्रतिक्रिया प्रतिक्रिया को समन्वयित नहीं करते हैं, तो आप अपने सिस्टम को जबरदस्त कर सकते हैं।

"मतदान खराब है, धक्का अच्छा है" के एक वैचारिक जाल में न पड़ें जहां यह लागू नहीं होता है। उस समय का विशाल बहुमत, भावना बिल्कुल सही है ... मतदान लगभग हमेशा गलत समाधान होता है ... लेकिन एसक्यूएस लंबे मतदान के साथ, आपके पास वास्तव में एक पुश तंत्र है जो इसे HTTP के साथ संगत बनाता है , और मतदान के निहित बुराई में से अधिकांश ... गायब हो जाता है। यदि आप लंबे मतदान के बीच में हैं, तो कतार खाली है, और एक संदेश आता है, आपका लंबा मतदान लगभग तुरंत उस संदेश के साथ वापस आ जाएगा। यह समय-समय पर होने का इंतजार कर बैठता नहीं है। कतार देखने वाली पृष्ठभूमि प्रक्रिया सभी के बाद जाने का एक अच्छा तरीका हो सकता है।

+0

जी धन्यवाद। मैंने ऐसा नहीं सोचा था। बहुत बढ़िया जवाब! मैं आपको इसके लिए अतिरिक्त 50 अंक देता हूं जब कल बक्षीस खोला जा सकता है। –

+1

क्षमा करें। केवल अब मैंने आपको अतिरिक्त 50 अंक दिए हैं –

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