Sports.ru और Tribuna.com के संचालन विभाग का मुख्य कार्य निरंतर ट्रैफ़िक विकास (1.5 वर्ष से अधिक, ट्रैफ़िक और प्रति सेकंड अनुरोधों की संख्या दोगुनी हो गई है) के संदर्भ में नेटवर्क अवसंरचना को अलग-अलग देशों में वितरित नियमित पीक लोड और दर्शकों के लिए है। । इस समस्या को हल करने के लिए, हम विभिन्न तकनीकों का उपयोग करते हैं; उनमें से एक अपने स्वयं के सीडीएन (सामग्री वितरण नेटवर्क) का निर्माण है, जो आपको लोड को कम करने, डीडीओएस-ए के खिलाफ सुरक्षा को मजबूत करने और दूरदराज के क्षेत्रों में साइट लोडिंग को तेज करने की अनुमति देता है। हमने इस क्षेत्र में अपने अनुभव को साझा करने का फैसला किया और अपने सीडीएन को तैनात करने और संचालित करने के लिए सिस्टम प्रशासकों के लिए एक छोटा व्यावहारिक गाइड संकलित किया।
I. सिद्धांत।
1. शब्दावली।
सामग्री वितरण नेटवर्क (या वितरण नेटवर्क) या सामग्री वितरण नेटवर्क (सीडीएन) एक भौगोलिक रूप से वितरित नेटवर्क बुनियादी ढांचा है जो इंटरनेट पर उपयोगकर्ताओं को समाप्त करने के लिए सामग्री के वितरण और वितरण को अनुकूलित करता है। सामग्री प्रदाताओं द्वारा सीडीएन का उपयोग सीडीएन नेटवर्क की उपस्थिति के बिंदुओं पर ऑडियो, वीडियो, सॉफ्टवेयर, गेम और अन्य प्रकार की डिजिटल सामग्री को डाउनलोड करने के लिए इंटरनेट उपयोगकर्ताओं की गति को बढ़ाने में मदद करता है।
तो सर्वज्ञ विकिपीडिया हमें बताता है। लेकिन यह सीडीएन कैसे काम करता है? आइए तुरंत घोषणा को निर्धारित करें। CDN एक ब्ला ब्ला ब्ला नेटवर्क है। नेटवर्क क्रमशः स्त्रीलिंग है, हम स्त्रीलिंग में संक्षिप्त नाम को अस्वीकार करते हैं।
यह कैसे काम करता है इसके संदर्भ में, आप निम्न सूत्र लिख सकते हैं:
सीडीएन = एनीकास्ट + प्रॉक्सी ।
आप यहां किसी भी
प्रसारण के बारे में पढ़ सकते हैं
।wikipedia.org /
wiki /
Anycast , अगर किसी को यह याद रखना है कि प्रॉक्सी सर्वर क्या है, तो ज्ञान अंतराल यहां भरा जा सकता है:
en.wikipedia.org/wiki/%D0%9FDD1%80 % D0% BE% D0% BA% D1% 81% D0% B8-% D1% 81% D0% B5% D1% 80% D0% B2% D0% B5% D1% 80वास्तव में, यह तकनीक नेटवर्क पते की घोषणा करने के लिए उबलती है, जिस पर सीडीएन पर स्थित साइट इन "भौगोलिक रूप से वितरित स्थानों" से और एक सशर्त एकल सर्वर के लिए अनुरोधों को हल करती है।
इससे आपको क्या लाभ हो सकता है?
डेटा को क्लाइंट के पास रखकर, आप उपयोगकर्ता के लिए प्रतिक्रिया में कम देरी करते हैं, अपने सर्वर पर लोड कम करते हैं, DDoS के खिलाफ सुरक्षा ... blah blah blah - किसी भी वाणिज्यिक CDN नेटवर्क का विवरण पढ़ें।
जटिल और समझ से बाहर लगता है? वास्तव में, यह लगता है की तुलना में आसान है, नीचे सब कुछ अधिक विस्तार से वर्णित किया जाएगा।
2. क्यों अपनी खुद की CDN, परामर्श नहीं।
सवाल यह है कि अपनी खुद की सीडीएन क्यों बनाएं? महान सीडीएन नेटवर्क का उपयोग करने के लिए बहुत सारे।
सबसे पहले, यह हमारी विधि नहीं है;)
दूसरे, ये नेटवर्क पहले ही बन चुके हैं, न कि इस तथ्य के कि वे वितरण में आपको सौ प्रतिशत सूट करते हैं। हमारे CDN के मामले में, हम इसके नोड्स को कहीं भी रखने के लिए स्वतंत्र हैं।
तीसरा, हम अपने बुनियादी ढांचे में निवेश करते हैं, न कि किसी और में।
चौथा, हम कृपया अपने सीडीएन को कॉन्फ़िगर कर सकते हैं। आप न केवल स्थैतिक डेटा, बल्कि गतिशील डेटा को भी कैश कर सकते हैं, उदाहरण के लिए, अनाम या सामान्य डेटा के लिए डेटा। कोई भी व्यावसायिक नेटवर्क हमें इस तरह का लचीलापन नहीं देगा।
3. उपयोग से लाभ।
तो, आप वास्तव में अपने सीडीएन नेटवर्क से क्या प्राप्त कर सकते हैं:
डाउनलोड गति / यातायात में कमी।
उपयोगकर्ता के पास डेटा रखकर, आप उम्मीद कर सकते हैं कि वह इस डेटा को तेज़ी से प्राप्त करेगा। तार्किक है। यातायात को कम करने के बारे में क्या? नोड पर डेटा कैशिंग "मुख्य सर्वर" के लिए कॉल की संख्या कम कर देता है। साथ ही, हम मुख्य डेटा से मुख्य डेटा से CDN में हमेशा संपीड़ित कनेक्शन स्थानांतरित कर सकते हैं। आप सीडीएन को कॉन्फ़िगर कर सकते हैं ताकि प्रतिस्पर्धी अनुरोध जो हम कैश करते हैं, समानांतर में नहीं चल रहे हैं। यह "मुख्य सर्वर" पर ट्रैफ़िक और CPU समय की भी बचत करता है। Sports.ru के मामले में, यह सब कुल अनुरोधों और ट्रैफ़िक की संख्या को "मुख्य सर्वर" से 3.5 गुना कम करने की अनुमति देता है।
साथ ही, DNS-दास सर्वर को होस्ट करने के लिए CDN एक शानदार जगह है। दरअसल, उन्हीं कारणों से।
द्वितीय। अभ्यास।
4. आवश्यक शर्तें।
आपके CDN सर्वर को बनाने के लिए हमें स्वयं सर्वर की आवश्यकता है, हमारे स्वयं के
AS.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%B0%BD%DD%BE%D0% BC% D0% BD% D0% B0% D1% 8F_% D1% 81% D0% B8% D1% 81% D1% 82% D0% B5% D5% BC0 % D0% B8% (% D0% B8%
D8 % D0% % D1% 82% D0% B5% D1% 80% D0% BD% D0% B5% D1% 82) और नि: शुल्क ip-routenum, जिसमें हम अपना CDN रखेंगे। लगभग कोई मुफ्त IPv4 नेटवर्क नहीं हैं, लेकिन IPv6 इतिहास के लिए इस लेख का उपयोग करने वाला कोई भी परेशान नहीं है :)
यह अभी भी प्रॉक्सी को आवक करने और आने वाले अनुरोधों की प्रतिक्रियाओं को बचाने के लिए आवश्यक होगा।
हम इस तथ्य से दोष सहिष्णुता को हल करेंगे कि हम एक ही सर्वर पर प्रॉक्सी और एनाकास्ट एकत्र करेंगे। यदि किसी कारण से यह डिस्कनेक्ट हो जाता है, तो यह सामान्य रूप से पूरे सीडीएन को प्रभावित नहीं करेगा। स्वाभाविक रूप से, संभव के रूप में कई ऐसे सर्वर होने चाहिए;)
5. कैसे करें।
आपकी ज़रूरत की हर चीज़ को लागू करने के लिए, आपको प्रत्येक कोर पर नेटवर्क कार्ड के भार को वितरित करने के लिए कई भौतिक कोर के साथ एक सर्वर की आवश्यकता होगी। पूरे कैश को रैमडिस्क में रखने के लिए पर्याप्त मात्रा में रैम। हम दूर की भूमि के लिए सर्वर पर डिस्क लोड नहीं करना चाहते हैं? ;) अधिक पैकेट प्रदर्शन करने के लिए विभिन्न प्रोसेसर कोर पर लोड संतुलन के लिए समर्थन के साथ एक नेटवर्क कार्ड। और अधिक विश्वसनीयता के लिए SATA ड्राइव पर RAID1।
और इस व्यवसाय को पूरी तरह से काम करने के लिए मजबूर करने के लिए सही ढंग से कॉन्फ़िगर करने की आवश्यकता है। भारी वेब लोड के तहत ट्यूनिंग और लोहे से सभी रस निचोड़ने के लिए फ्रीबीएसडी 9. एक्स के अनुकूल है। आप लिनक्स का उपयोग कर सकते हैं, लेकिन पारदर्शिता और सेटअप में आसानी के मामले में, मेरी व्यक्तिगत रैंकिंग में एक प्रकार का कॉन्फ़िगरेशन
FreeBSD द्वारा जीता जाता
है ।
दोहराने के लिए नहीं, मैं इसी तरह के भार के लिए FreeBSD की स्थापना के लिए व्यावहारिक सिफारिशों का उदाहरण दूंगा:
dadv.livejournal.com/139170.htmlserverfault.com/questions/64356/freebsd-performance-tuning-sysctls-loader-conf-kernelया संबंधित विषय पर Google।
मैं स्थानीय लूप इंटरफ़ेस पर विज्ञापित नेटवर्क या इस नेटवर्क का हिस्सा रखने का सुझाव देता हूं:
/etc/rc.conf में लाइनें जोड़ें:
ifconfig_lo0_alias0 = "inet <CDN1 का IP पता> / 32"
ifconfig_lo0_alias1 = "inet <CDN2 का IP पता> / 32"
और, निश्चित रूप से, रूटिंग को सक्षम करना याद रखें:
/etc/sysctl.conf में लाइनें जोड़ें:
net.inet.ip.forwarding = 1
डेटा कैश के लिए इलेक्ट्रॉनिक ड्राइव चालू करें, हम इसके लिए tmpfs का उपयोग करेंगे:
/boot/loader.conf में लाइनें जोड़ें:
tmpfs_load = "YES"
और / etc / fstab:
tmpfs / mnt / tmpfs tmpfs rw, मोड = 777 0 0
हम
OpenBGP के माध्यम से CDN नेटवर्क की घोषणा करेंगे:
www.freshports.org/net/openbgpdइसमें सभी आवश्यक कार्यक्षमता है और कॉन्फ़िगर करना आसान है। इंटरनेट पर उनके बारे में विस्तृत जानकारी को एक विस्तृत आदमी द्वारा समतल किया गया है। अगर हम इसका उपयोग करना चाहते हैं तो यह पीएफ पैकेट फिल्टर के साथ भी एकीकृत हो सकता है। यहाँ एक सरल विन्यास है जो कुछ भी करेगा उसे लेता है:
/usr/local/etc/bgpd.conf:
एएस <हमारे एएस नंबर>
राउटर-आईडी <राउटर-आईडी>
नेटवर्क <घोषणा नेटवर्क>
समूह "अपलिंक" {
पड़ोसी <प्रदाता का पता> {
रिमोट के रूप में <प्रदाता प्रदाता>
descr "अपलिंक"
स्व की घोषणा करें
}
}
किसी से इनकार
किसी से इनकार करना
<प्रदाता पते> से अनुमति दें
<प्रदाता पते> उपसर्ग <विज्ञापित नेटवर्क> को अनुमति दें
चलो
Nginx को कॉन्फ़िगर करने के लिए आगे बढ़ते हैं। वास्तव में, हमें Nginx पर प्रॉक्सी-सर्वर कैशिंग स्टैटिक्स को अन्य अनुरोधों और कैश्ड डेटा के एकत्रीकरण और संपीड़न के साथ कॉन्फ़िगर करने की आवश्यकता है।
Nginx का निर्माण करते समय, गनज़िप मॉड्यूल के साथ असेंबली को निर्दिष्ट करने के लिए मत भूलना, जो क्लाइंट का समर्थन करने के लिए डेटा का विस्तार करने के लिए नहीं।
nginx.conf:
कार्यकर्ता_प्रोसेस ऑटो;
http {
mime.types शामिल करें;
प्रॉक्सी_टैप_पैथ / एमएनटी / टीएमएफएफएस / टीएमपी;
xy_cache_path / mnt / tmpfs / cache / site_cache level = 1: 2 keys_zone = साइट: 128m max_size = <कैश आकार> निष्क्रिय = <जब डेटा कैश में संग्रहीत किया जाता है>;
पर gzip;
gzip_disable "msie6";
gzip_comp_level 4;
gzip_types text / plain text / html application / xml application / x-javascript text / javascript text / css application / json text / xml application / rss + xml;
गनज़िप पर;
सर्वर {
80 डिफ़ॉल्ट सुनो;
server_name लोकलहोस्ट;
स्थान / {
xy_cache_use_stale अद्यतन समय समाप्त http_500 http_502 http_504;
प्रॉक्सी_कैश साइट;
xy_cache_key $ uri $ is_args $ args;
प्रॉक्सी_पास सामने;
छद्म_हृत्प्रेरणा १.१;
प्रॉक्सी_सेट_हाइडर कनेक्शन "";
xy_set_header होस्ट $ होस्ट;
}
स्थान ~ * \ _ (3gp | 7z | avi | bmp | css | doc | docx | gif | gz | jpg | jpeg | mov | mp3 | MP3 | mp4 | ogg | png | ppt | pptx-rar। tar। tiff | धार | ttf | svg | swf | wma | xls | xlsx | xsl | xslt | zip) $ {
प्रॉक्सी_cache_use_stale समय-समय पर http_500 http_502 http_504 अपडेट करना;
प्रॉक्सी_कैश साइट;
xy_cache_key $ uri $ is_args $ args;
xy_cache_valid <समय जिसके लिए हम स्टेटिक्स को कैश करते हैं>;
प्रॉक्सी_पास सामने;
छद्म_हृत्प्रेरणा १.१;
प्रॉक्सी_सेट_हाइडर कनेक्शन "";
xy_set_header होस्ट $ होस्ट;
}
}
अपस्ट्रीम फ्रंटेंड {
सर्वर <सामने का पता>;
}
यदि किसी कारण से आपको साइट पर गतिशील अनुरोधों को कैश करने की आवश्यकता नहीं है, तो स्थान / अनुभाग में कैशिंग बंद करें। आप उनमें GET पैरामीटर को बदलकर स्थिर डेटा को कैश कर सकते हैं, उदाहरण के लिए, संशोधन संख्या निर्दिष्ट करना।
बाँध ।
यहाँ सब कुछ सरल है, स्थापित करें और name.conf में लाइनें जोड़ें:
ज़ोन "site.ru" {
प्रकार दास;
फ़ाइल "/etc/ameb/slave/site.ru";
स्वामी {
<dns मास्टर सर्वर का आईपी-पता>;
};
};
मास्टर सर्वर से पूरे DNS ज़ोन को डाउनलोड करने की अनुमति देना न भूलें।
बस इतना ही! CDN सर्वर कॉन्फ़िगर किया गया है। यदि आप कई और साइटों के लिए CDN धागा चाहते हैं तो थोड़ा फेरबदल होगा;)