ऑफ़लाइन कार्य दृश्य (स्टब, प्रॉक्सी_स्टोर, उपयोग_स्टेल)

परिचय


तकनीकी कार्य अप्रत्याशित रूप से सभी परियोजनाओं और साइटों पर होता है - इससे बचना असंभव है, आप केवल तैयारी कर सकते हैं। यह समीक्षा सामने के खेत को ऑफ़लाइन मोड में स्थानांतरित करने के हमारे अनुभव को एकत्र करती है - बिना भंडारण और बैकएंड के।



1. ठूंठ


यह सबसे आसान तरीका है - पूरे खेत में एक स्थानीय डिस्क पर एक स्थैतिक पृष्ठ डालना और इसे सभी अनुरोधों को फिर से लिखना कॉन्फ़िगर करना।

server { listen 80; location / { rewrite ^.*$ /maintance.html; } location /maintance.html { alias .../maintance.html; expires -1; } } 


लाभ

समस्याओं


अपडेट: टिप्पणियों में, उन्होंने try_files निर्देश का उपयोग करने का भी सुझाव दिया, जो इस समस्या को फिर से लिखने और विभिन्न स्थानों के बिना हल करता है। और स्पष्ट रूप से अतीत में समाप्त हो जाते हैं, ताकि ब्राउज़र स्टब को कैश न करे।

1.5

बेशक, यह लंबे समय तक नहीं चल सकता था और, 8 घंटे के लिए अगले निर्धारित समय से पहले, हमें कार्य दिया गया था
हर कीमत पर अनचाहे विज्ञापन

पैमाने को समझने के लिए, हमारे पास दो सौ समाचार परियोजनाओं पर प्रतिदिन लगभग डेढ़ मिलियन अनूठे पाठक हैं, सामने वाले खेत पर अलग-अलग सामग्री के लिए दसियों (एक सौ के करीब) मिलियन हिट हैं, अधिकांश ग्राफिक्स और वीडियो सीडीएन पर हैं। फ्रंट फ़ार्म में तीन नगीन नोड होते हैं, जिसके ऊपर एक हार्डवेयर बैलेंसर होता है।

2. प्रॉक्सी_स्टोर


काम के समय, नगीनेक्स-रात को निम्नलिखित सेटिंग्स के साथ खेत में सक्षम किया गया था


 location / { proxy_pass http://nginx-farm; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass_header X-Accel-Redirect; proxy_pass_header X-Accel-Expires; proxy_ignore_headers X-Accel-Redirect; set $store_path ---$request_uri---$query_string; if ($store_path ~ "(.*)(.{1})(.{2})"){ set $new_store_path $3/$2/$store_path; } proxy_store /data/cache/store/$host/$new_store_path; } location ~ \.(flv|asf|mp4)$ { proxy_pass http://nginx-farm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } 


घंटे X पर, मुख्य नोड्स को संतुलन से बाहर ले जाया गया, nginx-night config को कुछ इस तरह से बदल दिया गया

 location / { root /data/cache/store/$host/; set $store_path ---$request_uri---$query_string; if ($store_path ~ "(.*)(.{1})(.{2})"){ set $new_store_path $3/$2/$store_path; } rewrite ^.*$ /$new_store_path break; expires 1m; } location ~ css { default_type text/css; root /data/cache/store/$host/; set $store_path ---$request_uri---$query_string; if ($store_path ~ "(.*)(.{1})(.{2})"){ set $new_store_path $3/$2/$store_path; } rewrite ^.*$ /$new_store_path break; expires 1m; } 


स्टब की तुलना में, यह एक बड़ा कदम था, लेकिन


अपडेट: वास्तव में, यह प्रॉक्सी_केच का उपयोग करने के लिए अधिक सही था, लेकिन हमारे पास "शो विज्ञापनों" से "सर्किट ब्रेकर को बंद करने" के लिए केवल एक सप्ताह था और हमने एक त्रुटिपूर्ण, लेकिन गारंटीकृत समाधान के पक्ष में चुनाव किया।

2.5

परिणामों के अनुसार, हमारे पास एक स्व-लिखित समाधान द्वारा पाई गई समस्याओं को हल करने की भी इच्छा थी, लेकिन वैश्विक कार्यों के लिए कोई प्राथमिकता नहीं थी, और साइट थोड़ा बदलने में कामयाब रही

और यहां वे फिर से नेटवर्क उपकरणों के परिवहन सहित आठ घंटों के लिए साइटों की आंतरिक दुनिया को डिस्कनेक्ट करना चाहते हैं। Proxy_store का उपयोग करने की कोई इच्छा नहीं थी और हमने अगले स्तर पर जाने की कोशिश की।

3. प्रॉक्सी_चेचे_से_स्टेल


सभी परियोजनाओं पर प्रदर्शित
 proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; 

निर्देश त्रुटियों के मामले में कैश से डेटा भेजने के लिए nginx को बताता है, भले ही यह कैश तत्व पहले से ही अप्रचलित माना जाता हो।
इसके अतिरिक्त

और फिर पल एक्स तक पूरी साइट का नियमित संचालन आता है, जब निम्नलिखित जोड़तोड़ होता है

काम से पहले अभ्यास के दौरान, तकनीकी सहायता ने "उपयोगकर्ताओं से कोई शिकायत नहीं" वाक्यांश के साथ टिकटों को बंद करने की कृपा की। युद्ध मोड में - नौ घंटे की बैटरी जीवन, योजना सभी अपेक्षाओं को पूरा करती है - समाचार पढ़ा गया, वीडियो देखा गया, विज्ञापन कताई थी। हालाँकि यहाँ भी कुछ समस्याएं थीं


एक सुखद बोनस के रूप में, सभी ट्वीक्स के बाद, हमें आवश्यक होने पर किसी भी परियोजना को स्टेटिक मोड में बदलने का अवसर मिला।

3.5

अगले चरण के लिए, मुख्य लक्ष्य "यस" स्थिति में "सब कुछ खत्म हो गया है" कहना सीखना होगा, हमें तत्काल 15/30 मिनट पहले परियोजना को वापस करने की आवश्यकता है, क्या आप इसे कर सकते हैं, और अब हम कारणों को ठीक करेंगे ")

proxy_store
proxy_cache_use_stale
proxy_cache_path
Memcache :: सेट

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


All Articles