ประสบการณ์การใช้งานจริงในการปรับขนาดและการปรับแต่งประสิทธิภาพ


54

เว็บไซต์ของฉันทำงานถูกกล่าวหาว่าจะมีอัตราการตีขนาดใหญ่ในเร็ว ๆ นี้หลังจากการเปิดตัว ลูกค้ากำลังพูดถึงความเป็นไปได้ของการเข้าชมประมาณ 2,500 ครั้งต่อวินาทีในหนึ่งวัน

ละเว้นความจริงที่ว่าอัตราการเข้าชมนี้อาจเป็นไปได้ว่าลูกค้าในแง่ดีและนอกเหนือจากการได้เซิร์ฟเวอร์ที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้สิ่งที่ดีที่สุดที่ Drupal ควรได้รับการกำหนดค่าเพื่อรองรับอัตราการเข้าชมจำนวนมาก

ฉันได้อ่านปรับโครงสร้างพื้นฐาน drupal.org , บล็อกประสิทธิภาพ Drupal , Best Practices การขูดหินปูน Drupalและหน้าอื่น ๆ อีกมากมาย แต่สิ่งที่ฉันกำลังมองหาเป็นประสบการณ์จริงของการทำเช่นนี้สิ่งที่ทำงานอะไรไม่ได้และสิ่งที่ คาดหวัง

คำตอบ:


47

คำตอบของ Markdorison นั้นเป็นวิธีที่ได้รับการยอมรับในการโจมตีปัญหานี้ ฉันจะเอามันไปอีกหน่อย

เมื่อคุณมีPressflowสำหรับ D6 หรือ Drupal สำหรับ D7, Memcached และVarnishทำงานร่วมกันได้เป็นอย่างดีคุณจะต้องกำหนดรหัสไฟล์VCLของคุณเอง มีเกมฟรีที่ให้จุดเริ่มต้น แต่คุณต้องเล่นกับพวกเขาเสมอ

ในการทำให้ Varnish ทำงานได้อย่างเหมาะสมตรวจสอบให้แน่ใจว่าคุณได้เริ่มต้นด้วย -s malloc xG แทนค่าเริ่มต้นของ -s file / path / to / file นอกจากนี้ยังมี Varnish ยังมีรายการ Varnish แคชแบบคงที่ตราบเท่าที่คุณสามารถ

หากคุณมีเว็บเซิร์ฟเวอร์มากกว่าหนึ่งแห่งให้ลบ ETag ออกจากส่วนหัวที่ส่งไปยัง Varnish ใน VCL ฉันยังลบ Expires และเพียงใช้อายุและอายุสูงสุดในส่วนหัวเพื่อรับเบราว์เซอร์กลับไปที่ไซต์

รุ่น 1.5 (ณ วันที่ 3 มีนาคม 2011) ยังคงเป็นโมดูล Memcached รุ่นที่เร็วที่สุดจาก Drupal.org ฉันมักจะปรับใช้โดยใช้ถังเดียวต่อเซิร์ฟเวอร์เพื่อลดปริมาณการใช้งาน tcp สำหรับการเชื่อมต่อกับถังขยะหลายถังที่มีขนาดใหญ่)

กำหนดค่าแคชใน "ประสิทธิภาพ" ไปยังภายนอกและตั้งอายุสูงสุดซึ่งจะส่งส่วนหัวที่ถูกต้องไปยังพร็อกซีแคชเช่นวานิช

หากคุณไม่สามารถรับแคชบางหน้าอย่างถูกต้องในวานิชตรวจสอบโพสต์บล็อกบนเว็บที่มีรายละเอียดวิธีการตรวจสอบคำขอ นี่คือตัวอย่างโพสต์ที่ฉันเขียนสักครู่: การหยุด Varnish และ Drupal Pressflow คืออะไรจากการแคชการดูหน้าผู้ใช้ที่ไม่ระบุชื่อ

คุณควรเลือก InnoDB (หรือหนึ่งในชื่ออื่นจากผู้ให้บริการรายอื่นเช่น XtraDB) สำหรับ MySQL และย้ายตารางทั้งหมดไปไว้ในนั้น จากนั้นตรวจสอบการโพสต์บล็อกนี้สำหรับคำแนะนำการปรับจูนพื้นฐานhttp://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

การมีพูลบัฟเฟอร์ขนาดใหญ่นั้นมีความสำคัญอย่างยิ่ง เมื่อโหลดการทดสอบไซต์จะเปิดบันทึกการสืบค้นที่ช้า ในตอนแรกคุณอาจต้องการสืบค้นคำสั่งที่ใช้เวลานานกว่า 50msec จากนั้นปรับแบบสอบถามและลดเวลาการจับภาพบันทึกช้าลงซ้ำ ๆ จนกว่าคุณจะมีแบบสอบถามส่วนใหญ่ที่ใช้ดัชนีและดำเนินการอย่างรวดเร็ว

พื้นฐานอื่น ๆ ที่เกี่ยวข้องกับการมีAPCสำหรับ PHP หากคุณใช้ CGI ที่รวดเร็วแทนที่จะใช้ mod_php ลองใช้เวลาทำแคช APC ให้ใช้ร่วมกันข้ามอินสแตนซ์ php ด้วยการกำหนดค่าสคริปต์ตัวห่อหุ้มที่ดี นอกจากนี้ตรวจสอบให้แน่ใจว่าแคช APC อยู่ในไฟล์หน่วยความจำที่แมปเพื่อบีบบิตสุดท้ายออกจาก PHP


ถ้าคุณใช้ CGI ที่รวดเร็วแทนที่จะใช้ mod_php ลองทำแคช APC ร่วมกันระหว่าง php instance โดยการกำหนดค่าสคริปต์ wrapper ที่ดีตรวจสอบให้แน่ใจว่าแคช APC นั้นอยู่ในไฟล์หน่วยความจำที่แมปเพื่อบีบบิตสุดท้ายทุกครั้ง จาก PHP " : ตกลงทำยังไงดี? ขอบคุณ
john

1
สำหรับหน่วยความจำที่แมป apc มันขึ้นอยู่กับการรวบรวมธง ... php.net/manual/en/apc.configuration.php
สจ๊วตโรบินสัน

23

ฉันขอแนะนำให้เริ่มต้นด้วยPressflow (ถ้าใช้ Drupal 6), Memcache , วานิชและเครือข่ายการกระจายเนื้อหา (CDN) บางรูปแบบเช่น Akamai ผลลัพธ์ที่ได้ควรจะมีผู้ใช้เพียงไม่กี่คนเท่าที่จะเป็นไปได้ที่จะตีเซิร์ฟเวอร์ต้นทางของคุณ

หากคุณมีบางส่วนของหน้าเว็บที่คุณไม่สามารถแคชสำหรับผู้ใช้ที่ไม่ระบุชื่อ (สิ่งที่เฉพาะเจาะจงสำหรับผู้ใช้นั้น "ยินดีต้อนรับผู้ใช้ X" ฯลฯ ) คุณสามารถสำรวจตัวเลือกต่างๆเพื่อเติมข้อมูลส่วนต่างๆของหน้าเช่นอะซิงโครนัส การเรียกกลับหรือด้านข้างขอบรวมถึง

หากคุณมีผู้ใช้ภายในกลุ่มน้อยกว่า (เช่นกลุ่มบรรณาธิการ) ที่ต้องสามารถดูเว็บไซต์ที่ไม่ได้อัปโหลดฉันขอแนะนำให้เปิดเผยไซต์ของคุณในเวอร์ชั่นอื่นที่ไม่ได้รับการป้องกันด้วย VPN หรือเทียบเท่าถ้าเป็นไปได้)


Richard: ความสุขของฉัน แจ้งให้เราทราบหากคุณมีคำถามติดตาม
markdorison

16

2,500 ครั้งต่อวินาทีในหนึ่งวันหาก "กด" คุณหมายถึง "ส่งหน้า" แล้วนั่นคือ 216 ล้านหน้าต่อวัน ฉันจะบอกสิ่งนี้กับคุณ: คุณไม่มี 216 ล้านหน้าต่อวัน ฉันรักลูกค้าเหล่านี้ ...

ที่กล่าวว่าข้อมูลการจราจรดิบไม่ได้พูดอะไร ในขณะที่คำแนะนำในหัวข้อนี้เป็นเสียงเกี่ยวกับ Varnish / CDN หากคุณมีการรับส่งข้อมูลที่ไม่ระบุชื่อ แต่ถ้าคุณได้เข้าสู่ระบบการจราจรคุณกำลังเผชิญกับความท้าทาย แต่ก่อนที่จะใช้เวลาและความพยายามในการแก้ปัญหาจำนวนไม่มากตรวจสอบให้แน่ใจว่าคุณมีปัญหา 2,500 ครั้งต่อวินาที bing น้อยกว่านั้นคุณก็รู้ใช่มั้ย


2
2500 / วินาทีเป็นตัวเลขของลูกค้าตามสิ่งที่ฉันคิดว่าเราทุกคนจำได้ว่าเป็นการเดาที่ยาก นั่นคือทั้งหมดที่ฉันต้องทำ ตามที่ปรากฎว่าการเปิดตัวไม่ประสบความสำเร็จเท่าที่พวกเขาวางแผน (หวัง) และแปลกพออัตราที่แท้จริงพุ่งสูงสุดที่ 20 (หน้า) ต่อวินาทีเป็นเวลาประมาณ 10 นาที - ไม่ระบุชื่อโดยเฉลี่ยต่อวัน 7.32 หน้า / วินาที .....
Richard Harrison

7
  • ฝั่งเซิร์ฟเวอร์

    • ติดตั้ง Varnish สำหรับหน้าแคชสำหรับผู้ใช้ที่ไม่ระบุชื่อ
    • ติดตั้งระบบแคชถาวร (Memcached, APC, Memcache)
    • ใช้ CDN เช่น Akamai เพื่อให้บริการไฟล์คงที่ (JavaScript, CSS, รูปภาพ)
  • รหัสข้าง

    • ใช้ Pressflow จะช่วยให้วานิชให้บริการหน้าที่แคชสำหรับผู้ใช้ที่ไม่ระบุชื่อ
    • ทำความสะอาดโต๊ะเฝ้าดูของ Drupal ทุกครั้งที่มีการบันทึกข้อผิดพลาดของ watchdog จะใช้ทรัพยากร CPU บนเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ฐานข้อมูล นอกจากนี้ยังเพิ่มความเร็วในการโหลดอย่างมีนัยสำคัญ
    • ใช้กลยุทธ์แคชแบบสแตติกและแบบถาวรจนกระทั่งบันทึกคิวรีแบบช้ามาล้างข้อมูล
    • หลีกเลี่ยงข้อผิดพลาด PHP ที่เกิดขึ้นภายในลูป foreach ที่ซ้อนกันอยู่ตลอดเวลา
    • ถอนการติดตั้งโมดูลที่ไม่ได้ใช้
    • เปิดการแคชสำหรับบล็อกหลักของ Drupal และมุมมอง
  • ฐานข้อมูล

    • ตรวจสอบให้แน่ใจว่ามีการจัดทำดัชนีตารางอย่างถูกต้องเพื่อการค้นหาที่รวดเร็วขึ้น
    • อย่าเก็บบันทึกที่ไม่จำเป็นฐานข้อมูล 100 โหนดจะสามารถเข้าถึงได้เร็วกว่าฐานข้อมูล 3 ล้านโหนดเสมอ

6

ฉันจะฟังพอดคาสต์ Lullabot นี้เกี่ยวกับวิธีที่พวกเขาตั้งค่าเว็บไซต์ Grammys.com สำหรับการระเบิดของการจราจรในช่วงเวลาหนึ่งสัปดาห์ มันเป็นคำอธิบายทางการศึกษาที่น่ารัก

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


เห็นด้วยกับคุณโดยสิ้นเชิง
João Guilherme

4

ในขณะที่มันยากมากที่จะทำนายรูปแบบถ้าคุณมีความคิดที่เป็นธรรมเกี่ยวกับระดับการจราจร ทดสอบโหลดโซลูชันของคุณ มีโฮสต์ของตัวเลือกต่าง ๆ มากมายและเป็นไปไม่ได้ที่จะทำนายจนกว่าคุณจะมีการรับส่งข้อมูลสด แต่ถ้าคุณโหลดการทดสอบให้มากที่สุดอย่างน้อยที่สุดคุณจะมีระดับความมั่นใจพอสมควรว่าการตั้งค่าของคุณสามารถรองรับปริมาณการใช้งาน

การปรับแต่งทั้งหมดในโลกจะไม่ช่วยถ้าคุณไม่ทดสอบก่อน

นี่คือการนำเสนอที่ DC SF เกี่ยวกับวิธีที่นักเศรษฐศาสตร์ทำ http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder


ลิงก์ไปยังงานนำเสนอมีประโยชน์อย่างมาก ขอบคุณ
Richard Harrison

4

สำหรับเว็บไซต์ที่มีปริมาณการใช้งานสูงคุณควรใช้เซิร์ฟเวอร์หลายเครื่องและโหลดบาลานเซอร์หรือใช้เพียง CDN นอกจากนี้ยังเป็นสิ่งสำคัญมากที่จะต้องทำการแคชให้มากที่สุดเพื่อลดการโหลดบนเว็บเซิร์ฟเวอร์

การใช้เครือข่ายการจัดส่งเนื้อหา ( CDN ) ช่วยในการกระจายทรัพยากรผ่านหลายโดเมน (การแบ่งโดเมน) ซึ่งช่วยลดภาระบนเว็บเซิร์ฟเวอร์

การใช้ CDN ช่วยด้วยการแคชแบบกระจายและการเร่งความเร็วจากระยะไกลนอกจากนี้ยังช่วยลดการโจมตี DDoSเนื่องจากจุดปลายหลายจุด ช่วยด้วยความปลอดภัยเนื่องจากเนื้อหาที่เก็บไว้ยากต่อการใช้ประโยชน์

ผู้ให้บริการตัวอย่าง: เร็ว , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon

นี่คือคำแนะนำเพิ่มเติม:

  • ด้วย CDN ให้ใช้โดเมน cookielessสำหรับส่วนประกอบสแตติกที่จะถูกแคช (เช่นsstatic.net ) เนื่องจากพร็อกซีบางตัวอาจปฏิเสธที่จะแคชส่วนประกอบที่ร้องขอกับคุกกี้
  • ทำให้แคชของคุณอุ่นขึ้นหลังจากล้างแคช (โดยใช้ wget, Cache Warmer , Drush ECL )
  • ใช้การตรวจสอบประสิทธิภาพ (เช่นNew RelicหรือYottaaซึ่งมีการรวมสำหรับ Drupal)
  • ใช้เครื่องมือตรวจสอบสำหรับเว็บไซต์ของคุณ (เช่น Nagios)
  • ติดตั้งวานิชและโมดูลวานิช HTTP เร่งบูรณาการแล้วกำหนดค่า
  • Varnish + Authcache: ตรวจสอบตัวอย่าง VCL สำหรับ Authcache Varnish config file
  • พิจารณาปอนด์หรือNGINXต่อหน้าวานิช ดู: ปอนด์ทำไมน่ากลัวในด้านหน้าของวานิช
  • NGINX สามารถทำงานเป็น reverse proxy และ load balancer ได้ดังนั้นจึงสามารถแทนที่ Pound และ Varnish ได้
  • พิจารณา Varnish หรือ NGINX เวอร์ชันทางการค้าเพื่อใช้งานฟีเจอร์ที่ไม่มีในโอเพ่นซอร์ส "community"
  • พิจารณาตัวโหลดบาลานซ์ / แคชเพื่อแทนที่วานิชและปอนด์ (เช่นBIG-IP F5 )
  • ใช้เครื่องมือเช่นabJMeter สำหรับTTFBทดสอบโหลดและความเครียดบนเว็บแอปพลิเคชันของคุณ

ดังนั้นสถาปัตยกรรมเว็บของคุณจากมุมมองของผู้ใช้จึงมีลักษณะดังนี้:

  1. ผู้ใช้ (แคชเบราว์เซอร์ท้องถิ่น)
  2. NGINX หรือ Pound + Varnish (โหลดบาลานเซอร์โหลดพร็อกซีย้อนกลับเป็นตัวเร่ง HTTP)
  3. Apache (เว็บเซิร์ฟเวอร์)
  4. PHP-FPM (PHP FastCGI Process Manager)
  5. MariaDB (ฐานข้อมูล)

สำหรับคำแนะนำการปรับให้เหมาะสมของ Drupal ให้ตรวจสอบ: คุณจะปรับปรุงประสิทธิภาพของ Drupal ได้อย่างไร


1

เปิดใช้งานสองส่วนขยาย:

  • Zend OPcache
  • wincache

ประสิทธิภาพของคุณจะทำงานได้ดีขึ้น

หากคุณกำลังมองหากิ่งไม้ Zend OPcache และ Wincache ใน Microsoft Azure ในตอนแรกให้สร้างชื่อโฟลเดอร์ ' ini' ภายใต้ ' 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 ให้รีสตาร์ทเว็บแอปของคุณ หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า twigging โปรดตรวจสอบเอกสารไมโครซอฟท์

หลังจากการตั้งค่าด้านบนโหลดไซต์ของฉัน Drupal (Drupal 8.3) ภายใน 3 วินาที


0

คุณยังสามารถตรวจสอบการกระจายโหลดซ้ำบนเซิร์ฟเวอร์หลายเครื่องด้วยการช่วยเหลือของ DNS หรือโซลูชันซอฟต์แวร์ / ฮาร์ดแวร์การปรับสมดุลโหลด สิ่งนี้จะอบในการยอมรับความผิด


นั่นไม่ใช่คำตอบที่ดีเพราะไม่ได้กล่าวถึงวิธีการบรรลุเป้าหมายนี้ ดังที่ได้กล่าวไว้ใน OQ มันเป็นประสบการณ์ในโลกแห่งการปรับขนาดที่ฉันเป็นตาม
Richard Harrison

หากอำนาจที่ตัดสินใจว่าเราสามารถเรียกใช้ drupal ในที่ทำงานได้ฉันยินดีที่จะให้โพสต์บล็อก 5+ หน้าโดยสรุปฮาร์ดแวร์และการตั้งค่าของเรา
James Stallings

ยอดเยี่ยม มันอาจเป็นข้อมูลอ้างอิงที่มีประโยชน์ โพสต์ต่อไป ...
Richard Harrison

คุณได้รับอนุญาตให้โพสต์ร่างของคุณใหม่หรือไม่?
Richard Harrison
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.