คุณทำการทดสอบโหลดและวางแผนกำลังการผลิตสำหรับเว็บไซต์อย่างไร


113

นี่เป็นคำถามที่เกี่ยวกับการวางแผนกำลังการผลิตสำหรับเว็บไซต์

ที่เกี่ยวข้อง:

เครื่องมือและวิธีการที่แนะนำในการวางแผนกำลังการผลิตสำหรับเว็บไซต์และเว็บแอปพลิเคชั่นคืออะไร?

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

คำตอบ:


127

คำตอบสั้น ๆ คือ: ไม่มีใครสามารถตอบคำถามนี้ได้ยกเว้นคุณ

คำตอบที่ยาวคือการเปรียบเทียบภาระงานเฉพาะของคุณเป็นสิ่งที่คุณต้องทำเองเพราะมันค่อนข้างเหมือนกับถามว่า "สตริงยาวแค่ไหน?"

เว็บไซต์แบบคงที่เดียวที่เรียบง่ายสามารถโฮสต์ใน Pentium Pro 150 และยังคงให้บริการการแสดงผลนับพันทุกวัน

วิธีการพื้นฐานที่คุณต้องใช้เพื่อตอบคำถามนี้คือลองทำดูว่าเกิดอะไรขึ้น มีเครื่องมือมากมายที่คุณสามารถใช้เพื่อทำให้ระบบของคุณดุ้งดิ้งภายใต้ความกดดันเพื่อดูว่าหัวเข็มขัดอยู่ที่ใด

ภาพรวมโดยย่อของสิ่งนี้คือ:

  • ใส่สถานการณ์ของคุณในสถานที่
  • เพิ่มการตรวจสอบ
  • เพิ่มทราฟฟิก
  • ประเมินผลลัพธ์
  • ให้อภัยตามผลลัพธ์
  • ล้างซ้ำจนกว่าจะมีความสุขพอสมควร

ใส่สถานการณ์ของคุณในสถานที่

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

ตั้งค่าเซิร์ฟเวอร์บัญชีเว็บไซต์แบนด์วิดท์ ฯลฯ แม้ว่าคุณจะทำสิ่งนี้บน VMs ที่ใช้ได้ตราบใดที่คุณพร้อมที่จะขยายผล

ดังนั้นฉันจะตั้งค่าเครื่องเสมือนกลางกำลัง (สองคอร์, 512 MB RAM, HDD 4 GB) และติดตั้งตัวโหลดบาลานเซอร์ที่ชื่นชอบhaproxyภายในRed Hat Linuxบน VM

ฉันจะมีเว็บเซิร์ฟเวอร์สองเครื่องด้านหลัง load balancer ที่ฉันจะใช้เพื่อทดสอบความเครียด load balancer เว็บเซิร์ฟเวอร์ทั้งสองนี้ได้รับการตั้งค่าให้เหมือนกับระบบจริงของฉัน

เพิ่มการตรวจสอบ

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

ฉันจะตรวจสอบการใช้ RAM, CPU และดิสก์ในhaproxyอินสแตนซ์เพื่อให้แน่ใจว่าตัวโหลดบาลานซ์สามารถจัดการการเชื่อมต่อได้

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

บางสิ่งที่คุณต้องการตรวจสอบเสมอ:

  • การใช้งาน CPU
  • การใช้ RAM
  • การใช้งานดิสก์
  • เวลาแฝงของดิสก์
  • การใช้งานเครือข่าย

คุณอาจเลือกดูการหยุดชะงักของ SQL ค้นหาเวลา ฯลฯ ขึ้นอยู่กับสิ่งที่คุณทำการทดสอบเป็นพิเศษ

เพิ่มทราฟฟิก

นี่คือสิ่งที่ได้รับความสนุกสนาน ตอนนี้คุณต้องจำลองการทดสอบโหลด มีเครื่องมือมากมายที่สามารถทำได้ด้วยตัวเลือกที่กำหนดค่าได้:

เลือกตัวเลขใดก็ได้ สมมติว่าคุณกำลังจะเห็นว่าระบบตอบสนองอย่างไรกับ 10,000 ครั้งต่อนาที ไม่สำคัญว่าคุณจะเลือกหมายเลขใดเพราะคุณจะทำซ้ำขั้นตอนนี้หลายครั้งปรับตัวเลขขึ้นหรือลงเพื่อดูว่าระบบตอบสนองอย่างไร

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

กดปุ่ม Magic Goและดูเว็บเซิร์ฟเวอร์ของคุณที่จะพังและพัง

ประเมินผลลัพธ์

ดังนั้นตอนนี้คุณต้องย้อนกลับไปที่การวัดของคุณที่รวบรวมไว้ในขั้นตอนที่ 2 คุณจะเห็นว่าการเชื่อมต่อพร้อมกัน 10,000 รายการhaproxyกล่องของคุณแทบจะไม่เหนื่อย แต่เวลาตอบสนองกับเว็บเซิร์ฟเวอร์สองเครื่องเป็นเวลาห้าวินาที นั่นไม่เจ๋ง - จำไว้ว่าเวลาตอบสนองของคุณตั้งเป้าไว้สองวินาที ดังนั้นเราต้องทำการเปลี่ยนแปลงบางอย่าง

remediate

ตอนนี้คุณต้องเร่งเว็บไซต์ของคุณให้เร็วขึ้นกว่าสองเท่า เพื่อให้คุณรู้ว่าคุณต้องขยายหรือย่อขนาด

หากต้องการขยายขนาดรับเว็บเซิร์ฟเวอร์ที่ใหญ่กว่า RAM มากขึ้นดิสก์ที่เร็วกว่า

เพื่อขยายออกรับเซิร์ฟเวอร์เพิ่ม

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

หากคุณเห็นว่าหน่วยประมวลผลอยู่ที่ 100% ในระหว่างการทดสอบคุณอาจต้องขยายเพื่อเพิ่มเว็บเซิร์ฟเวอร์เพิ่มเติมเพื่อลดแรงกดดันต่อเซิร์ฟเวอร์ที่มีอยู่

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

สมมติว่าเรากำลังจะขยายออก ดังนั้นฉันตัดสินใจที่จะโคลนเว็บเซิร์ฟเวอร์สองเครื่องของฉัน (เป็น VM) และตอนนี้ฉันมีเว็บเซิร์ฟเวอร์สี่แห่ง

ล้างซ้ำ

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

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


1
สิ่งนี้ยอดเยี่ยมสำหรับการทดสอบโหลด แต่พูดเพียงเล็กน้อยเกี่ยวกับการวางแผนกำลังการผลิต ใครบ้างที่สามารถเขียนเกี่ยวกับสถาปัตยกรรมที่ปรับขนาดได้ของ Google ซึ่งมีมาตั้งแต่ต้นหรือทางเลือกอื่นที่ใช้กล่องน้อยลงและมีราคาแพงกว่า
rleir

10

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

การวัดประสิทธิภาพทำได้เสมอกับหน่วยเวลาเช่น

  • พวกเขาคือสิ่งที่ผู้ใช้ใส่ใจ
  • พวกเขาสามารถปรับขนาดขึ้นและลง

สิ่งต่างๆเช่น% CPU และ IOPS เป็นระบบเฉพาะดังนั้นคุณจะใช้มันเฉพาะเมื่อคุณวางแผนระบบและวัดในการผลิตล่วงหน้าเพื่อทำหน้าที่เป็น "ตัวแทน" สำหรับเวลาที่คุณสนใจ


8

การวางแผนความจุเป็นสัตว์ร้ายที่ลำบาก มันเป็นวิทยาศาสตร์มากพอ ๆ กับศิลปะ (ถ้าเป็นอันมืดมิด)

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

ไม่มีแรงกดดัน ...

น่าเสียดายที่การวางแผนกำลังการผลิตที่ครอบคลุมนั้นเกินกว่าที่จะกลั่นให้เป็นคำตอบเดียวสำหรับเซิร์ฟเวอร์ จริงๆมันเป็นหัวข้อที่คุ้มค่าของหนังสือ

โชคดีที่มีหนังสือเช่น: " ศิลปะแห่งการวางแผนกำลังการผลิต "


5

เพื่อขยายโพสต์ของ Mark Henderson ฉันกำลังเขียนเฉพาะ Apache นี้ เพื่อย้ำสิ่งที่เขาพูดว่า "คำตอบสั้น ๆ คือ: ไม่มีใครสามารถตอบคำถามนี้ได้ยกเว้นคุณ" ข้อความของคำตอบนี้ยืมมาอย่างหนักจากคำตอบของฉันคำถามที่คล้ายกันเกี่ยวกับประสิทธิภาพของเว็บไซต์ของ Drupal

การกำหนดค่า Apache ด้วย Mod_Prefork

Apacheเป็นหนึ่งในเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุด (ถ้าไม่ใช่) มันเป็นโอเพ่นซอร์สและยังคงได้รับการบำรุงรักษาอย่างแข็งขัน คุณสามารถรันได้ทั้งบนระบบปฏิบัติการ Linux และ Windows แต่ได้รับความนิยมมากขึ้นในโลก Linux / Unix

คุณไม่ควรใช้การกำหนดค่า Apache แบบนอกกรอบ คุณต้องปรับแต่ง Apache กับเว็บไซต์ของคุณเสมอ หลักการกำหนดค่า Apacheไฟล์บน CentOS ตั้งอยู่ที่/etc/httpd/conf/httpd.confและไฟล์ config หลัก Apache บนระบบ Ubuntu /etc/apache2/apache2.confมักจะตั้งอยู่ที่ config ไฟล์เพิ่มเติมจะนำมาใช้สำหรับสิ่งที่ต้องการโฮสต์เสมือน

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

เวลาส่วนใหญ่ในการติดตั้ง Apache เริ่มต้นที่มาพร้อมกับเซิร์ฟเวอร์ CentOS และ Ubuntu นั้นจะใช้ MPM " mod_prefork " สมมติว่าคุณใช้ mod_prefork (หากคุณไม่แน่ใจนั่นเป็นโอกาสที่มากขึ้น แต่มีเพียงคุณเท่านั้นที่รู้ว่า) นี่คือพื้นฐานของวิธีการตั้งค่า:

  • กำหนดจำนวนหน่วยความจำสูงสุดที่คุณต้องการให้ Apache ใช้งานได้
  • ทดสอบเว็บไซต์ของคุณอย่างหนักและกำหนดจำนวนหน่วยความจำที่กระบวนการ Apache ใช้ (ใช้ด้านบน)
  • ใช้กระบวนการ Apache ที่อยู่ด้านบนที่ใช้หน่วยความจำมากที่สุดเพิ่มนิดหน่อยเพื่อวัดที่ดีจากนั้นหารหมายเลขแรกของคุณ (จำนวนหน่วยความจำสูงสุดที่คุณต้องการให้ Apache ใช้) ด้วยหมายเลขใหม่นี้
  • จำนวนที่คุณได้รับควรเป็นMaxClients& ServerLimitตัวแปรของคุณ

นี่ไม่ใช่คำตอบสุดท้าย การปรับแต่งเซิร์ฟเวอร์ Apache ของคุณต้องใช้เวลาและต้องมีประสบการณ์ในการทำให้ถูกต้อง


1
การใช้หน่วยความจำที่ขึ้นอยู่กับด้านบนนั้นมีข้อบกพร่องเล็กน้อยโปรดตรวจสอบ fe stackoverflow.com/questions/7880784/นอกจากนี้คุณอาจต้องการใช้สคริปต์ python "ps_mem.py" แทนการใช้หน่วยความจำสูงสุดหรือแม้แต่ใช้ค่าที่แนบมาโดยตรง สู่กระบวนการภายใต้ / proc
Dennis Nolte

1
คำตอบทั้งหมดมีค่าเนื่องจากบันทึกย่อที่คุณเพิ่ม: "คุณไม่ควรใช้การกำหนดค่า Apache แบบนอกกรอบ" เราไม่สามารถความเครียดนี้พอ
ezra-s

0

นอกจากนี้ฉันขอแนะนำให้พูดคุยกับสถาปนิกและวิศวกรที่ออกแบบ / สร้างแอปพลิเคชันเพื่อพยายามระบุปัญหาคอขวดจุดล้มเหลวจุดเดียวและข้อ จำกัด ด้านลิขสิทธิ์

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