2012-01-19 23 views
32

मेरे पास एक वेबसाइट है (ईएसआई के साथ) जो कैशिंग के लिए सिम्फनी 2 रिवर्स प्रॉक्सी का उपयोग करती है। औसत प्रतिक्रिया लगभग 100ms है। मैंने इसे चलाने के लिए सर्वर पर वार्निश स्थापित करने का प्रयास किया। मैंने guide from Symfony cookbook चरण-दर-चरण का पालन किया, cache फ़ोल्डर में सब कुछ हटा दिया, लेकिन http_cache फ़ोल्डर तब भी बनाया गया जब मैंने इसे आजमाया। तो मैंने सोचा कि मैं app.php से $kernel = new AppCache($kernel); पर टिप्पणी करने का प्रयास कर सकता हूं। यह बहुत अच्छी तरह से काम किया। http_cache अब और बनाया गया था नहीं और varnishstat द्वारा, वार्निश काम करने लग रहा था:Symfony2 साइटों के लिए वार्निश को व्यवस्थित तरीके से कैसे सेट करें?

12951   0.00   0.08 cache_hitpass - Cache hits for pass 
1153   0.00   0.01 cache_miss - Cache misses 

कि चारों ओर 14000 अनुरोधों से बाहर था, इसलिए मैंने सोचा कि सब कुछ ठीक हो जाएगा। लेकिन echoping के बाद मुझे ~ 2 सेकंड तक उठाए गए प्रतिक्रियाएं मिलीं।

अपाचे 8080 पर बंदरगाह 9000 और वार्निश पर चलता है। इसलिए मैं echoping -n 10 -h http://servername/ X.X.X.X:8080 का उपयोग करके echoping।

मुझे नहीं पता कि क्या गलत हो सकता है। क्या सिम्फनी 2 के साथ वार्निश का उपयोग करने के लिए कोई अतिरिक्त सेटिंग्स की आवश्यकता है? या मैं बस कुछ गलत कर रहा हूँ?


अनुरोध के अनुसार, यहां मेरी default.vcl संशोधनों के साथ मैं अब तक किया गया है।

मैं वार्निश के डिफ़ॉल्ट config के साथ 2 मुद्दा नहीं मिला:

  • यह करता कुकीज़ के साथ नहीं कैश अनुरोध (और मेरे एप्लिकेशन में हर किसी के सत्र सौंपा गया है)
  • यह ध्यान नहीं देता Cache-Control: no-cache हैडर

इसलिए मैंने इन मामलों के लिए मेरी कॉन्फ़िगरेशन में शर्तों को जोड़ा और यह अब काफी अच्छा प्रदर्शन करता है (~ 175 रीक/एस ~ 160 से एस 2 रिवर्स प्रॉक्सी के साथ - लेकिन ईमानदारी से, मुझे थोड़ा और उम्मीद थी)। मुझे नहीं पता कि यह कैसे जांचें कि यह ठीक है या नहीं, इसलिए किसी भी इनपुट का स्वागत है।

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

इस पोस्ट में सब कुछ वार्निश 3. एक्स विशिष्ट है (मैं व्यक्तिगत रूप से 3.0.2 का उपयोग कर रहा हूं)।

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

enter image description here

+0

मेरे हाल के अनुभव के आधार पर 5 सेंट। यह वसुनीन कॉन्फ़िगरेशन पर बहुत निर्भर है और विशेष रूप से आपके पास पर्याप्त स्मृति उपलब्ध है या नहीं। क्या आप अपना 'उप vcl_recv', 'sub vcl_fetch' और' backend' दिखा सकते हैं? –

+0

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

+0

मेरे पास मेरे सेटअप पर समान 'vcl_recv' है, हालांकि मेरे पास इन पंक्तियां भी हैं:' req.http.X- अग्रेषित-पोर्ट = "80" सेट करें; req.http.X- अग्रेषित-प्रोटो = "http" सेट करें; ' –

उत्तर

1

अगर वह अपने पूरे विन्यास है, vcl_recv दो बार किया गया है।

उन पृष्ठों में जिन्हें आप कैश करना चाहते हैं, क्या आप कैशिंग हेडर भेज सकते हैं? इससे सबसे अधिक समझदारी होगी, क्योंकि छवियों में पहले से ही आपके अपाचे कैशिंग हेडर हैं और ऐप लॉजिक उन पृष्ठों को तय करते हैं जिन्हें वास्तव में कैश किया जा सकता है, लेकिन आप इसे वार्निश में भी मजबूर कर सकते हैं।केवल अनुरोध करता है कि कैश करने योग्य सेट कर रहे हैं

# Called after a document has been successfully retrieved from the backend. 
sub vcl_fetch { 

    # set minimum timeouts to auto-discard stored objects 
    # set beresp.prefetch = -30s; 
    set beresp.grace = 120s; 

    if (beresp.ttl < 48h) { 
     set beresp.ttl = 48h;} 

    if (!beresp.cacheable) 
     {pass;} 

    if (beresp.http.Set-Cookie) 
     {pass;} 

    # if (beresp.http.Cache-Control ~ "(private|no-cache|no-store)") 
    # {pass;} 

    if (req.http.Authorization && !beresp.http.Cache-Control ~ "public") 
     {pass;} 

} 

यह एक कैश, वार्निश में,:

आप इस प्रकार का vcl_recv इस्तेमाल कर सकते हैं। साथ ही, ध्यान रखें कि आपकी कॉन्फ़िगरेशन कुकीज़ के साथ अनुरोध कैश नहीं करता है।

+0

हाँ, मुझे लगता है कि पूरी समस्या कुकीज़ के साथ थी। मैं कुछ और जानकारी और घटनाओं के साथ आज बाद में प्रश्न अपडेट कर दूंगा। –

+0

आह बकवास, मैंने नोटिस नहीं किया कि मैंने रिकॉर्ड्स के बजाय 2 बार आरईवी पोस्ट किया है और < –

+0

संपादित ओपी लाइन के नीचे थोड़ी अधिक जानकारी के साथ। –

18

मुझे आश्चर्य है कि इसने 10 महीनों में वास्तव में पूर्ण उत्तर नहीं दिया है। यह वास्तव में उपयोगी पृष्ठ हो सकता है।

आप अपने आप को बताया कि:

  • वार्निश नहीं करता कुकीज़ के साथ कैश अनुरोध
  • वार्निश पर ध्यान नहीं देता कैश-नियंत्रण: नहीं कैश हेडर

पहली बात है, हर कोई करता है आपके ऐप में एक सत्र की आवश्यकता है? यदि नहीं, तो सत्र शुरू न करें, या कम से कम इसे शुरू करने में देरी करें जब तक कि यह वास्तव में आवश्यक न हो (यानी वे लॉग इन करते हैं या जो भी हो)।

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

आप vcl_fetch() में नो-कैश निर्देश को संसाधित करने के लिए आसानी से वार्निश प्राप्त कर सकते हैं और वास्तव में आप इसे पहले ही कर चुके हैं।

एक और समस्या जो मैंने पाया है कि Symfony 0 करने के लिए डिफ़ॉल्ट सेट अधिकतम उम्र, जिसका अर्थ है कि वे कभी भी vcl_fetch में डिफ़ॉल्ट तर्क द्वारा कैश नहीं किया जाएगा

मैंने यह भी देखा है कि आप पोर्ट सेट था द्वारा वार्निश में:

backend default { 
    .host = "127.0.0.1"; 
    .port = "80"; 
} 

आपने स्वयं कहा था कि अपाचे पोर्ट 9000 पर चल रहा है, इसलिए यह मेल नहीं लगता है। आप आमतौर पर डिफ़ॉल्ट बंदरगाह (80) पर सुनने के लिए वार्निश सेट करेंगे और पोर्ट 9000 या जो कुछ भी बैकएंड को देखने के लिए वार्निश सेट करेंगे।

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