2008-11-30 12 views
6

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

यह एक रिवर्स-प्रॉक्सी/लोड बैलेंसर है जो बाद में संसाधित सामग्री है और हमें इसे संभालने में सक्षम होना चाहिए प्रॉक्सी/एज। बैकएंड के लिए प्रारंभिक अनुरोध एक मोटा टेम्पलेट लौटाएगा, फिर प्रॉक्सी सॉफ़्टवेयर इसे पूरा करने के लिए उस टेम्पलेट को संसाधित कर सकता है। मार्कअप कुछ इस तरह दिख सकता है:

<html> 
<body> 
    <div id="content"> 
    Lorem ipsum whackem smackem. 
    <% 
     dynamic "http://related.content.service/this/story" 
    %> 
    </div> 
    <div id="sidebar"> 
    <% 
     dynamic do |request| 
     url = "http://my.user.service/user-widget.html" 
     if request.cookies.contains?("user_token") 
      url = "http://my.user.service/" + request.cookies["user_token"] + "/user-widget.html" 
     end 

     error_text = "User service not available" 
     { :url => url, :timeout => 500, :error => error_text } 
     end 
    %> 
    </div> 
</body> 
</html> 

क्या आपको लगता है कि उदाहरण में देखेंगे कि एक कुकी मूल्य के आधार पर शामिल फ़ाइल को निर्धारित करता है रूबी एक छोटा-सा है, तो URL में खींचने के लिए के साथ एक हैश रिटर्न , एक टाइमआउट, और त्रुटि की स्थिति में दिखाने के लिए कुछ डिफ़ॉल्ट पाठ। सिद्धांत रूप में, सभी शामिलों को असीमित रूप से भी अनुरोध किया जा सकता है।

मेरी समझ यह है कि अमेज़ॅन ऐसा कुछ करता है। समग्र पृष्ठ की गति सुनिश्चित करने के लिए सख्त टाइमआउट सीमाओं के साथ बैकएंड सेवाओं द्वारा विभिन्न पृष्ठ घटक उत्पन्न होते हैं। मैं उम्मीद कर रहा था कि उनकी सीडीएन सेवा में ऐसा कुछ शामिल होगा, लेकिन ऐसा नहीं होना चाहिए!

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

तो सवाल यह है कि मुझे क्या करना चाहिए जो मुझे चाहिए? क्या कोई और इस तरह से काम कर रहा है?

उत्तर

2

नेगिनक्स को फ्रंट-एंड के रूप में सेट किया है, और पृष्ठों के गतिशील हिस्सों को चुनने के लिए एसएसआई का उपयोग करें। गतिशील स्रोत एक HTTP सर्वर हो सकता है, जैसे अपाचे, या फास्टसीजीआई सर्वर, उदाहरण के लिए PHP, या Django।

संपादित करें:

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

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

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

+0

क्या आप इस उत्तर पर विस्तार कर सकते हैं? ऐसा लगता है कि यह मुझे जो कुछ भी चाहता है उसे मुझे देता है, लेकिन यह संभव है कि मुझे कुछ याद आ रहा है। – MrKurt

+0

आह, यह थोड़ा और सहायक है। यह वास्तव में मुझे सशर्त रूप से चीजों को शामिल करने में मदद नहीं करेगा, हालांकि, जो मुझे रुचि रखने वाले परिदृश्यों के लिए कम उपयोगी बनाता है। – MrKurt

+0

याद रखें कि 'चीजें' जो एसएसआई पूरे पृष्ठ में सम्मिलित कर सकती हैं, किसी भी द्वारा गतिशील रूप से उत्पन्न की जा सकती है बैकएंड सर्वर। – Javier

1

मुझे पता है कि कुछ लोगों ने सामग्री के टुकड़ों को एक साथ बांटने के लिए memcache nginx मॉड्यूल के साथ nginx SSI का उपयोग करने के बारे में लिखा है। यह ईएसआई जैसे कुछ से अधिक सीमित है, लेकिन अभी भी उपयोगी है।

2

तो यह पता चला है कि वार्निश के पास मूल ईएसआई समर्थन है (और था) जो लगभग मैं चाहता था। अगर किसी को कुछ ईएसआई सामान करने की ज़रूरत है, तो वार्निश इसके लिए बहुत अच्छी तरह से काम करता है। यह बहुत बुनियादी है, लेकिन अभी भी भयानक है।

1

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

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