स्केलिंग और ट्यूनिंग प्रदर्शन में वास्तविक दुनिया का अनुभव


54

मैं जिस वेबसाइट पर काम कर रहा हूं वह कथित तौर पर लॉन्च के तुरंत बाद एक बड़ी हिट दर है । ग्राहक एक दिन में लगभग 2500 हिट प्रति सेकंड की संभावना के बारे में बात कर रहा है।

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

मैंने Drupal.org इन्फ्रास्ट्रक्चर , Drupal प्रदर्शन ब्लॉग , स्केलिंग Drupal और कई अन्य पृष्ठों के लिए सर्वोत्तम अभ्यास पढ़ा है , लेकिन मैं जो खोज रहा हूं वह यह करने का वास्तविक अनुभव है, क्या काम करता है, क्या नहीं, और क्या करना है उम्मीद करते हैं।

जवाबों:


47

Markdorison का जवाब मूल रूप से इस समस्या पर हमला करने की स्वीकृत विधि है। मैं इसे थोड़ा और आगे ले जाऊंगा।

जब आपके पास D6 या D7 के लिए Drupal के लिए Pressflow , Memcached और वार्निश सभी अच्छी तरह से एक साथ काम कर रहे हैं तो आपको अपनी VCL फ़ाइल को कस्टम कोड करने की आवश्यकता होगी । ऐसे मुफ्त उपलब्ध हैं जो शुरुआती बिंदु बनाते हैं लेकिन आपको हमेशा उनके साथ खेलने की आवश्यकता होती है।

वार्निश को बेहतर तरीके से काम करने के लिए सुनिश्चित करें कि आपने इसे -s फ़ाइल / पथ / फ़ाइल के डिफ़ॉल्ट के बजाय -s के साथ malloc xG शुरू किया है। वार्निश के साथ वार्निश कैश स्टैटिक आइटम भी हैं जब तक आप कर सकते हैं।

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

संस्करण 1.5 (3 मार्च 2011 के अनुसार) अभी भी Drupal.org से Memcached मॉड्यूल का सबसे तेज़ संस्करण है। मैं आमतौर पर इसे बड़े पैमाने पर कई डिब्बे के कनेक्शन के लिए tcp ट्रैफ़िक कम करने के लिए प्रति सर्वर एक बिन का उपयोग करके तैनात करता हूं)

"प्रदर्शन" में कैशिंग को बाहरी रूप से कॉन्फ़िगर करें और अधिकतम आयु निर्धारित करें जो सही हेडर को वार्निश जैसे कैशिंग प्रॉक्सी में भेज देगा।

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

आपको MySQL के लिए InnoDB (या XtraDB जैसे अन्य प्रदाताओं से अन्य नामों में से एक) चुनना चाहिए और इसमें सभी तालिकाओं को स्थानांतरित करना चाहिए। फिर बुनियादी ट्यूनिंग सलाह के लिए इस ब्लॉग पोस्ट को देखें http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

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

अन्य मूल बातों में PHP के लिए APC शामिल है । यदि आप mod_php के बजाय तेजी से CGI के लिए जाते हैं, तो कुछ समय बिताने के लिए APC कैश को php उदाहरणों में साझा करने के लिए एक अच्छा आवरण स्क्रिप्ट को कॉन्फ़िगर करने का प्रयास करें। यह भी सुनिश्चित करें कि एपीसी कैश हर आखिरी बिट PHP से बाहर निचोड़ने के लिए एक मेमोरी मैप्ड फ़ाइल में है।


"यदि आप mod_php के बजाय तेजी से CGI के लिए जाते हैं, तो कुछ समय बिताने के लिए APC कैश को php उदाहरणों में साझा करने की कोशिश कर रहे हैं ताकि एक अच्छी आवरण स्क्रिप्ट को कॉन्फ़िगर किया जा सके। यह भी सुनिश्चित करें कि APC कैश प्रत्येक अंतिम बिट को निचोड़ने के लिए एक मेमोरी मैप्ड फ़ाइल में है। PHP से बाहर। " : ठीक है, वहाँ कैसे किया जाता है? धन्यवाद
जॉन ohn

1
मेमोरी मैप्ड एपीसी के लिए यह कंपाइल फ्लैग पर निर्भर करता है ... php.net/manual/en/apc.configuration.php
स्टीवर्ट रॉबिन्सन

23

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

यदि आपके पास पृष्ठ के कुछ हिस्से हैं जो आप गैर-अनाम उपयोगकर्ताओं (उस उपयोगकर्ता के लिए विशिष्ट चीजें, "वेलकम यूज़रएक्स" आदि) के लिए कैश करने में सक्षम नहीं हैं, तो आप पृष्ठ के इन टुकड़ों को अतुल्यकालिक जैसे पॉप्युलेट करने के विकल्प तलाश सकते हैं कॉलबैक या एज साइड शामिल हैं।

यदि आपके पास आंतरिक उपयोगकर्ताओं का एक छोटा समूह है (जैसे कि संपादकों के एक समूह के रूप में), जिसे साइट का एक अनछुए संस्करण देखने में सक्षम होने की आवश्यकता है, तो मैं एक अलग URL (वीपीएन के पीछे संरक्षित) पर आपकी साइट के एक अनछुए संस्करण को उजागर करने की सलाह दूंगा या समकक्ष यदि संभव हो तो)।


रिचर्ड: मेरी खुशी। यदि आपके कोई प्रश्न हैं तो मुझे बताएं।
markdorison

16

एक दिन में प्रति सेकंड 2500 हिट्स - अगर "हिट" से आपका मतलब है "पेज डिलीवर हुआ" तो यह एक दिन में 216 मिलियन पेज है। आपको यह बता दूं: आपके पास एक दिन में 216 मिलियन पेज नहीं हैं। मुझे इन ग्राहकों से प्यार है ...

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


2
2500 / सेकंड ग्राहक की संख्या थी जो मुझे लगता है कि हम सभी को एक जंगली अनुमान के रूप में मान्यता देते हैं; मुझे बस इतना ही करना था। जैसा कि यह पता चलता है कि लॉन्च काफी सफल नहीं था, क्योंकि उन्होंने (10) प्रति सेकंड (10) प्रति सेकंड की वास्तविक दर से (मुख्य रूप से अनाम) प्रतिदिन के औसत के साथ, औसतन 20% (पृष्ठ) के लिए योजनाबद्ध (उम्मीद) की थी। 7.32 पृष्ठ / सेकंड .....
रिचर्ड हैरिसन

7
  • सर्वर साइड

    • अनाम उपयोगकर्ताओं के लिए कैशिंग पृष्ठों के लिए वार्निश स्थापित करें।
    • एक निरंतर कैश सिस्टम स्थापित करें (Memcached, APC, Memcache)।
    • स्थिर फ़ाइलों (जावास्क्रिप्ट, सीएसएस, चित्र) की सेवा करने के लिए अकामाई जैसे सीडीएन का उपयोग करें।
  • कोड साइड

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

    • सुनिश्चित करें कि तालिकाओं को तेजी से खोज के लिए ठीक से अनुक्रमित किया गया है।
    • अनावश्यक रिकॉर्डों को संग्रहीत न करें, 100 नोड डेटाबेस को हमेशा 3 मिलियन नोड डेटाबेस से अधिक तेजी से एक्सेस किया जाएगा।

6

मैं इस लोलाबोट पॉडकास्ट के बारे में भी सुनूंगा जिस तरह से उन्होंने एक सप्ताह के दौरान ट्रैफ़िक विस्फोट के लिए Grammys.com वेबसाइट की स्थापना की थी। यह एक बहुत ही शैक्षिक व्याख्या थी।

http://www.lullabot.com/podcasts/podcast-92-grammycom


आपसे पूर्णतः सहमत हूँ।
जोओ गुइलहर्मे

4

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

यदि आप इसे पहले परीक्षण नहीं करते हैं तो दुनिया की सभी ट्यूनिंग मदद नहीं करेगी।

यह डीसी एसएफ में एक प्रस्तुति थी कि अर्थशास्त्री ने इसे कैसे किया। http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder


प्रस्तुति का लिंक वास्तव में बहुत उपयोगी है। साभार
रिचर्ड हैरिसन

4

उच्च-ट्रैफ़िक वेबसाइटों के लिए आपको कई सर्वरों का उपयोग करना चाहिए और बैलेंसर को लोड करना चाहिए या बस सीडीएन का उपयोग करना चाहिए। साथ ही वेब सर्वर पर लोड को कम से कम करना बहुत महत्वपूर्ण है।

सामग्री वितरण नेटवर्क ( सीडीएन ) का उपयोग करने से कई डोमेन (डोमेन शेरिंग) पर संसाधनों को फैलाने में मदद मिलती है जो वेब सर्वर पर लोड को कम करता है।

सीडीएन का उपयोग करने से वितरित कैशिंग और दूरस्थ त्वरण के साथ मदद मिलती है, डीडीओएस के हमलों को कम करने में भी मदद मिलती है , क्योंकि कई अंत-बिंदु हैं। यह सुरक्षा के साथ मदद करता है, क्योंकि कैश्ड सामग्री का शोषण करना अधिक कठिन है।

उदाहरण प्रदाताओं: तेजी , रैकस्पेस , अकामाई , Azure, CloudFlare, अमेज़न, MaxCDN, Verizon।

यहाँ कुछ और सुझाव दिए गए हैं:

  • CDN के साथ, स्थिर घटकों (जैसे sstatic.net ) के लिए कुकलेस डोमेन का उपयोग करें । चूँकि कुछ प्रॉक्सी कुकीज़ के साथ अनुरोधित घटकों को कैश करने से मना कर सकते हैं।
  • कैश साफ करने के बाद अपने कैश को गर्म करें (wget, Cache Warmer , Drush ECL का उपयोग करके )।
  • प्रदर्शन की निगरानी का उपयोग करें (उदाहरण के लिए नया अवशेष या योटा जो ड्रुपल के लिए एकीकरण है)।
  • अपनी वेबसाइट (जैसे Nagios) के लिए निगरानी उपकरण का उपयोग करें।
  • वार्निश और वार्निश HTTP एक्सेलेरेटर एकीकरण मॉड्यूल स्थापित करें , फिर इसे कॉन्फ़िगर करें
  • वार्निश + प्रमाणीकरण: इस उदाहरण की जाँच करें VCL के लिए प्रामाणिक वार्निश विन्यास फ़ाइल।
  • वार्निश के सामने पाउंड या एनजीआईएनएक्स पर विचार करें । देखें: क्यों पाउंड वार्निश के सामने भयानक है
  • NGINX रिवर्स प्रॉक्सी और लोड बैलेंसर के रूप में काम कर सकता है, इसलिए यह पाउंड और वार्निश की जगह ले सकता है।
  • "समुदाय" ओपन सोर्स संस्करण में उपलब्ध सुविधाओं का उपयोग करने के लिए वार्निश या एनजीआईएनएक्स के व्यावसायिक संस्करण पर विचार करें।
  • वार्निश और पाउंड (जैसे BIG-IP F5 ) को बदलने के लिए हार्डवेयर लोडबेलर / कैशिंग पर विचार करें ।
  • TTFB केab लिए JMeter , अपने वेब एप्लिकेशन पर लोड और तनाव परीक्षण जैसे उपकरणों का उपयोग करें ।

तो उपयोगकर्ता की दृष्टि से आपकी वेब वास्तुकला इस तरह दिख सकती है:

  1. उपयोगकर्ता (स्थानीय ब्राउज़र कैशिंग)।
  2. NGINX या पाउंड + वार्निश (लोड बैलेंसर, HTTP त्वरक के रूप में रिवर्स प्रॉक्सी)।
  3. अपाचे (वेब ​​सर्वर)।
  4. PHP-FPM (PHP FastCGI प्रोसेस मैनेजर)।
  5. मारियाडीबी (डेटाबेस)।

Drupal ऑप्टिमाइज़ेशन सुझाव के लिए, देखें: आप Drupal का प्रदर्शन कैसे सुधारेंगे?


1

दो एक्सटेंशन सक्षम करें:

  • Zend OPcache
  • wincache

आपका प्रदर्शन बेहतर होगा।

यदि आप Microsoft Azure में Zend OPcache और Wincache को ट्विस्ट करना चाहते हैं, तो सबसे पहले एक फ़ोल्डर नाम ' ini' under ' D:\home\site\' बनाएं । इसके अलावा, 2 फाइलें बनाएं, ' .user.ini' और ' settings.ini'

प्रत्येक फ़ाइल में निम्न कॉन्फ़िगरेशन जोड़ें:

.user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

इसके अलावा, कुंजी PHP_INI_SCAN_DIR और मान के साथ अपने वेब ऐप में एक ऐप सेटिंग जोड़ें d:\home\site\ini

PHP_INI_SYSTEM बदलने के बाद अपने वेब ऐप को पुनरारंभ करें। यदि आप जुड़वा कॉन्फ़िगरेशन के बारे में अधिक जानना चाहते हैं, तो कृपया Microsoft दस्तावेज़ देखें

ऊपर की सेटिंग के बाद, मेरा Drupal (Drupal 8.3) साइट लोड 3 सेकंड के भीतर।


0

आप DNS आधारित या सॉफ़्टवेयर / हार्डवेयर लोड बैलेंसिंग समाधान के सहयोगी के साथ कई सर्वरों पर लोड को पुनर्वितरित करने की भी जांच कर सकते हैं। यह भी सहिष्णुता में सेंकना होगा।


यह एक अच्छा जवाब नहीं है क्योंकि यह पता नहीं है कि इसे कैसे प्राप्त किया जाए। जैसा कि ओक्यू में उल्लेख किया गया है कि यह स्केलिंग का वास्तविक विश्व अनुभव है जो मैं बाद में हूं।
रिचर्ड हैरिसन

यदि हम जो शक्तियां तय करते हैं, हम काम पर ड्रुपल चला सकते हैं, तो मुझे हमारे हार्डवेयर और कॉन्फ़िगरेशन को रेखांकित करते हुए 5+ पृष्ठ ब्लॉग पोस्ट प्रदान करने में खुशी होगी।
जेम्स स्टालिंग्स

अति उत्कृष्ट। यह एक उपयोगी संदर्भ हो सकता है। वैसे भी इसे पोस्ट करें ...
रिचर्ड हैरिसन

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