द्रुपाल पर एक और नज़र डालते हैं

हाल ही में हेब पर " कैशिंग ऑन ड्रुपल " शीर्षक से एक लेख प्रकाशित हुआ। मैं विषय पर कुछ विचार जोड़ना चाहूंगा।

यह कोई रहस्य नहीं है कि द्रुपाल संसाधनों के भूखे हैं, और कैशिंग लगभग पहली चीज है जो दिमाग में आती है। मैं आपको बताता हूं कि हमारी साइट पर सामान्य कैशिंग योजना कैसे बनाई जाती है।

रक्षा की पहली पंक्ति - हम CDN (कंटेंट डिलीवरी नेटवर्क) का उपयोग करते हैं, हमारे मामले में यह AKAMAI है। AKAMAI सब कुछ कैश करने के लिए कॉन्फ़िगर किया गया है। छवियाँ, सीएसएस, जावास्क्रिप्ट, सभी GET अनुरोधों के उत्तर, यह सब परवाह किए बिना है चाहे उपयोगकर्ता अनाम हो या पंजीकृत। कैशिंग अंतराल पृष्ठों के लिए 1 से 5 मिनट, सीएसएस और जावास्क्रिप्ट के लिए 45 मिनट और अन्य संसाधनों के लिए एक घंटे से है। यह वितरण सर्वर पर लोड को काफी कम कर सकता है।

उन लोगों के लिए, जो सीडीएन के साथ कोई अनुभव नहीं है मोटे तौर पर, साइट के पते पर किए गए सभी अनुरोध पहले सीडीएन सर्वर पर जाते हैं, बशर्ते कि अनुरोधित पृष्ठ सीडीएन कैश में मौजूद हो, प्रतिक्रिया तुरंत सीडीएन सर्वर से अनुरोध करने वाले ग्राहक को भेजी जाती है। उस स्थिति में जब सीडीएन में संसाधन अभी तक कैश नहीं किया गया है, या कैश समाप्त हो गया है, सीडीएन हमारे सर्वर को एक अनुरोध भेजता है, प्रतिक्रिया को कैश करता है और इसे उपयोगकर्ता को जारी करता है। इस तरह की योजना के संबंध में, कई समस्याएं उत्पन्न होती हैं, जो हालांकि, काफी आसानी से हल हो जाती हैं।
  1. फॉर्म कैसे बनाएं (उदा। टिप्पणी प्रपत्र)?
  2. टिप्पणी कैसे करें?
  3. सामग्री को कैसे संपादित करें?

क्रम में समस्याओं पर विचार करें। समस्या नंबर एक यह है कि ड्रुपल में, फॉर्म-टोकन के साथ फॉर्म प्रदान किए जाते हैं जो ड्रुपल सुरक्षा उद्देश्यों के लिए उपयोग करता है। समस्या को दो तरीकों से हल किया जाता है, अधिक सुरक्षित (लेकिन सर्वर पर लोड बढ़ाना), और अधिक कैश्ड विधि। पेज प्रदर्शित होने के बाद फॉर्म का AJAX अनुरोध स्वयं अधिक सुरक्षित है। चाल यह है कि सीडीएन अपने सर्वर से पेज देगा, लेकिन AJAX का अनुरोध (यह POST, GETs कैश किया गया है) अपने सर्वर पर एक फॉर्म जनरेट करेगा, जिसे हम बाद में JS का उपयोग करके सही जगह पर दर्ज करेंगे। फॉर्म-टोकन के साथ समस्या का समाधान हो गया है क्योंकि ड्रुपल एक फॉर्म बनाता है और अपने टोकन का सही मूल्य जानता है। इस दृष्टिकोण के साथ, हमें अपने सर्वर के लिए एक अनुरोध करने की गारंटी है। यह, सिद्धांत रूप में, डरावना नहीं है, हालांकि, क्या करना है जब यह एक भी अनुरोध जीवन को खराब करता है? इसका उत्तर सामान्य अशांति वाले फॉर्म-टोकन को हटाकर सुरक्षा का त्याग करना है। वोइला, आप सीडीएन में पेज के साथ फॉर्म को कैश कर सकते हैं। मैं आपको याद दिलाना चाहूंगा कि इससे पहले कि आप दूसरे तरीके से जाएं, ध्यान से तौलना - और क्या यह एक अनुरोध, या इसकी अनुपस्थिति, आपके लिए जीवन आसान बना देगा? ऐसी स्थिति का एक उदाहरण जहां यह एक अनुरोध आप पर एक चाल खेल सकता है - आपकी साइट yahoo.com के पहले पृष्ठ पर है, जो आपकी सामग्री पर सीधे लिंक के साथ है (20,000+ उपयोगकर्ता एक साथ कई घंटों के लिए आपकी साइट पर)। वैसे, इस विधि का उपयोग आवश्यक रूप से किया जा सकता है, इसे "स्थायी समाधान" बनाने के लिए बिल्कुल भी आवश्यक नहीं है।

समस्या नंबर दो यह है कि टिप्पणी कैशिंग अभद्र उपयोगकर्ताओं से भरा है जो "मैं यहाँ एक टिप्पणी छोड़ दिया, यह कहाँ है!" जैसी सामग्री के साथ पत्र लिखेंगे। दो समाधान फिर से हैं: पेज लोड होने पर हर बार ताजा टिप्पणियों के लिए AJAX का अनुरोध, या पते पर एक कैश बस्टर पैरामीटर जोड़ें, जिस पर आप उपयोगकर्ता को पृष्ठ पर एक टिप्पणी ( www.spin.com/articles/premiere-crystalfly-method- जैसी कुछ चीज़ों के साथ लौटाते हैं) remix-daft-punks-tron? cb = cdninvalidate # comment-85251 )। Cb = cdninvalidate पैरामीटर CDN में कॉन्फ़िगर किया गया है, और इससे CDN को पता चलता है कि पृष्ठ कैशिंग समय समाप्त हो गया है। इस प्रकार, जो उपयोगकर्ता केवल एक टिप्पणी छोड़ देता है, वह बाकी सभी के लिए कैश को अपडेट करेगा (आखिरकार, सीडीएन हमारे सर्वरों को एक अनुरोध भेजेगा, और नए संस्करण को नई टिप्पणी के साथ कैश करेगा)।

तीसरी समस्या को बहुत सरलता से हल किया गया है: संपादकीय कर्मचारियों के लिए एक अलग उपडोमेन आवंटित किया गया है, उदाहरण के लिए edit.mysite.com जिसे सीडीएन द्वारा कैश नहीं किया गया है।

CDN एक रामबाण नहीं है, और कैशिंग का अगला चरण, जिसके बारे में मैं कुछ शब्द कहना चाहूंगा, अपने सर्वर पर कैशिंग कर रहा है। तथ्य यह है कि इस तथ्य के बावजूद कि सीडीएन सर्वर पर लोड को काफी कम कर देता है, आगंतुकों के एक बड़े समय-प्रवाह के साथ, एक सीडीएन पर्याप्त नहीं है। Memcache, APC हमारे सर्वर पर स्थापित है, देशी Drupal कैशिंग सक्षम है। कैशिंग को अवरुद्ध करने के लिए विशेष रूप से ध्यान दिया जाना चाहिए, इससे आपके सर्वर के काम को और अधिक सुविधा मिलेगी।

उपरोक्त सभी के अलावा, सरल चीजों के बारे में मत भूलना:

- अपने सर्वर से अनुरोधों की संख्या को कम करने का प्रयास करें।
- गठबंधन करें, जहां संभव हो, सीएसएस में छवियां छिड़ जाती हैं।
- अपने कोड में जावास्क्रिप्ट के स्थान पर विचार करें।
- विज्ञापन, और अन्य चीजें जिन्हें तीसरे पक्ष के सर्वर से प्रतिक्रिया की आवश्यकता होती है, AJAX या iFrame में इनकैप्सुलेट करते हैं।
- PHP को अतिरिक्त मेमोरी न खिलाएं, उदाहरण के लिए php-fpm का उपयोग करें।
- अपने MySQL लॉग का ट्रैक रखें, और लंबे समय से चल रहे प्रश्नों का अनुकूलन करें।
- उच्च साइट लोड पर दो डेटाबेस से पढ़ने पर विचार करें।

शायद यही सब मैं आज कैशिंग और ड्रुपल गति के विषय में जोड़ना चाहता था। धन्यवाद!

Source: https://habr.com/ru/post/In116384/


All Articles