कई वेब सर्वरों के बीच संपत्ति कैसे साझा करें?


16

मेरे पास लोड बैलेंसर से जुड़े कई लिनक्स वेब सर्वर हैं, और मुझे इन सर्वरों के बीच संपत्ति (जैसे चित्र, वीडियो और अन्य सामान) साझा करना पसंद है। इसे करने का बेहतरीन तरीका क्या है?

वर्तमान में, मैंने सभी वेब सर्वरों के लिए एक फ़ाइल सर्वर पर मुहिम शुरू की है, लेकिन मैं इसके बारे में चिंतित हूं कि यह भारी ट्रैफ़िक के तहत नीचे जा रहा है। मैं इसे होने से कैसे बचा सकता हूं?

अग्रिम में धन्यवाद।


यह वह जगह है जहाँ Cassandra (NoSQL डेटाबेस) जैसी चीजें उपयोगी हैं।
एलेक्सिस विलके

भारी ट्रैफ़िक में प्रदर्शन को बेहतर बनाने के लिए वार्निश का उपयोग करना माना जाता है? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

जवाबों:


12

आपकी आवश्यकताओं के आधार पर ऐसा करने के कई तरीके हैं।

  • Webservers पर fx NFS के साथ आरोहित एक केंद्रीय फ़ाइल सर्वर का उपयोग करें
  • ऊपर के समान, लेकिन निरर्थक, इसलिए यदि कोई नीचे जाता है तो दूसरा उसे संभाल लेता है
  • किसी प्रकार के सिंक्रनाइज़ेशन टूल (उदाहरण के लिए rsync) का उपयोग करें और वेबसर्वर पर स्थानीय रूप से फ़ाइलों को होस्ट करें। फिर एक विशिष्ट अंतराल पर सर्वर के बीच फ़ाइलों को सिंक करने के लिए एक क्रोनजॉब सेटअप करें।
  • CDN जैसे Amazon S3, Akamai आदि का उपयोग करें।

यदि आपके पास बहुत सी नई फाइलें आ रही हैं तो पहले दो सबसे अच्छे हैं। तीसरा आदर्श समाधान होगा यदि आप फ़ाइलों को जोड़ते या बदलते नहीं हैं जो कि अक्सर उपयोगकर्ताओं को 404 पर मिलेंगे। स्थैतिक सामग्री अभी तक सिंक नहीं हुई है।

अंतिम विकल्प कई मायनों में आदर्श हो सकता है, लेकिन 4. सबसे महंगा भी हो सकता है। इसका समर्थन करने के लिए आपको अपनी वेबसाइटों को फिर से लिखने की भी आवश्यकता होगी।


Rsync के साथ बड़ी समस्या यह है कि यदि आप नया डेटा अपलोड करते हैं तो आपको 404 प्राप्त होने की संभावना है और rsync बहुत जल्दी नहीं होता है ... इसके अलावा कैसंड्रा (बिंदु 4) जैसी प्रणाली मुफ़्त है, हालाँकि 10 सर्वर नहीं है मुफ्त ... तो, शायद मुझे कोई अतिरिक्त शुल्क नहीं कहना चाहिए (हालांकि इसे काम करने के लिए कुछ प्रोग्रामिंग की आवश्यकता है।)
एलेक्सिस विल्के

@AlexisWilke - आप rsync के बारे में सही हैं, और मैंने उत्तर में इसका भी उल्लेख किया है। मैंने अब जवाब में इसे स्पष्ट कर दिया है।
फ्रेडरिक नीलसन

पुन: # 3, नई संपत्ति और नई परिसंपत्ति सिंक्रनाइज़ के बीच 'मृत समय' को कम किया जा सकता है यदि आप एक फाइलसिस्टम द्रष्टा का उपयोग करते हैं (जैसे कि फेसबुक का चौकीदार ) और एक तेज सिंक टूल (जैसे csync2 )। नहीं, देरी कभी भी शून्य नहीं होगी, लेकिन यह बहुत कम है और अन्य विकल्पों की तुलना में तैनात करना आसान हो सकता है।
पेपोलुआन

2

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


1
मुझे लगता है कि अगर आप बहुत गतिशील वेबसाइट चाहते हैं तो इस तरह की कैशिंग विफल हो जाती है। क्योंकि भारी गतिशीलता के साथ, आपको अभी भी बहुत सारे डेटा के लिए एक मुख्य बैकेंड सर्वर को हिट करने की आवश्यकता है। मुझे लगता है कि उपयोगकर्ता इसके बजाय बैकएंड कार्य को विभाजित करने में लग रहा है।
एलेक्सिस विलके

1
संभावित रूप से लोड को कम करने के बारे में आपका उत्तर सही है, लेकिन कई सर्वरों के बीच परिसंपत्ति फ़ाइलों को साझा करने के बारे में सवाल का जवाब नहीं देता है।

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

1

चूंकि आमतौर पर डायनेमिक वेबसाइट / एप्स को चलाने के लिए आवश्यक संसाधनों से अधिक सर्वर की जरूरत होती है, इसलिए किसी अन्य उप डोमेन / डोमेन पर स्थैतिक संपत्ति की मेजबानी करने पर विचार करें। (static.yourdomain.com की तरह)

फिर आप उन्हें होस्ट करने के लिए किसी अन्य सर्वर / सर्वर का उपयोग कर सकते हैं। स्टेटिक फ़ाइल होस्टिंग बहुत अधिक संसाधनों का उपयोग नहीं करता है, इसलिए आपको अपनी स्थिर सामग्री के लिए काफी कम सर्वरों की आवश्यकता होगी। आप अपनी डायनामिक सामग्री के लिए सर्वर पर कुछ संसाधन भी मुक्त करेंगे।

अपने लोड बैलेंसर के आधार पर आप लोड बैलेंसर के साथ एक ही डोमेन पर भी ऐसा करने में सक्षम हो सकते हैं, जो यह तय करने के लिए किस सर्वर का उपयोग करते हैं, लेकिन यदि आप एक अलग डोमेन का उपयोग करते हैं तो आप अपनी स्थैतिक संपत्ति को एक सीडीएन पर आसानी से रख सकते हैं, यदि जरूरत पैदा होनी चाहिए!


1

इस चुनौती का एक हल जो मैंने नियोजित किया है, वह एक साझा एनएफएस ड्राइव पर फ़ाइलों की मुख्य रीड / राइट कॉपी है, लेकिन प्रत्येक वेबसर्वर पर केवल-पढ़ने के लिए कॉपी पर रखें ताकि एनएफएस होस्ट की विफलता फ़ाइल-एक्सेस को लगा दे पूरी तरह से खोने के बजाय केवल-पढ़ने के लिए मोड में।

  • एनएफएस माउंट के माध्यम से वेब-होस्ट के साथ साझा की जाने वाली फाइलें केंद्रीय होस्ट पर रहती हैं
  • rsync प्रत्येक वेब होस्ट पर रीड-ओनली कॉपी रखने के लिए कभी भी 15 मिनट चलाएं।
  • एक check_linkबीएएस स्क्रिप्ट हर मिनट चलती है ताकि यह सुनिश्चित हो सके कि एनएफएस माउंट अभी भी है और अगर सिम्लिंक को रीड-ओनली कॉपी में स्वैप नहीं करता है।

इस आलेख में अधिक जानकारी तब मिलती है जब मैंने पहली बार इस सिस्टम को सेट किया था।

तेजी:

  • फ़ाइल रीड अत्यधिक उपलब्ध हैं
  • फ़ाइल लिखने के लिए कोई दौड़ की स्थिति नहीं है
  • सभी वेब होस्ट्स के लिए नई फाइलें तुरंत उपलब्ध हैं।

downsides:

  • थोड़ा जटिल है।
  • वेब होस्ट की संख्या के साथ रीड-ओनली कॉपी स्केल्स की संख्या, जो यदि आपके पास दो से अधिक हो तो अत्यधिक हो सकती है।
  • फ़ाइल लेखन अत्यधिक उपलब्ध नहीं हैं।
  • केवल पढ़ने के लिए कॉपी करने से पहले डाउनटाइम के 1 मिनट के लिए संभावित।

0

आप एक NoSQL डेटाबेस पर विचार करना चाह सकते हैं। वे क्लस्टर पर काम करने के लिए डिज़ाइन किए गए हैं, अंततः स्थिरता प्रदान करते हैं। लेकिन सावधान रहें वे ACID नहीं हैं।

यहां एक परिचय दिया गया है जो आपको यह तय करने में मदद करेगा कि आप किस तरह के NoSQL डेटाबेस को अपने उद्देश्य के लिए चाहते हैं।

यहां उपलब्ध NoSQL से संबंधित संसाधनों की एक सूची दी गई है ।


4
यह उत्तर फ़ाइल सिंक समस्या में कैसे मदद करता है?
टाइटस

@titus NoSQL में, जब किसी एक नोड पर एक लेखन होता है, तो इसे क्लस्टर के अन्य नोड्स पर दोहराया जाएगा। कैसंड्रा लिखने की निरंतरता का स्तर इसे स्पष्ट करने में मदद कर सकता है
अज़ीज़

इसलिए जाने का रास्ता NoSQL db में सभी फाइलों को स्टोर करने का है?
टाइटस

@titus आप कर सकते हैं, लेकिन NoSQL डेटाबेस एक बहुत कुछ कर सकते हैं और फिर फ़ाइलों को स्टोर कर सकते हैं, यह सब आपकी आवश्यकताओं पर निर्भर करता है।
अज़ीज़

2
ओपी ने एक विशेष समस्या के समाधान के लिए कहा " इन सर्वरों के बीच एक लोड बैलेंसर से जुड़ी कई मल्टीपल वेब सर्वर ... शेयर एसेट्स (जैसे कि चित्र, वीडियो और अन्य सामान)। " आपका जवाब बहुत ही सामान्य है, क्या आप सुझाव दे सकते हैं। समस्या का समाधान करने के लिए विशिष्ट उपकरण (और अधिमानतः विन्यास) की व्याख्या करें?
kdbanman

0

आप DFS समाधान का प्रयास क्यों नहीं करते हैं, वे उच्च स्तर की अतिरेक प्रदान करते हैं और वॉल्यूम को आप जितना चाहें उतना साझा कर सकते हैं। ग्लस्टर मेरी पसंदीदा एक है और किसी भी प्रसिद्ध लिनक्स डिस्ट्रो में स्थापित और कॉन्फ़िगर करना बहुत आसान है

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