क्या एक आवेदन स्केलेबल बनाता है?


37

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


मुझे लगता है कि इस प्रश्न को बेहतर बनाने का एक बेहतर तरीका है: मैं अपने कोड को स्केलेबिलिटी को ध्यान में रखकर कैसे लिख सकता हूं? ताकि कोड प्राप्त होने के बाद स्केलेबल हो जाए। क्या कुछ निश्चित तरीके हैं? या यह केवल नौकरी के लिए सही एल्गोरिदम चुनने की बात है?

जवाबों:


24

स्केलेबिलिटी की दो दिशाएँ हैं:

  • ऊर्ध्वाधर (उर्फ स्केलिंग अप): तेजी से सीपीयू, अधिक रैम, अधिक डिस्क स्थान;
  • क्षैतिज (उर्फ स्केलिंग आउट): सीपीयू में अधिक कोर, अधिक सीपीयू, अधिक सर्वर;

पहले एक के लिए, आपको बस इस बात का ध्यान रखना होगा कि आपकी कोई मनमानी न हो। ये या तो बहुत छोटे पूर्णांक आकार या निश्चित / सीमित लंबाई संरचनाओं के कारण होते हैं। ये संरचनाएँ अंतर्निहित OS से संबंधित हो सकती हैं। उदाहरण के लिए यदि आप अधिक थ्रेड्स या प्रक्रियाओं का उपयोग करके स्केल करने का प्रयास करते हैं, तो कुछ बिंदु पर आप OS की सीमा तक पहुँचने जा रहे हैं। यही कारण है कि वर्तमान में उच्च-स्केलेबिलिटी के लिए बनाए जाने वाले सर्वर अतुल्यकालिक घटनाओं के आधार पर संगामिति कर रहे हैं। यह समस्या प्रसिद्ध C10K दस्तावेज़ में वर्णित है ।

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

यदि आप वास्तविक जीवन उदाहरणों के साथ स्केलेबिलिटी के बारे में अधिक पढ़ना चाहते हैं, तो HighScalability.com ब्लॉग देखें


पैमाने का उल्लेख करने के लिए +1। निर्णय निर्माताओं को अधिक संसाधन जोड़ना बहुत जल्दी और आकर्षक है (कुछ हेक्स-कोर खरीदें और मेमोरी को दोगुना करें!)। लेकिन अगर आवेदन उन पर दबाव नहीं डाल सकता है तो आपके पास एक बड़ी समस्या है।
jqa

14

स्केलेबिलिटी को कुछ वेरिएबल के आधार पर थ्रूपुट के संदर्भ में मापा जाता है। उदाहरण के लिए, X उपयोगकर्ताओं के साथ अनुरोधों की संख्या / सेकंड । स्केलेबिलिटी का वर्णन करने का सबसे सरल तरीका है:

लोड बढ़ने पर दक्षता का एक उपाय ।

स्केलेबिलिटी के लिए डिजाइनिंग में आपको जो पहली चीज समझने की जरूरत है, वह यह है कि आपके एप्लिकेशन के लिए क्या माप सबसे महत्वपूर्ण है? दक्षता को मापने के कई तरीके हैं जो स्केलेबिलिटी का एक प्रमुख घटक है:

  • प्रति सेकंड समवर्ती अनुरोध
  • अनुरोध के अनुसार औसत प्रतिक्रिया समय
  • प्रति सेकंड / मिनट संसाधित रिकॉर्ड की संख्या

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

स्केलेबिलिटी का अगला पहलू यह है कि लोड बढ़ने पर आपकी दक्षता का क्या होता है। लोड बढ़ाने के सामान्य तरीके हैं:

  • सर्वर से अधिक उपयोगकर्ता (यानी अधिक वेब ट्रैफ़िक)
  • डेटाबेस में अधिक डेटा (यानी प्रश्न अधिक समय लेते हैं, या प्रसंस्करण में अधिक समय लगता है)
  • RAID में हार्ड ड्राइव की विफलता (भंडारण प्रदर्शन / विश्वसनीयता प्रभावित होती है)
  • नेटवर्क संतृप्ति

एक स्केलेबल एप्लिकेशन के लिए लक्ष्य या तो बनाए रखना है या दक्षता में सुधार करना है क्योंकि हम लोड की समस्या से निपटते हैं। संक्षेप में, यदि प्रतिक्रिया समय बहुत लंबा हो रहा है, तो क्या हम लोड को समान रूप से वितरित करने के लिए एक और सर्वर जोड़ सकते हैं? यह दृष्टिकोण एक सर्वर के लिए काम करने की मात्रा को कम कर देता है, और कार्यकुशलता के लिए "स्वीट स्पॉट" में सर्वर को चालू रखता है।

आपको एप्लिकेशन को विशेष रूप से स्केल करने के लिए डिज़ाइन करना होगा। इसका मतलब है कि आपको सत्र डेटा के साथ सावधान रहना होगा, सही सर्वर के लिए अनुरोधों को रूट करना होगा, आवेदन के लिए क्षमता को सीमित करने वाले बाधाओं को कम करना होगा।


5

जब आप उपयोगकर्ताओं की संख्या बढ़ाते हैं, और / या बड़ा डेटा सेट संसाधित करते हैं, और / या अधिक भाषाओं में अपना इंटरफ़ेस पेश करते हैं, आदि

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

जब मैंने बिल्डिंग स्केलेबल वेब साइट्स (अमेज़ॅन के लिंक) को पढ़ा तो मैंने इन युक्तियों को उठाया ।

उम्मीद है की यह मदद करेगा!


3

एकमात्र तरीका जो अनुप्रयोग वास्तव में स्केलेबल हो सकता है, किसी भी प्रतिबंध के पास नहीं है, जिसे पारित नहीं किया जा सकता है (या केवल बहुत महंगा है)।

एक विशिष्ट उदाहरण तब होता है जब आप उपलब्ध सीपीयू-साइकिल से बाहर निकलते हैं? यदि आपका प्रोग्राम मल्टी-ट्रेडेड है तो आप एक बॉक्स पर कई कोर के साथ चल सकते हैं लेकिन तब क्या होता है जब आप एक बड़ा बॉक्स नहीं खरीद सकते? आपका आवेदन अब और नहीं बढ़ सकता है, और इसलिए स्केलेबल नहीं है।

किसी भी सही मायने में स्केलेबल एप्लिकेशन को पारदर्शी कंप्यूटर में कई कंप्यूटरों पर फैलने में सक्षम होना चाहिए और ऐसा किसी भी ध्यान देने योग्य धक्कों के बिना करना चाहिए। यह आसान नहीं है, और यह एक कारण है कि Google इतना सफल रहा है।


1

अद्वितीय समस्याएं हैं जो बड़े स्केल किए गए अनुप्रयोगों का समर्थन करती हैं। नौकरी पोस्टिंग उन आवेदकों की तलाश में है जिन्होंने उस वातावरण में काम किया है और ऐसी समस्याओं को हल करना है।

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


1

यदि आप एक खोज सुविधा का निर्माण कर रहे थे, जो डीबी में 100 पंक्तियों को खोजने के लिए अच्छा प्रदर्शन करती थी और 10 उपयोगकर्ता एक बार में इसका उपयोग करते थे। यह कितना अच्छा प्रदर्शन करेगा जब 100 उपयोगकर्ता एक ही समय में इसका उपयोग कर रहे थे और ऊपर देखने के लिए 100K पंक्तियाँ थीं।

अगर यह वही करता है तो कोई फर्क नहीं पड़ता कि यह बहुत अच्छा है। यदि यह उपयोगकर्ताओं / डेटा की मात्रा के लिए आनुपातिक प्रदर्शन करता है (जिसका अर्थ है 10x अधिक डेटा == 10x प्रक्रिया करने के लिए लंबा) यानी अच्छा। यदि यह अधिक डेटा का प्रदर्शन करता है, तो इसके पास (10x मोड डेटा == 10x ^ 10 प्रक्रिया के लिए अधिक लंबा) होता है, तो यह अच्छे पैमाने पर नहीं होता।

मेरे उदाहरणों को वास्तव में बिग ओ संकेतन में दिखाया जाना चाहिए, लेकिन वर्तमान में मुझे यह नहीं पता है कि बिग ओ में उदाहरणों को लिखना पर्याप्त है।

आप अपने DB में डमी डेटा डंप करके अधिक डेटा का अनुकरण कर सकते हैं, और Apache AB जैसे अधिक उपयोगकर्ताओं को अनुकरण करने के लिए उपकरण हैं।

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