उच्च-ट्रैफ़िक वेबसाइट को स्केल करने के लिए मुझे क्या करना चाहिए?


14

क्षमता को संभालने के लिए "स्केल आउट" करने की आवश्यकता वाली वेबसाइट के लिए कौन से सर्वोत्तम अभ्यास किए जाने चाहिए? यह अब विशेष रूप से प्रासंगिक है कि लोग क्लाउड पर विचार कर रहे हैं, लेकिन मूल सिद्धांतों को याद कर रहे हैं।

मुझे कुछ भी सुनने में दिलचस्पी है जो आप विकास-स्तर के कार्यों से लेकर बुनियादी ढांचे तक, प्रबंधन तक एक सर्वोत्तम अभ्यास मानते हैं।


1

क्या कोई व्यक्ति जो विंडोज सर्वर ऐप फैब्रिक और कैशिंग के बारे में जानता है, यहाँ कुछ पोस्ट कर सकता है? मैं इस क्षेत्र का विशेषज्ञ नहीं हूं और अधिक सीखना चाहता हूं।
goodguys_activate

आप AppFabric के बारे में क्या जानना चाहते हैं?
हेनरिक

वहाँ कैसे एक वेबसाइट स्केल करने के लिए, यह पता सहित जाँच बारे में कुछ सुझाव है: सामने के अंत के स्तर का सर्वर स्क्रिप्ट स्तर मॉडल और डीबी डिजाइन के स्तर का सर्वर क्षैतिज स्केलिंग, Sharding देखें अधिक: olivetit.blogspot.com/2013/05/...

जवाबों:


16

कंसीडर के लिए डिज़ाइन

यही है, जैसा कि आप कोडिंग कर रहे हैं, कई धागे होने की योजना बना रहे हैं। साझा स्थिति की योजना बनाएं (अक्सर सिर्फ डीबी)। कई प्रक्रियाओं के लिए योजना बनाएं। भौतिक वितरण की योजना।

यह आपको अपने सिस्टम को कई मशीनों में, और लोड संतुलन के साथ कई प्रक्रियाओं में वितरित करने की अनुमति देता है। यह आपको विफलता के मामले में अनावश्यक प्रक्रियाओं को चलाने की अनुमति देता है, और यदि आपको सिस्टम को इन-प्लेस संशोधित करने की आवश्यकता है, तो आपको ऐसा करने के लिए सभी सेवा को मारने की आवश्यकता नहीं है।


13

कुछ बातें जिन पर आप विचार कर सकते हैं:

  • आपके डेटा स्टोरेज के रीड-एंड-राइट्स को अलग करना।
    • CQRS / इवेंट सोर्सिंग
    • CQS
    • संदेश-गुजर / अभिनेता
  • साझा प्रक्रिया और थ्रेड स्थिति से बचना
    • इसलिए ताला लगाने से बचना चाहिए
    • आप अपनी कक्षाओं, संरचनाओं और अन्य डेटा प्रकारों को अपरिवर्तनीय बनाने के लिए इस प्रकार के सिस्टम के माध्यम से बच सकते हैं, अर्थात निर्माण के बाद गैर-परिवर्तनशील। विशेष रूप से जटिल अमूर्त डेटा प्रकारों के लिए, यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है (जैसे jQuery का कार्यान्वयन)
  • वेब सर्वर थ्रेड्स को IO पर ब्लॉक नहीं करना। यदि आप ASP.Net का उपयोग कर रहे हैं तो APM पैटर्न / कार्य-समानांतर लाइब्रेरी (TPL) के साथ अतुल्यकालिक पृष्ठों / कार्यों का उपयोग करें
  • उपयोगकर्ता-सत्र शब्दकोश में राज्य का भार नहीं बचा रहा है
    • IIS में थ्रेड माइग्रेशन होने पर इसे थ्रेड्स में ले जाना पड़ता है।
    • बुद्धिमान रूटिंग के बाद, जैसे कि गैर-सुरक्षित / स्थिर संसाधनों को एक ही एप्लिकेशन फ्रेमवर्क (जैसे ASP.Net) के साथ सेवा नहीं दी जाती है जो ओवरहेड जोड़ते हैं। उदाहरण के लिए, विभिन्न वेब सर्वरों को देखें।
  • एक एसिंक्रोनस वर्कफ़्लो-पैटर्न (जैसे बाइंड (हैसेल) /callcc/Tasks.ContinueWith/F#'s async के साथ निरंतरता-पासिंग कोड लिखना
  • यह गणना करने के लिए कि आपके अड़चनें कहां हो सकती हैं, कतारबद्ध सिद्धांत का उपयोग करें
  • पढ़ने-मॉडल और अन्य एप्लिकेशन स्थिति पर पुल-आधारित अपडेट के बजाय पुश का उपयोग करें। जैसे RabbitMQ / nServiceBus के माध्यम से
  • 'Http हैंडलर' लागू न्यूनतम सुविधाओं का उपयोग करें
  • स्थिर फ़ाइलों के लिए, वेब अवसंरचना को सक्षम करने के लिए ई-टैग और कैश एक्सपायरी पॉलिसियों की सेवा करें क्योंकि यह (जैसे स्क्वीड प्रॉक्सी के साथ) काम करना चाहिए
  • (अपने स्केलिंग मुद्दों को हल करने और साइट पर ट्यूटोरियल प्राप्त करने के लिए मुझे किराए पर लें;))

4

शेयर कुछ भी नहीं वास्तुकला।

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

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


0

कई होस्टनामों पर अनुरोधों को समानांतर करें

HTTP मानक का एक भाग एक खंड है जो कहता है कि webclients अधिकतम 2 सत्र प्रति DNS होस्ट का अनुरोध करेगा। यहाँ एक समाधान है जहाँ आप और अपने www.domain.com को अलग करते हैं और एक उच्च अनुरोध प्राप्त करते हैं, जिससे आपका पृष्ठ लोड तेजी से होता है:

/programming/3653609/how-do-i-code-my-asp-net-page-to-parallelize-downloads-across-hostnames

मूल रूप से इसमें अपने ASP.NET HTTP हैंडलर को एडिट करने के लिए टारगेट होस्ट करने के लिए क्लाइंट्स भेजे जाते हैं, जहाँ प्रत्येक होस्ट "www" पर CNAME होता है।


1
यह उत्तर क्लाइंट साइड प्रदर्शन के साथ और सर्वर साइड पर स्केलिंग के साथ कुछ नहीं करना है।
केन लियू

मैं HTTP के माध्यम से अन्य डेटा स्रोतों को एकत्रित करने वाले एक मध्य स्तरीय की तर्ज पर अधिक सोच रहा था। Azure Table, OData कुछ उदाहरण हैं ... अपनी बात के लिए, अभी भी, यह वह सर्वर है जो ब्राउज़र (जावास्क्रिप्ट) को बताता है कि क्या करना है।
goodguys_activate

0

सुरक्षित, तेज, विश्वसनीय डीएनएस

मुझे रजिस्ट्रार के DNS सर्वर का उपयोग करके कुछ उच्च क्षमता वाली वेबसाइटें मिलीं, जिनमें अपटाइम या प्रदर्शन के लिए कोई SLA नहीं था। इसके अलावा, उनके सर्वर भारत में स्थित थे और विलंबता अकेले इस संभावना को बढ़ाती है कि एक डीएनएस स्पूफर आपके ग्राहक को जहर दे सकता है, या आईएसपी के कैश को मध्यवर्ती कर सकता है। यह आपके SSL-सुरक्षित ट्रैफ़िक को बिना किसी को जाने समझे पुनर्निर्देशित कर देगा।

रिकॉर्ड्स कैश होने से पहले DNS गति आपके सर्वर के प्रारंभिक लोड समय को भी प्रभावित करती है।

मैं अपने अधिकांश ग्राहकों के लिए DynDNS या Neustar का उपयोग करता हूं क्योंकि उनके पास एक बहुत ठोस DNS अवसंरचना है (हालांकि यह महंगा है और मेरा उन कंपनियों से कोई अन्य जुड़ाव नहीं है)।


2
Err ... DNS वास्तव में आपके लिए एक गंभीर अड़चन है? मुझे लगता है कि अनुकूलन करने के लिए अंतिम चीजों में से एक होगा।
फिशटोस्टर

@ फिशटोस्टर - सिर्फ बोल्ड में संपादित हिस्सा। मैं मूल रूप से एक Sysadmin हूँ, और DNS सुरक्षा SSL सत्यापन में एक बड़ी भूमिका निभाता है। DNS कनेक्टिविटी और प्रदर्शन समस्याएँ उत्पन्न होती हैं जैसे: SOP के लिए BGP रूटिंग समस्याएँ, Anycasting (CDN के लिए), विलंबता मुद्दे, कैश पॉइज़निंग और बहुत कुछ के साथ समस्याएँ। मैंने एक डीएनएस बेस्ट प्रैक्टिस स्कैनिंग टूल (वायर लेवल) लिखा, जिसे मैं जल्द ही इंटरनेट पर डालूंगा। इसे आज़माने के लिए स्वतंत्र महसूस करें क्योंकि यह मेरे द्वारा बताए गए कनेक्टिविटी मुद्दों में से कई को कवर करता है। (या मुझे एक ईमेल शूट करें और मैं और अधिक
समझाऊंगा

2
मैं यह नहीं कह रहा हूं कि डीएनएस से संबंधित प्रदर्शन मुद्दे नहीं हैं जैसे आप सूचीबद्ध करते हैं। यह सिर्फ मुझे लगता है कि बहुत अधिक बुनियादी चिंताओं (डेटाबेस का उपयोग, पेज कैशिंग, सरल कोड लूपिंग जटिलता, सर्वर प्रक्रिया लोड-संतुलन, हार्डवेयर वितरण बिंदु चयन, आदि) उत्पन्न होगी और DNS पर स्केलिंग करते समय परिमाण के कई आदेशों पर हल किया जाएगा। -संबंधित मुद्दे एक समस्या होगी।
फिशटोस्टर

... मैं पूरी तरह से सहमत हूं कि चिंता करने के लिए और अधिक महत्वपूर्ण चीजें हैं, जैसा कि आप उल्लेख करते हैं। शायद इसीलिए इस विचार की रेटिंग शून्य है :) .. लेकिन फिर, मैं केवल एक ही हूं जिसने इस प्रश्न का उत्तर दिया है।
goodguys_activate

1
DNS प्रदर्शन निश्चित रूप से एक बड़ी अड़चन हो सकती है - अच्छे और बुरे के बीच कई एमएस अंतर नहीं हो सकता है, लेकिन क्योंकि DNS हर कॉल (या लगभग हर कॉल) पर हिट हो जाता है, यह वास्तविक त्वरित जोड़ सकता है। खासकर जब आप आधुनिक सीडीएन स्टंट में उतरते हैं।
वायट बार्नेट

0

मुझे लगता है कि कुंजी सरल होने जा रही है:

सरल कोड है। इसका मतलब है कि कुछ ऐसा है जिसे आप देखें और समझें। जब आप सर्वरों का विस्तार और परिवर्तन करते हैं, तो आपको यह जानना होगा कि क्या हो रहा है। आपको उन कोडर्स को भी जोड़ने की आवश्यकता हो सकती है जिन्हें जल्दी से समझने की आवश्यकता है। हुक और एक्सएमएल फाइलें जो यादृच्छिक कोड कहती हैं जो स्पष्ट नहीं है बहुत खराब है।

तब आप समस्याओं का परीक्षण और पता लगा सकते हैं।

यहाँ देखें: http://blog.servint.net/2013/08/27/going-big-how-to-scale-a-website-part-1-infrastructure-that-scales/

हम समय के बिना हमारी वेबसाइटों के पैमाने को सुनिश्चित करने की कोशिश करते हैं। इसका मतलब है कि आपको यह जानने में सक्षम होना चाहिए कि आपका कोड क्या करता है और यह कहां करता है। यहां तक ​​कि अगर आप एक अलग मशीन का परीक्षण कर रहे हैं, तो आप पैमाने पर बहुत लंबा नहीं ले सकते। ज्यादातर लोग केवल तब शुरू करते हैं जब यह लगभग बहुत देर हो चुकी है, दुख की बात है। मेरे विचार से आप केवल एक बार ऐसा कर सकते हैं।

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