2012-11-18 48 views
5

पहली बार मैं एक ऐप विकसित कर रहा हूं जिसके लिए बहुत अधिक स्केलिंग की आवश्यकता है, मुझे पहले कभी कई उदाहरणों पर चलाने की आवश्यकता नहीं थी।ईसी 2 का उपयोग करके आप अपने ऐप को एकाधिक सर्वरों में कैसे वितरित करते हैं?

यह सामान्य रूप से कैसे प्राप्त किया जाता है? क्या मैं SQL सर्वर क्लस्टर करता हूं, फिर प्रोग्रामिंग को सभी सर्वरों में दर्पण करता हूं और लोड संतुलन का उपयोग करता हूं?

या क्या मैं किसी सर्वर पर कुछ सर्वर चलाने के लिए कार्यक्षमता को अलग करता हूं?

इसके अलावा मैं अपने सभी ईसी 2 विंडोज़ उदाहरणों के लिए कोड कैसे दबा सकता हूं?

उत्तर

5

अस्वीकरण - मैं किसी भी विंडोज विनिर्देशों का उल्लेख नहीं कर रहा हूं क्योंकि मैंने हमेशा यूनिक्स मशीनों पर काम किया है। ये दिशानिर्देश काफी सामान्य हैं।

यह एक व्यक्तिपरक प्रश्न है और हर कोई एक अद्वितीय शैली में अपनी प्रणाली तैयार करेगा। मेरे द्वारा अनुसरण किए जाने वाले कुछ दिशानिर्देश यहां दिए गए हैं।

यदि यह एक वेब अनुप्रयोग है, तो प्रस्तुति (फ्रंट एंड), मिडलवेयर (एपीआई) और डेटाबेस परतों को अलग करें। एक कटा हुआ आर्किटेक्चर एक मोनोलिथिक एप्लिकेशन की तुलना में सबसे अच्छा है।

  1. डाटाबेस - अमेज़न उत्कृष्ट और अत्यधिक उपलब्ध सेवाएं प्रदान करता है एसक्यूएल और NoSQL डेटा स्टोर के लिए (जब तक आप हमें पूर्व उपलब्धता क्षेत्र पर कर रहे हैं)। आप रिलेशनल डेटाबेस के लिए RDS और DynamoDb को NoSQL के लिए जांचना चाहेंगे। दोनों पैमाने पर अच्छी तरह से और आपको लॉन्च करने के बाद अपने डेटा स्टोर को शेरर्ड/क्लस्टरिंग के प्रबंधन और लोड करने की चिंता करने की आवश्यकता नहीं है।
  2. मिडलवेयर एपीआई - यह एक महत्वपूर्ण हिस्सा है। एपीआई का एक सेट होना महत्वपूर्ण है (अधिमानतः आरईएसटी, लेकिन आप यहां कुछ भी ज्यादा उपयोग कर सकते हैं) जो आपकी बैक-एंड कार्यक्षमता को सेवा के रूप में उजागर करता है। वेब, मोबाइल, डेस्कटॉप, थर्ड-पार्टी विगेट्स इत्यादि जैसे कई सामने वाले ग्राहकों को पूरा करने के लिए एक सेवा उन्मुख आर्किटेक्चर को बहुत आसानी से स्केल किया जा सकता है। मिडलवेयर एपीआई आमतौर पर नहीं होना चाहिए जहां आपका व्यवसाय तर्क संसाधित हो रहा है, इनमें से अधिकांश (या यह सब) उच्च प्रदर्शन के लिए डेटाबेस लुकअप/प्रश्नों में अनुवाद किया जाना चाहिए। इन सेवाओं को उच्च उपलब्धता के लिए संतुलित लोड किया जा सकता है। अमेज़ॅन के Elastic Load Balancers (ईएलबी) शुरुआत करने वालों के लिए अच्छे हैं। यदि आप कुछ और अनुकूलन में शामिल होना चाहते हैं जैसे आईपी पते के कुछ सेट के लिए यातायात को अवरुद्ध करना, Blue/Green deployments प्रदर्शन करना, तो शायद आपको अलग-अलग उदाहरणों पर तैनात हेप्रोक्सी लोड बैलेंसर्स पर विचार करना चाहिए।
  3. फ़्रंट-एंड - यह वह जगह है जहां आपकी प्रेजेंटेशन परत रहनी चाहिए। इसे किसी भी प्रत्यक्ष डेटाबेस प्रश्नों से बचना चाहिए जो कि फ्रंट-एंड उदाहरण के दायरे तक सीमित हैं: फ्रंट-एंड टुकड़ों के लिए नवीनतम कैश कुंजी प्राप्त करने के लिए एक सरल रेडिस कॉल। यहां वह जगह है जहां आप बहुत से कैशिंग को बहुत अधिक प्रदर्शन कर सकते हैं, सेवा कॉल से सामने वाले टुकड़ों तक। आप अपने कैश स्टोर के लिए स्थिर संपत्ति वितरण और AWS ElastiCache के लिए AWS CloudFront का उपयोग कर सकते हैं। ElastiCache एक प्रबंधित memcached क्लस्टर के अलावा कुछ भी नहीं है। आपको ईएलबी के पीछे फ्रंट एंड नोड्स को संतुलित करने पर भी विचार करना चाहिए।

यह सब AWS Elastic Beanstalk का उपयोग करके ऑटोस्कलिंग के साथ बंडल और तैनात किया जा सकता है। यह वर्तमान में एएसपी .NET, PHP, पायथन, जावा और रूबी कंटेनर का समर्थन करता है। एडब्ल्यूएस लोचदार बीनस्टॉक में अभी भी इसकी अपनी सीमाएं हैं लेकिन संतुलन की निगरानी, ​​स्केलिंग और लोड करने के लिए कम से कम परेशानी के साथ अपने बुनियादी ढांचे का प्रबंधन करने का एक बहुत अच्छा तरीका है।

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

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

आशा है कि इससे मदद मिलती है!

7

यह आपके पास आवश्यक आवश्यकताओं पर निर्भर करेगा। लेकिन एक सामान्य दिशानिर्देश के रूप में (मैं एक वेबसाइट मान रहा हूं) मैं अलग-अलग उदाहरणों में डीबी, वेबसर्वर, कैशिंग सर्वर इत्यादि को अलग करता हूं और स्थिर संपत्तियों के लिए s3 (+ cloudfont) का उपयोग करता हूं। मैं यह भी सुनिश्चित करता हूं कि कुछ उचित दर सीमित है ताकि बुनियादी ढांचे पर केवल वैध भार हो।

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

वेबसर्वर के लिए मैं लोडबैंसर सेट अप करूंगा और फिर लोडबैंसर के पीछे वेबसर्वर इंस्टेंस (ओं) पर ऑटोस्केलिंग का उपयोग करूंगा। यदि कोई हो तो ऐप सर्वर के लिए कुछ ऐसा ही लागू होगा। मैं वेब सर्वर सेटिंग्स को भी ट्यून करूंगा।

कैशिंग सर्वर को इसके उदाहरण के समूह पर भी अलग किया जाएगा। ElastiCache एक अच्छी सेवा की तरह लग रहा है। रेडिस के पास memcache के लिए तुलनात्मक प्रदर्शन है लेकिन इसमें अधिक सुविधाएं हैं (जैसे सूचियां, सेट इत्यादि) जो स्केलिंग के दौरान काम में आ सकती हैं।

2

जिस तरह से मैं ऐसा करूंगा, 1 सर्वर होने के लिए डीएस सर्वर के रूप में mysql पर चल रहा है। Memcached पर मेरा सभी डेटा, जो कई सर्वरों और मेरे ग्राहकों को एक सरल "" मेमकैच पर नहीं, डीबी से पढ़ा जा सकता है, इसे memcached पर वापस रखकर वापस लौटा सकता है "।

डीबी की तुलना में मेमकैच स्केल करना बहुत आसान है। एक डीबी स्केलिंग बहुत सारे प्रशासनिक प्रयास लेता है। यह सही और काम करने के लिए दर्द है। तो मैं memcached का चयन करें। असल में मेरे पास डाउनटाइम प्रबंधित करने के लिए अतिरिक्त मेमकैच सर्वर हैं (यदि मेरे किसी भी memcached) सर्वर।

मेरा डेटा अधिकतर पढ़ा जाता है, और कुछ लिखते हैं। और जब लिखता है, तो मैं डेटा को भी memcached करने के लिए धक्का। यह सब मेरे लिए, कोड, प्रशासनिक, फॉलबैक, फेलओवर, लोडबाउंडिंग तरीके के लिए बेहतर काम करता है। सभी जीत आपको बस एक "थोड़ा" थोड़ा बेहतर कोड करने की आवश्यकता है।

क्लस्टरिंग mysql अधिक आकर्षक है, क्योंकि यह कोड, तैनाती, बनाए रखने और बनाए रखने और प्रदर्शन करने में अधिक आसान लगता है। याद रखें mysql हार्डडिस्क आधारित है, और memcached स्मृति आधारित है, इसलिए प्रकृति द्वारा इसकी अधिक तेज़ी से (10 बार कम से कम)। और चूंकि यह डीबी से सभी पढ़ने के भार को लेता है, इसलिए आपकी डीबी कॉन्फ़िगरेशन वास्तव में सरल हो सकती है।

मुझे उम्मीद है कि कोई यहां किसी विपरीत तर्क के लिए इंगित करता है, मुझे यह सुनना अच्छा लगेगा।