solaris - Making a Perl script detect changes in a separate config module also in Perl -
G'day,
हमारे पास पर्ल स्क्रिप्ट है जो सिर-ओवर से जियोलोकेशन अनुरोधों को प्रोसेसिंग कर रही है एक प्रमुख वेब साइट में सर्वर स्क्रिप्ट एक ब्रोकर है, जो कि सीओटीएस उत्पाद द्वारा दिए गए डेटा की व्याख्या में अतिरिक्त व्यावसायिक तर्क प्रदान करता है जो किसी दिए गए IP पते के लिए डेटा प्रदान करता है, उदा। देश, कनेक्शन प्रकार, रूटिंग प्रकार, कैरियर, आदि।
इस भौगोलिक सेवा वर्तमान में सीओटीएस बैकएंड में प्रति सेकंड लगभग 1,000 अनुरोधों का चरम भार संभाल रही है। बीटीडब्लू यह वास्तव में 5,000 अनुरोधों पीडीएस की सेवा कर रहा है। अपने समर्पित भारबोलेंस / कैश परत से जो सीधे ब्रोकर परत से पहले रहता है।
मुझे हाल ही में इस दलाल के व्यवहार को संशोधित करना पड़ा है ताकि हम उन नए कनेक्शन के कनेक्शन की अनुमति दे सकें जो हम देख रहे हैं साइट जो कुछ समस्याएं पैदा कर रही है।
स्क्रिप्ट का मूल संस्करण, मेरा डिज़ाइन नहीं! बीटीडब्ल्यू, स्क्रिप्ट में खुद की कॉन्फ़िग आइटम्स और अलग पर्ल टुकड़ों में अन्य मदों के मिश्रण का उपयोग करके बनाया गया है। जैसा कि मेरे परिवर्तनों की पीअर समीक्षा के दौरान काफी सही तरीके से बताया गया था, हमें शायद सभी कॉन्फ़िग आइटम्स को अलग-अलग होने के लिए माइग्रेट करना चाहिए, बजाय एम्बेडेड और अलग कॉन्फ़िग आइटम के मिश्रण के साथ जारी रहना।
अब मैं चाहता हूं इसे आगे ले जाने के लिए और सभी कॉन्फ़िग आइटम्स को अलग पर्ल हैश के रूप में बनाया गया, एक सिंगल कॉन्फ़िग फाइल में।
फिलहाल हमें नए एप्लिकेशन को पुनः लोड करने के लिए पूरे एप्लिकेशन को रोकना और पुनः आरंभ करना होगा , यातायात के स्तर को देखते हुए, थोड़ा असुविधाजनक है, हालांकि दो अलग-अलग डेटा केंद्रों पर दलाल के चार उदाहरण हैं, इसलिए हम वास्तव में सेवा कभी नहीं खो देते हैं।
मुझे संदेह है कि मुझे सहारा देना होगा एक टाइमर रखते हुए, या शायद एक अनुरोध काउंटर, और सवाल में कॉन्फ़िग फाइल पर एक स्टेट का प्रदर्शन या शायद कॉन्फ़िग फाइल के लिए कॉन्फ़िगर किए गए टीटीएल भी हैं और इसे हर दस मिनट या फिर पुनः लोड कर सकते हैं।
लेकिन क्या पर्ल ने पहले से लोड किए गए फ़ाइल के एक नए संस्करण को स्वचालित रूप से लोड करने का एक तरीका है? मैं अपाचे mod_perl मॉड्यूल द्वारा प्रदान की तरह व्यवहार के बारे में सोच रहा हूँ।
चीयर्स,
रोब, कुछ बिंदु:
1) अधिमानतः, कॉन्फ़िगर रीडर को एक एपीआई में सार के रूप में एक पर्ल हैश से सीधे पढ़ने के विपरीत। इस तरह, उस एपीआई के लिए कोई भी कॉल बदले में यह तय कर सकता है कि कॉन्फ़िग के साथ क्या किया जाना चाहिए (जैसे टाइमर ऊपर है, क्या कॉन्फ़िग फ़ाइल टाइमस्टैम्प परिवर्तन किया था?)।
हमेशा की तरह, इसमें आपको किसी भी सॉफ़्टवेयर को बदले बिना बाद में (पर्ल => xml => डाटाबेस) कॉन्फ़िगर करने के लिए अनुमति देने के अतिरिक्त लाभ होता है।
2) यह सर्वर के रूप में देख रहा है, मैं भी एक विशेष अनुरोध प्रकार के माध्यम से ऑन-डिमांड कॉन्फ्रेंस पुनः लोड कार्यक्षमता की सिफारिश करता हूं। यह आपको कॉन्फ़िगरेशन पुनः लोड (जैसे कि कॉन्फ़िग फ़ाइलों को अपडेट करने के बाद) को बाउंस करने के बजाए सर्वर पर कमांड भेजकर मजबूर कर देता है।
BTW, # 2 बहुत आसान है अगर आप # 1 का अनुसरण करते हैं, चूंकि "पुनः लोड कॉन्फ़िग" हेन्डलर को "रीफ़्रैड कॉन्फ़िग" हैंडलर की ज़रूरत है, उसे रीसेट करना है "कॉन्फ़िग को अगली कॉन्फ़िग एपीआई कॉल पर पुनः लोड करने की आवश्यकता है" ध्वज।
3) यदि आप कॉन्फ़िग को एक हैश के रूप में रखते हैं कोई एपीआई नहीं (उदाहरण के लिए एपीआई सब-रूटिन कॉल को खत्म करने के लिए प्रदर्शन कारणों के लिए, जो सुविधाजनक है लेकिन बहुत मदद करने की संभावना नहीं है), तो आपको कॉन्फ़िग को अपनी कक्षा में एक स्थिर वैरिएबल में रखना होगा, और उस वर्ग को "सेट न्यू कॉन्फ़िग" विधि प्रदान करना होगा । तब सर्वर टाइमर सेट करेगा, और टाइमर कॉल पर (या # 2 से "पुनः लोड करें कॉन्फ़िग" कमांड प्राप्त करने पर) यह जांच करेगा कि क्या टाइमस्टैम्प और / या कॉन्फ़िग फ़ाइल का चेक-योग पिछली बार जब आप बुलाया गया था और पुनः लोड करें।
Comments
Post a Comment