เซิร์ฟเวอร์ mysql สามารถเลือกได้กี่ตัวต่อวินาที


19

ฉันเขียนแผนธุรกิจและต้องจำลองต้นทุนเมื่อเว็บไซต์ของฉันเข้าถึงได้จากผู้เข้าชมที่ไม่ซ้ำกัน 500,000 คน

  • ผู้เยี่ยมชม: 500.000
  • จำนวนหน้าที่มีการเปิด: 1,500,000
  • จำนวนหน้าที่มีการเปิด Spider: 500,000
  • จำนวนหน้าที่มีการเปิดทั้งหมด: 2,000,000

แต่ละหน้ามี 50 คำค้นหา + -

  • ข้อความค้นหาต่อวัน: 100 ล้าน
  • ต่อชั่วโมง: 4 ล้าน
  • ต่อนาที: 70,000
  • ต่อวินาที: 1,200
  • สูงสุด: 3,000

ทำการคำนวณนี้ฉันต้องการ 3,000 คิวรีที่สอง ... เซิร์ฟเวอร์ประเภทใดที่สามารถจัดการได้?

ปัญหาคือ: จริง ๆ แล้วเว็บไซต์ของฉันมีการเข้าชม 2,000 วันและมี - + 150/200 ข้อความค้นหา / วินาที ... เริ่มจากจุดนี้ฉันจะได้รับข้อความค้นหา 50,000 ข้อความ / วินาที

ฉันต้องการเซิร์ฟเวอร์จำนวนมากในคลัสเตอร์หรือการจำลองแบบที่จัดการงานนี้


5
8k + ไซต์ประเภทใดที่สอบถามการเข้าชม
Ignacio Vazquez-Abrams

5
คุณต้องตรวจสอบการออกแบบระบบทันที
Chopper3

1
ไม่มีข้อมูลใกล้พอเพราะคุณไม่ได้บอกอะไรเราเกี่ยวกับสิ่งที่สำคัญจริงๆ - คำถามเอง ไม่ต้องบอกเราเกี่ยวกับเครื่องที่คุณใช้งานอยู่ นี่คือ 486 หรือไม่ ซุปเปอร์คอมพิวเตอร์ใหม่ล่าสุดและยิ่งใหญ่ที่สุดหรืออะไรทำนองนั้น? ตัวเลขทั้งหมดที่คุณระบุไว้ไม่เกี่ยวข้องกับคำถาม กรุณาให้ข้อมูลที่เกี่ยวข้อง
John Gardeniers

> 8k + ไซต์ประเภทใดที่สอบถามข้อมูลการเยี่ยมชม ฉันได้รับผู้เข้าชมที่ไม่ซ้ำ 2,000 คน แต่ผู้เข้าชมแต่ละคนเปิดหน้าเว็บหลายหน้า + ฉันมีสไปเดอร์จำนวนมากอยู่ภายใน ผู้ใช้ที่ไม่ซ้ำกัน 2,000 รายกำลังสร้าง ips ที่ไม่ซ้ำกัน 6,000 แห่งซึ่งเปิดได้มากกว่า 120,000 หน้าเปิดทุกวัน ขอบคุณ

คำตอบ:


22

ฉันเคยทำงานให้กับ บริษัท อีคอมเมิร์ซด้วยเว็บไซต์ที่มีการเข้าชมหลายล้านครั้งต่อวัน เรามี DELL PE 1750 หนึ่งตัวพร้อมซีพียูหลัก 2 ตัวและ RAM 2GB ขนาดฐานข้อมูลประมาณ 4 กิกะไบต์. ในช่วงเวลาเร่งด่วนเซิร์ฟเวอร์นี้จัดการได้ถึง 50k + ข้อความค้นหาต่อวินาที

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

จากประสบการณ์นั้นฉันสามารถบอกคุณได้ว่าผลกระทบสูงสุดเกิดจากดัชนีที่ขาดหายไปดัชนีผิดและการออกแบบฐานข้อมูลไม่ดี (เช่นฟิลด์สตริงยาวเป็นคีย์หลักและไร้สาระคล้ายกัน)


8

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

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


หรือการเปลี่ยนแปลงบางอย่างที่ร้ายแรงและสคี reindexing ...
Massimo

3
การปรับแต่งนั้นเป็นที่ต้องการมากกว่าการเพิ่มฮาร์ดแวร์มากขึ้น การเพิ่มฮาร์ดแวร์เพิ่มเติมเพียงปิดบังปัญหาจนกว่าจะถึงเวลาที่ปัญหาจะแก้ไขได้ยากขึ้น
mrdenny

ขอบคุณสำหรับคำตอบดังนั้นฉันคิดว่าเซิร์ฟเวอร์ 2 ตัวในแบบคู่ขนาน + 1 เรื่อย ๆ สำหรับการซ้ำซ้อนควรจะโอเคใช่ไหม ฉันกำลังพูดถึงเซิร์ฟเวอร์ 2x Quad Core ด้วย RAM 32 กรัมและไดรฟ์ด่วน ฉันถูกไหม? จำไว้ว่าฉันต้องการการแสดง!

1
ทุกอย่างได้รับการปรับแต่งและจัดทำดัชนีอย่างดีฉันมีการสืบค้นแบบช้า 1 หรือ 2 ครั้งต่อสัปดาห์ (และการสืบค้นแบบช้าเวลาเพียง 2 วินาที) อย่างไรก็ตามฉันกำลังเขียนแผนธุรกิจและฉันต้องการทราบว่าเซิร์ฟเวอร์พูลประเภทใด จัดการ 12,000,000 หน้าเปิดที่ก่อให้เกิดรายวันที่มีคำสั่ง 8000 / วินาที

ข้อความค้นหา 8000 รายการต่อวินาทีนั้นไม่ได้มีอะไรมากมาย เซิร์ฟเวอร์หลัก 16 ตัวเดียวอาจทำตามเคล็ดลับ 64 Gigs of RAM (หรือมากกว่าหรือน้อยกว่านั้นขึ้นอยู่กับฐานข้อมูลขนาดใหญ่และจำนวนข้อมูลที่ต้องเก็บไว้ในแคชในแต่ละครั้ง) ควรทำการหลอกลวง My DB (ที่ได้รับ SQL Server) คือ 1 TB บนเซิร์ฟเวอร์ RAM 16 คอร์ 64 กิกะไบต์ที่มีผู้ใช้ 40-50k กดปุ่มทุกวันถึงหลายครั้งต่อนาที (แต่ละรายการ) ตลอดทั้งวัน
mrdenny

3

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

เลือกง่ายในคอลัมน์ที่จัดทำดัชนีค่อนข้างสัตว์ที่แตกต่างจากคู่ของเข้าร่วมตามคนที่ไม่ได้จัดทำดัชนี ... และแน่นอนสิ่งที่เปลี่ยนแปลงมากถ้าตารางที่เกี่ยวข้องมี 1K บันทึกหรือ 1M

นอกจากนี้:

  • การกำหนดค่าฮาร์ดแวร์ปัจจุบันของคุณคืออะไร
  • เซิร์ฟเวอร์ของคุณใช้พลังงานเท่าใด (CPU, RAM, Disk I / O) ภายใต้โหลดปัจจุบัน

จริงๆแล้วฉันมีเซิร์ฟเวอร์ที่มี 2x quad core พร้อม RAM 8 GB ฉันใช้ ram เต็มและ 100% ของโปรเซสเซอร์ (ดูเหมือนว่าฉันสามารถใช้ 800% ดูได้ที่นี่:) cpu: img834.imageshack.us/img834/3483/downloadv.png ram: img442.imageshack.us/i/ดิสก์download2p.png : img213.imageshack.us/i/download1x.png ขอบคุณ

ขึ้นอยู่กับกราฟเหล่านั้นคุณใช้เพียงหนึ่ง (หรืออย่างน้อยที่สุดสอง) ของแกน CPU ของคุณ; ดังนั้นแอปพลิเคชันของคุณจะไม่ผูกติดกับ CPU ... หรือเป็น แต่ก็ไม่สามารถใช้ประโยชน์จาก CPU หลายตัวได้ นอกจากนี้ทั้งหมดของหน่วยความจำที่ใช้สำหรับการแคช "" ไม่ได้ actully จำเป็นโดยทุกคนมันเป็นเพียงแค่ระบบปฏิบัติการการใช้ประโยชน์จากมันเพราะ "ก็มี"
Massimo

ฉันจะหาข้อมูลเกี่ยวกับการใช้ cpu cores ทั้งหมดได้อย่างไร? ฉันกำลังใช้ตะเกียง ...

ก่อนอื่นคุณควรตรวจสอบว่าคุณไม่ได้ใช้เพราะไม่มีความจำเป็นใด ๆ (= โหลดต่ำ) เพราะการทำงานของคุณไม่สามารถขนานกันได้อย่างเหมาะสมหรือเพราะ MySQL และ / หรือ Apache ไม่ได้ถูกกำหนดค่าให้ ใช้มัน. และเนื่องจากทั้งสองโปรแกรมมักจะ multithreaded โดยค่าเริ่มต้นผมได้ดูในปริมาณที่เซิร์ฟเวอร์ของคุณและเข้าไปในคำสั่ง SQL ของคุณ ...
Massimo

3

ดังที่อิกนาชิโอกล่าวไว้คุณอาจต้องการดูแคช ในหน่วยเซนติเมตรหรือแม้กระทั่งด้านหน้าของสแต็ก 50+ ข้อความค้นหาสำหรับทุก ๆ หน้า (ทุก ๆ !) มีจำนวนมากอย่างแท้จริง


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

4
มีเว็บไซต์ที่ไม่สามารถเข้าถึงได้น้อยมาก หากมีการเปลี่ยนแปลงทุก ๆ วินาทีคุณยังคงสามารถแคชได้ทั้งวินาทีเช่นเดียวกับการดูหน้าเว็บ 10 ครั้ง ;-) คุณคิดว่าไม่ได้แคชหน้าทั้งหมด แต่บล็อกหรือค่าที่เฉพาะเจาะจง ฯลฯ คุณสามารถแคชนอกฐานข้อมูลในส่วนหน่วยความจำที่แชร์ระบบไฟล์ memcached นอกจากนี้โดยทั่วไปแล้วในสถานการณ์เช่นนี้ ESI สามารถใช้งานได้อย่างเต็มประสิทธิภาพ
Joris

0

ตัดสินจากความคิดเห็นของคุณปัจจัยที่ใหญ่ที่สุดคือขนาดชุดข้อมูลของคุณหรืออย่างน้อยขนาดชุดข้อมูล "ร้อน" 3,000qps หรือแม้กระทั่ง 8,000qps บนเซิร์ฟเวอร์ 16-core ไม่ได้เป็นปัญหาตราบใดที่เซิร์ฟเวอร์ไม่ค่อยต้องไปที่ดิสก์เพื่อตอบสนองการค้นหา เมื่อชุดข้อมูลที่ใช้งานเกินจำนวนหน่วยความจำที่ InnoDB ใช้ในการแคชประสิทธิภาพของคุณจะลดลงอย่างรวดเร็ว


0

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


0

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

ฉันใช้หน่วยความจำ 3.75GB หนึ่ง cpu, ssd 100GB, gcp cloud mysql เช่นเซิร์ฟเวอร์และรับ:

  • ลูกค้า 1 รายอ่านหนึ่งตารางฟุตหนึ่งตารางเมตร: 799 ตารางเมตร / วินาที
  • ลูกค้า 50 รายอ่านได้หนึ่งแถวจาก sql หนึ่งแถว: 6403 sql / วินาที
  • ลูกค้า 50 รายเขียนหนึ่งตาราง sql: 4341 แถวเขียน, qps 4341 sql / วินาที
  • ลูกค้า 1 รายเขียน 30k แถวต่อ sql: 92109 แถวที่เขียน

เขียนผลการทดสอบ qps (2018-11) gcp mysql 2cpu หน่วยความจำ 7.5GB 150GB ssd เป็นอนุกรมเขียน 10 กระทู้แถว 30k เขียนต่อ sql ตาราง 7.0566GB ความยาวคีย์ข้อมูล 45 ไบต์และความยาวค่า 9 ไบต์รับ 154KB เขียนแถว ต่อวินาที cpu 97.1% เขียน qps 1406 / s ในคอนโซล gcp
ชายบรอนซ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.