Nginx कैश कई सर्वरों के बीच साझा किया गया


9

अनुरोधों को संभालने के लिए PHP-FPM के साथ FastCGI का उपयोग करके हमारे पास 8 REST-ish API सर्वर Nginx के साथ हैं। वर्तमान में हम Nginx 'FastCGI कैशिंग (जैसे निर्देश fastcgi_cache_path) का उपयोग कर रहे हैं । इसका मतलब है कि एपीआई प्रतिक्रियाएं कैश की जाती हैं, लेकिन प्रत्येक सर्वर के लिए एक अलग कैश है।

क्या सभी आठ सर्वरों के बीच कैश स्टोरेज को साझा करने का एक अच्छा तरीका है?

हमने रेडिस को साझा भंडारण के रूप में उपयोग करने पर विचार किया है, लेकिन उपलब्ध मॉड्यूल को अनुप्रयोग परिवर्तनों की आवश्यकता प्रतीत होती है। कुछ मामलों में, हम अपने नियंत्रण के बाहर (HTTP से बाहरी एपीआई पर) प्रतिक्रियाओं को कैश करना चाह सकते हैं। आदर्श रूप से, FastCGI और HTTP प्रतिसादों के अंतर्निहित निगंक्स के लिए एक ड्रॉप-इन प्रतिस्थापन उपलब्ध होगा।


आप कैशिंग को फ्रंटएंड लेयर (Nginx) पर नहीं, बल्कि बैकएंड लेयर (PHP एप्लीकेशन) पर क्यों नहीं बनाते हैं?
मैक्स कोचुबी

@ हेंगओवर मुझे पहिए को फिर से आविष्कार करने का कोई कारण नहीं दिखता है। Nginx कैश अच्छी तरह से और तेजी से काम करता है। अगर हम आवेदन के माध्यम से चल रहे अनुरोधों के अतिरेक से बच सकते हैं, तो हम चीजों को अच्छा और तेज रख सकते हैं। Nginx 5 मिलीसेकंड के तहत हमारे लिए कैश्ड अनुरोधों का जवाब देता है। हमारे PHP एप्लिकेशन को लॉन्च करना, यहां तक ​​कि इसके लिए कैश्ड रिस्पांस प्रदान करने के लिए, शायद इससे 10 गुना धीमा होगा। Nginx कैशिंग अब हमारे लिए अच्छी तरह से काम कर रही है, हमें बस उस कैश को कई सर्वरों में वितरित करने की आवश्यकता है।
ब्रैड

1
ठीक है, की तुलना में आप समर्पित मेम्केडेड ओड रेडिस में कैश्ड कंटेंट को स्टोर करने के लिए 3rd- पार्टी न्ग्नेक्स SRCache मॉड्यूल का उपयोग करने का प्रयास कर सकते हैं ।
मैक्स कोचुबी

1
@ ब्रैड यह हैकी है इसलिए मैं इसे एक उत्तर के रूप में नहीं रखूंगा: हमारे पास वर्तमान में एक रात्रिकालीन स्क्रिप्ट है जो हमारे सर्वर पर nginx कैश निर्देशिकाओं के बीच rsync का उपयोग करती है ताकि प्रत्येक को अन्य सभी से नवीनतम कैश फ़ाइलों के साथ अद्यतित रखा जा सके। स्क्रिप्ट एक सुंदर नगनेक्स पुनरारंभ और सफलता की जांच के साथ समाप्त होती है। जैसा मैंने कहा, यह हैकरी है, लेकिन यह हमारे लिए एक उच्च थ्रूपुट प्रणाली पर काम करता है।
mVChr

@ एमवीसीएचआर दिलचस्प। क्या आपने rsync या इसी तरह लगातार चलाने की कोशिश की है? अपने उपयोग के लिए अंत में, मुझे अंततः रेडिस को काम करना पड़ा, लेकिन यह बहुत बड़े कैश के लिए अनुमति नहीं देता है क्योंकि पूरे रेडिस संग्रह को स्मृति में होना चाहिए। मेरे आवेदन पर 16GB तेजी से भरता है।
ब्रैड

जवाबों:


1

इस समस्या के बारे में https://www.nginx.com/blog/sared-caches-nginx-plus-cache-clusters-part-1/ पर एक नया ब्लॉग पोस्ट प्रतीत होता है । यदि आप दो से अधिक nginx कैश सर्वर चलाते हैं तो यह पहला उदाहरण उपयोगी हो सकता है।

विशेष रूप से पोस्ट का दूसरा हिस्सा मेरे वर्तमान उपयोग-मामले के लिए दिलचस्प लगता है, जहां मैं स्वचालित रूप से परिवर्तित आइटम को अपने कैश में पुन: क्रॉल करना चाहता हूं।

इसे NGINX के ओपन सोर्स वर्जन के साथ भी काम करना चाहिए। मूल रूप से यह प्रत्येक NGINX सर्वर (Nginx-Cache1-> NGinx-Cache2-> ओरिजिन-सर्वर) के माध्यम से कैस्केड किए गए अनुरोध को समतल करके काम करता है और प्रत्येक सर्वर प्रासंगिक अपस्ट्रीम से कैश करता है और यदि वांछित है तो HA क्लस्टर भी बनाना संभव है। https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.