अत्यधिक स्केलेबल होने के लिए वेब साइट को डिज़ाइन करने का सबसे अच्छा तरीका क्या है?


35

उन वेबसाइटों के लिए, जिन्हें अत्यधिक स्केलेबल होने की आवश्यकता है, जैसे कि फेसबुक जैसे सामाजिक नेटवर्क, वेबसाइट डिजाइन करने का सबसे अच्छा तरीका क्या है?

  1. क्या मेरे पास एक वेब सेवा होनी चाहिए जो साइट को उस डेटा को प्राप्त करने के लिए प्रश्न करे जो उसे चाहिए?

    या

  2. क्या साइट क्वेरी डेटाबेस को सीधे करना चाहिए? (स्वचालित रूप से तालिकाओं आदि को भरने के लिए भाषा निर्माण में निर्मित का उपयोग करके किया जा सकता है)।

मुझे लगता है कि वेब सेवा बेहतर डिज़ाइन है क्योंकि यह केंद्रीकृत डेटा एक्सेस देता है और कैशिंग और जैसी चीजें नियंत्रित करना बहुत आसान हो जाता है, लेकिन दूसरों को क्या लगता है?


यह भी सवाल है कि किस वास्तुकला का उपयोग करना है (जैसे एमवीसी या जैसे)।
इवान

वास्तव में आप क्या लॉन्च करने जा रहे हैं, इसके बारे में अधिक जानकारी के बिना, यह जवाब देने में बहुत मुश्किल है, लेकिन "क्लाउड सेवाओं" को ध्यान में रखें, शायद आपका आवेदन एक तरह के सास ऐप में फिट बैठता है। (यह केंद्रीकृत है)।
11:04 बजे डीपसेल

आम तौर पर मैं कह रहा हूँ, कुछ भी खास नहीं है ..
डैनियल

1
इसे 'क्लाउड' में बनाएँ और हाईस्कूलबिलिटी डॉट कॉम पढ़ने में बहुत समय व्यतीत करें।
इवान प्लाइस

जवाबों:


37

वाह, यह एक सरल प्रश्न है, जो संभावित उत्तर का एक विशाल सरणी है। आपके प्रश्न का अधिक स्पष्ट हिस्सा पूछता है कि क्या यह सीधे आपके डेटाबेस के साथ या वेब सेवा के माध्यम से इंटरफ़ेस करने के लिए अधिक मापनीय है। यह उत्तर सरल है: डेटाबेस को सीधे क्वेरी करें। वेब सेवा के माध्यम से जाने से विलंबता का एक पूरा गुच्छा जुड़ जाता है जो फ़ायरवॉल (द्वारा और बड़े) के पीछे कोड संचालन के लिए पूरी तरह से अनावश्यक है। उदाहरण के लिए एक वेब सेवा को अनुरोध प्राप्त करने के लिए कुछ घटक की आवश्यकता होती है, इसे डिसेर्बलाइज किया जाता है, डीबी को क्वेरी करता है, एक प्रतिक्रिया को क्रमबद्ध करता है और इसे वापस करता है। इसलिए यदि आपका कोड फ़ायरवॉल के पीछे काम कर रहा है, तो अपने आप को परेशानी से बचाएं और सीधे DB को क्वेरी करें।

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

मैं आपको ब्रैड फिट्ज़पैट्रिक (LiveJournal के संस्थापक और अब Google पर) द्वारा निर्मित काम और उपकरणों पर पढ़ने की सलाह दूंगा। जब मैंने उनके साथ सिक्स शिवाय में काम किया, तो यहां कुछ चीजें मैंने उनसे सीखीं और लाइवजर्नल आर्किटेक्चर के बारे में जो इसे इतना शानदार बना दिया।

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

    मान लें कि आप किसी व्यक्ति के ब्लॉग पर अंतिम 10 जर्नल प्रविष्टियों को लोड करना चाहते हैं, और मान लें कि प्रत्येक जर्नल प्रविष्टि में दस गुण हैं। क्लासिक वाइड टेबल लेआउट में, प्रत्येक प्रॉपर्टी एक टेबल पर एक कॉलम से संबंधित होगी। एक उपयोगकर्ता तब तालिका को एक बार क्वेरी करेगा जिसमें उन्हें सभी डेटा की आवश्यकता होगी। क्वेरी 10 पंक्तियों को लौटाएगी और प्रत्येक पंक्ति में वे सभी डेटा होंगे जिनकी उन्हें आवश्यकता है (उदाहरण के लिए प्रविष्टियों से चयन करें) तिथि 10 तारीख तक। एक संकीर्ण तालिका लेआउट में हालांकि चीजें थोड़ी अलग हैं। इस उदाहरण में वास्तव में दो तालिकाएँ हैं: पहली तालिका (तालिका A) सरल मानदंड संग्रहीत करती है, जिसमें से कोई एक खोज करना चाहता है, जैसे प्रविष्टि की आईडी, लेखक की आईडी, प्रवेश की तिथि, आदि। दूसरी तालिका। (तालिका बी) फिर एक प्रविष्टि के साथ जुड़े सभी गुणों को संग्रहीत करता है। इस दूसरी तालिका में तीन कॉलम हैं: entry_id, कुंजी और मान। तालिका A में प्रत्येक पंक्ति के लिए, तालिका B (प्रत्येक संपत्ति के लिए एक पंक्ति) में 10 पंक्तियाँ होंगी। इसलिए अंतिम दस प्रविष्टियों को लाने और प्रदर्शित करने के लिए, आपको 11 प्रश्नों की आवश्यकता होगी। पहली क्वेरी आपको प्रवेश आईडी की सूची देती है, और फिर अगले दस प्रश्न पहली क्वेरी में लौटी प्रविष्टियों में से प्रत्येक के साथ जुड़े गुणों को लाएंगे।

    "पवित्र मोली!" आप कहते हैं, "पृथ्वी पर यह और अधिक स्केलेबल कैसे हो सकता है ?!" इसकी पूरी तरह से सहज ज्ञान युक्त अधिकार? पहले परिदृश्य में हमारे पास सिर्फ एक डेटाबेस क्वेरी थी, लेकिन दूसरे "अधिक स्केलेबल" समाधान में हमारे पास 11 डेटाबेस प्रश्न हैं। इसका कोई अर्थ नही बन रहा है। उस सवाल का जवाब पूरी तरह से अगली गोली पर निर्भर करता है।

  2. उदारतापूर्वक मेमकेच का उपयोग करें। मामले में आप अवगत नहीं थे, मेमेचे एक वितरित, स्टेटलेस, कम विलंबता, नेटवर्क आधारित कैशिंग प्रणाली है। इसका उपयोग फेसबुक, Google, याहू और ग्रह पर हर लोकप्रिय और स्केलेबल वेब साइट के बारे में किया जाता है। यह ब्रैड फिट्ज़पैट्रिक द्वारा आंशिक रूप से एक संकीर्ण तालिका डेटाबेस डिजाइन में निहित डेटाबेस ओवरहेड को ऑफसेट करने में मदद करने के लिए आविष्कार किया गया था। आइए एक ही उदाहरण पर एक नज़र डालें, जैसा कि # 1 ऊपर चर्चा की गई है, लेकिन इस बार, आइए, मेमकेच का परिचय दें।

    आइए शुरू करते हैं जब उपयोगकर्ता पहली बार किसी पृष्ठ पर जाता है और कैश में कुछ भी नहीं होता है। आप तालिका ए को क्वेरी करके शुरू करते हैं जो पृष्ठ पर प्रदर्शित होने वाली 10 प्रविष्टियों की आईडी लौटाता है। उन प्रविष्टियों में से प्रत्येक के लिए आप तब डेटाबेस में उस प्रविष्टि से जुड़े गुणों को प्राप्त करने के लिए क्वेरी करते हैं, और फिर उन गुणों का उपयोग करके एक ऑब्जेक्ट का निर्माण करते हैं, जो आपके कोड के साथ इंटरफ़ेस कर सकते हैं (उदाहरण के लिए एक ऑब्जेक्ट)। फिर आप उस वस्तु (या उस वस्तु का क्रमबद्ध रूप) को मेमचे में दबाते हैं।

    दूसरी बार जब कोई एक ही पृष्ठ लोड करता है, तो आप उसी तरह से शुरू करते हैं: आपके द्वारा प्रदर्शित की जाने वाली प्रविष्टि आईडी की सूची के लिए तालिका ए को क्वेरी करके। प्रत्येक प्रविष्टि के लिए आप पहले मेमचे में जाते हैं और कहते हैं, "क्या आपके पास कैश में प्रविष्टि #X है?" यदि हाँ, तो memcache आपके लिए प्रविष्टि ऑब्जेक्ट लौटाता है। यदि नहीं, तो आपको इसके गुणों को प्राप्त करने के लिए डेटाबेस को फिर से क्वेरी करने की आवश्यकता है, ऑब्जेक्ट का गठन करें और इसे मेम्चे में स्टैश करें। अधिकांश समय, दूसरी बार जब कोई एक ही पृष्ठ पर जाता है तो केवल एक डेटाबेस क्वेरी होती है, अन्य सभी डेटा को फिर मेम्चे से सीधे खींच लिया जाता है।

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

    इस डिज़ाइन ने आपके सभी दोस्तों से जुड़े पदों की एक सूची को एक स्ट्रीम में, या "दीवार" से बहुत अधिक आसान बनाने के साथ जुड़ी समस्या को हल कर दिया ।

  3. इसके बाद, अपने डेटाबेस के विभाजन पर विचार करें। मॉडल ने सतहों के ऊपर चर्चा की फिर भी एक और समस्या है, और यह है कि आपकी संकीर्ण तालिकाएं बहुत बड़ी / लंबी होंगी। और उन पंक्तियों की तालिका में अन्य प्रशासनिक कार्य कठिन हो जाते हैं। इसे ऑफसेट करने के लिए, किसी तालिका में तालिकाओं को विभाजित करके अपनी तालिकाओं के आकार को प्रबंधित करने के लिए यह समझ में आ सकता है, ताकि उपयोगकर्ताओं के क्लस्टर को एक डेटाबेस द्वारा सेवा दी जाए, और उपयोगकर्ताओं के एक अन्य क्लस्टर को एक अलग डेटाबेस द्वारा सेवा दी जाती है। यह डेटाबेस पर लोड वितरित करता है और प्रश्नों को कुशल रखता है।

  4. अंत में, आपको भयानक अनुक्रमित चाहिए। आपके प्रश्नों की गति काफी हद तक इस बात पर निर्भर करेगी कि आपके डेटाबेस की तालिकाओं को कितनी अच्छी तरह अनुक्रमित किया गया है। मैं इस बात पर चर्चा करने में बहुत अधिक समय नहीं लगाऊंगा कि सूचकांक क्या है, सिवाय इसके कि यह एक विशाल कार्ड कैटलॉग प्रणाली की तरह बहुत है, जिससे कि एक घास के ढेर में सुइयों को अधिक कुशल बनाया जा सके। यदि आप mysql का उपयोग करते हैं तो मैं उन क्वेरी की निगरानी के लिए धीमी क्वेरी लॉग को चालू करने की सलाह देता हूं जिन्हें पूरा करने में लंबा समय लगता है। जब कोई क्वेरी आपके रडार पर आती है (उदाहरण के लिए यह धीमा है), तो यह पता लगाने के लिए कि तालिका को गति देने के लिए आपको किस सूचकांक को जोड़ने की आवश्यकता है।

"इस महान पृष्ठभूमि के लिए सभी का धन्यवाद, लेकिन पवित्र धर्मयुद्ध, यह एक बहुत कोड है जो मुझे लिखना होगा।"

जरुरी नहीं। कई पुस्तकालयों में लिखा गया है कि वास्तव में मेमेक के साथ इंटरफेस बनाना आसान है। अभी भी अन्य पुस्तकालयों ने ऊपर वर्णित पूरी प्रक्रिया को संहिताबद्ध किया है; डेटा :: पर्ल में ObjectDriver सिर्फ एक ऐसी लाइब्रेरी है। अन्य भाषाओं की तरह, आपको अपना स्वयं का शोध करने की आवश्यकता होगी।

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


3
+1 मैं वास्तव में इस वाह से
पंकज उपाध्याय

1
मैं 'डेटाबेस को सीधे क्वेरी' से पूरी तरह असहमत हूं। आप प्रदर्शन के लिए डेटाबेस के विभाजन का उल्लेख करते हैं जब एपीआई इंटरफ़ेस के साथ एकल-मास्टर मल्टीपल-स्लेव आर्किटेक्चर को लागू करना आसान होगा। डीबी को एप्लिकेशन से हटाने का लाभ यह है कि एपीआई लेयर आपके इच्छित अनुरोधों को वितरित कर सकता है। एपीआई एक अमूर्त है जो आपको अंतर्निहित कार्यान्वयन को बदलने और / या अनुप्रयोग को तोड़ने के बिना डेटा का पुन: उपयोग करने की अनुमति देता है।
इवान प्लाइस

1
(cont) सीरियलाइजेशन हमेशा ओवरहेड जोड़ देगा, लेकिन केवल API परत में, जिसमें एक साथ चलने वाले कई उदाहरणों की संभावना होगी। यदि आप तार के पार स्थानांतरण गति के बारे में चिंतित हैं, तो JSON में कनवर्ट करें और यह वैसे भी gzip के साथ संपीड़ित होने की संभावना है। सबसे आसान प्रदर्शन लाभ तब मिल सकता है जब सर्वर से क्लाइंट को काम धकेल दिया जाता है। पूछने के लिए महत्वपूर्ण सवाल यह है कि क्या आप आवेदन के भीतर या सर्वर स्तर पर अनुरोधों को वितरित करेंगे? नकल करना कौन सा आसान है?
इवान प्लाइस

1
@ EvanPlaice - सेवाओं का उपयोग करते समय पुन: प्रयोज्य और सेवा तर्क कार्यान्वयन को बदलने पर महान बिंदु। इसके अलावा- कैश इन्फ्रास्ट्रक्चर का उपयोग डायरेक्ट डेटाबेस कॉल के बजाय सेवाओं द्वारा भी किया जा सकता है।
आशीष गुप्ता

1
@ आशीषगुप्त वास्तव में, डेटा को एक अलग सेवा में विभाजित करने का एकमात्र अंतर है जो उपयोगकर्ता प्राप्त करता है। बजाय सर्वर पर HTML + सामग्री कोडांतरण। उपयोगकर्ता डेटा और एचटीएमएल को अलग-अलग प्राप्त करता है और क्लाइंट ब्राउज़र रीससवेयर को संभालता है। एक अलग सेवा के रूप में डेटा के साथ यह मोबाइल एप्लिकेशन या अन्य गैर-वेब-आधारित क्लाइंट (पूर्व स्मार्ट टीवी ऐप) के लिए उपलब्ध कराना संभव हो जाता है।
इवान प्लास

13

उन वेबसाइट के लिए जो फेसबुक जैसे सोशल नेटवर्क जैसे अत्यधिक स्केलेबल होनी चाहिए, वेबसाइट डिजाइन करने का सबसे अच्छा तरीका क्या है?

का आकलन करें।

मुझे लगता है कि ...

बुरी नीति।

वास्तविक माप आवश्यक है।


मात्रात्मक मैट्रिक्स FTW।
भजन

1
ठीक है ... तो माप के बाद क्या है?
पचेरियर

9

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

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

जरूरी नहीं कि आपको अपने एप्लिकेशन व्यवसाय तर्क और डेटा एक्सेस तर्क के बीच एक नेटवर्क चैनल की आवश्यकता हो; लॉजिकल ऑपरेशन के प्रति एक विधि के साथ एक विधि अप्रत्यक्ष रूप से कॉल करना शुरू करने के लिए ठीक होगा।

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

एक अच्छी तरह से परिभाषित डेटा एक्सेस इंटरफ़ेस होने से आप अपने संपूर्ण एप्लिकेशन में व्यापक बदलाव किए बिना अपने डेटा एक्सेस कार्यान्वयन को विकसित कर सकते हैं। आप अपने व्यावसायिक तर्क के लिए पारदर्शी रूप से वेब सेवा आर्किटेक्चर पर स्विच करने का निर्णय भी ले सकते हैं।

ऊपर दिए गए कई उत्तर आपको अपने प्रदर्शन की अड़चनों के बारे में पता लगाने के लिए आगे बढ़ने के बारे में कुछ बढ़िया सलाह देते हैं, लेकिन यदि आप इन्हें बहुत जल्दी लागू करते हैं तो आप अपने कोड की जटिलता से बाधा बन सकते हैं, इससे पहले कि आप जानते हैं कि जटिलता की आवश्यकता है।


4

एक साधारण वेबसाइट विकसित करें और इसे कुछ ट्रैफ़िक स्तर तक पहुँचने दें। लाइनों के साथ आप सीखेंगे कि स्केलेबल वेबसाइट कैसे बनाई जाती है।

जब तक आप समस्या का सामना नहीं करते, आप समाधान के बारे में नहीं सोच सकते

एक बार जब आप साइट को रोल करने और स्केलिंग की आवश्यकता का सामना कर रहे हैं, तो मुझ पर भरोसा करें, आपको निश्चित रूप से पता होगा कि यह कैसे करना है। :-)


अच्छा भाव !!!!!!!!!!
अमीरहोसिन

2

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

आपके आवेदन के लिए परतों और उपयुक्त वास्तुकला की विशिष्ट संख्या, हालांकि, इसे या किसी अन्य मॉडल से मेल नहीं खाना है।

अपने सिस्टम की सभी गतिविधि को मापने और निगरानी करने की आवश्यकता है। दो या तीन स्तरीय डिज़ाइन से शुरू करें, और इसके भागों पर ध्यान केंद्रित करें जो आप इसे बना रहे हैं, जैसे कि आपको सबसे अधिक संसाधनों की आवश्यकता होगी। चल रहे एप्लिकेशन को इस स्तर पर अपने डिज़ाइन का मार्गदर्शन करने दें। जितनी अधिक जानकारी आप इकट्ठा करते हैं, और यह उतना ही सटीक और विस्तृत होता है, बेहतर निर्णय आप आवेदन को डिजाइन करने के बारे में कर सकते हैं जैसे यह बढ़ता है।

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


2

डेटाबेस से जुड़ने में कोई अतिरिक्त कदम, सिर्फ एक ओवरहेड है। उदाहरण के लिए, बीच UI -> Business Facade -> Business -> Data Access -> Databaseऔर UI -> Database, दूसरा दृष्टिकोण तेज है। हालाँकि, आप जितने अधिक चरण हटाते हैं, आपका सिस्टम उतना ही कम होता है और अधिक दोहराव दिखाई देता है। प्रोफ़ाइल, होम पेज, फ़िनेस प्रबंधन पृष्ठ, आदि में दोस्तों की सूची को पुनः प्राप्त करने के लिए आवश्यक कोड लिखने की कल्पना करें।

तो, आपको उच्च प्रदर्शन (निश्चित रूप से उच्च स्केलेबिलिटी को सीधे प्रभावित करता है) और बेहतर रखरखाव के बीच यहां संतुलन बनाना चाहिए ।

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

  1. सही मंच का चयन (PHP तेजी से इसकी पटकथा स्वभाव की वजह से है, लेकिन ASP.NET इसे संसाधित और कुछ सेवा करने के लिए मक्खी पर अनुरोध की गई फ़ाइल को संकलित करने की जरूरत है। इसके अलावा Node.js अपने की वजह से, और अधिक विश्वसनीय होने का दावा किया है callback- आधारित वास्तुकला )
  2. वेब सेवा मॉडल (SOA) के बजाय RESTful वास्तुकला का उपयोग करना
  3. XML के बजाय डेटा ट्रांसफर के लिए JSON का उपयोग करना (जिसके परिणामस्वरूप कम बाइट्स को स्थानांतरित किया जा सकता है)
  4. याहू के प्रदर्शन दिशानिर्देशों का पालन करना
  5. नेटवर्क और हार्डवेयर विषय जैसे भार संतुलन , या स्तरीय वास्तुकला

2
आप यह नहीं कह सकते कि PHP तेज़ है। सही ढंग से लिखे गए ASP.NET एप्लिकेशन कई मामलों में PHP को बेहतर बना सकते हैं। naspinski.net/post/AspNet-vs-php--speed-comparison.aspx
एंड्रयू लुईस

+1 वास्तव में, आपका 'सरल' समाधान हो जाएगा, UI -> डेटा एक्सेस -> डेटाबेस। 2 REST 'आसान' है क्योंकि यह पहले से ही अधिकांश ब्राउज़रों में बनाया गया है। कमांड-प्रतिक्रिया एपीआई व्हील को फिर से बनाने की आवश्यकता नहीं है। 3 न केवल JSON छोटा है, बल्कि इसे कम करने के लिए सीरीज़-डिसेरिएलाइज़ करने के लिए कम चरणों की आवश्यकता है क्योंकि आपको HTML संस्थाओं की जांच करने की आवश्यकता नहीं है। अच्छी चीज़।
इवान प्लाइस

1

पैमाने, ऊपर और बाहर दो प्राथमिक तरीके हैं।

स्केलिंग एक मशीन को एक अधिक शक्तिशाली के साथ बदल रही है। स्केलिंग का मतलब है कि जो काम मौजूदा मशीनें कर रही हैं, उसे करने के लिए दूसरी मशीन जोड़ना।

किसी भी उच्च ट्रैफ़िक वेब साइट को स्केल करने की क्षमता की आवश्यकता होती है। सॉफ्टवेयर आर्किटेक्चर को करने की जरूरत है, जैसे कि अधिक मशीन को आसानी से जोड़ा जा सकता है जो साइट को मिलता है।

आमतौर पर इसका मतलब है कि एप्लिकेशन को स्तरों में विभाजित करना ताकि प्रत्येक टियर पर अधिक सर्वरों को प्लग और प्ले किया जा सके।

मैं विकल्प 1 करूँगा, इसकी सेवा सीधे करने के बजाय करूँगा। आप अब तक केवल एक अखंड आवेदन को स्केल कर सकते हैं।


0

अपनी साइट को एक प्रौद्योगिकी प्लेटफ़ॉर्म का उपयोग करके विकसित करें, जिसने क्लाउड के लिए पूरी तरह से एकीकृत समर्थन किया है।

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