ฉันกำลังสร้างแพคเกจการวิเคราะห์และข้อกำหนดของโครงการระบุว่าฉันต้องการการสนับสนุน 1 พันล้านครั้งต่อวัน ใช่ "พันล้าน" กล่าวอีกนัยหนึ่งคือไม่น้อยกว่า 12,000 ครั้งต่อวินาทีที่ยั่งยืนและโดยเฉพาะอย่างยิ่งบางห้องที่จะระเบิด ฉันรู้ว่าฉันจะต้องใช้เซิร์ฟเวอร์หลายเครื่องสำหรับเรื่องนี้ แต่ฉันพยายามที่จะเพิ่มประสิทธิภาพสูงสุดของแต่ละโหนดก่อนที่จะ "ทิ้งฮาร์ดแวร์เพิ่มเติม"
ตอนนี้ฉันมีส่วนติดตามที่สำเร็จแล้วและได้รับการปรับปรุงให้ดีที่สุด ฉันสวยมากเพียงแค่บันทึกคำขอลงใน Redis (สำหรับการประมวลผลในภายหลังด้วย Hadoop) แอปพลิเคชั่นนี้คือ Python / Django ที่มี gunicorn สำหรับเกตเวย์
เซิร์ฟเวอร์ 2GB Ubuntu 10.04 Rackspace ของฉัน (ไม่ใช่เครื่องที่ใช้งานจริง) สามารถให้บริการไฟล์คงที่ประมาณ 1200 ไฟล์ต่อวินาที (ทำการเปรียบเทียบโดยใช้ Apache AB กับสินทรัพย์คงที่เดียว) ในการเปรียบเทียบหากฉันสลับลิงก์ไฟล์คงที่กับลิงก์ติดตามของฉันฉันยังได้รับประมาณ 600 คำขอต่อวินาที - ฉันคิดว่านี่หมายความว่าตัวติดตามของฉันได้รับการปรับให้เหมาะสมเพราะมันเป็นเพียงปัจจัย 2 ช้ากว่าการแสดงเนื้อหาแบบคงที่เดียวกัน ซ้ำแล้วซ้ำเล่า
อย่างไรก็ตามเมื่อฉันเปรียบเทียบกับความนิยมหลายล้านครั้งฉันสังเกตเห็นบางสิ่ง -
- ไม่มีการใช้ดิสก์ - คาดว่าเป็นเพราะฉันได้ปิดบันทึก Nginx ทั้งหมดและรหัสที่กำหนดเองของฉันไม่ได้ทำอะไรนอกจากบันทึกรายละเอียดคำขอลงใน Redis
- การใช้งานหน่วยความจำไม่คงที่ - น่าจะเป็นเพราะการจัดการหน่วยความจำของ Redis การใช้งานหน่วยความจำของฉันจะค่อยๆปีนขึ้นและจากนั้นเลื่อนถอยหลัง แต่มันไม่เคยเป็นคอขวดของฉันเลย
- โหลดของระบบวนเวียนอยู่ประมาณ 2-4 ระบบยังคงตอบสนองได้แม้กระทั่งมาตรฐานที่หนักที่สุดของฉันและฉันยังสามารถดูhttp://mysite.com/tracking/pixelด้วยตนเองด้วยความล่าช้าเล็กน้อยที่มองเห็นได้ในขณะที่เซิร์ฟเวอร์ (อื่น ๆ ) ของฉันทำงาน 600 คำขอต่อ ที่สอง
- หากฉันทำการทดสอบสั้น ๆ ว่า 50,000 ครั้ง (ใช้เวลาประมาณ 2 นาที) ฉันจะได้รับการร้องขอที่มั่นคงและเชื่อถือได้ 600 ต่อวินาที ถ้าฉันใช้การทดสอบที่นานขึ้น (พยายามจนถึง 3.5m จนถึงตอนนี้) r / s ของฉันจะลดลงเหลือ 250
คำถามของฉัน -
ดูเหมือนว่าฉันกำลังขยายเซิร์ฟเวอร์นี้หรือไม่ ไฟล์สแตติก 1,200 / s มีประสิทธิภาพ nginx เปรียบได้กับสิ่งที่คนอื่นเคยมีประสบการณ์?
ข มีการปรับค่า nginx ทั่วไปสำหรับแอปพลิเคชั่นที่มีปริมาณสูงเช่นนั้นหรือไม่? ฉันมีเธรดผู้ปฏิบัติงานตั้งไว้ที่ 64 และเธรดการทำงานของ gunicorn ตั้งค่าเป็น 8 แต่การปรับแต่งค่าเหล่านี้ดูเหมือนจะไม่ช่วยหรือทำร้ายฉันมากนัก
ค. มีการตั้งค่าระดับ linux ที่ จำกัด การเชื่อมต่อขาเข้าของฉันหรือไม่?
d อะไรที่ทำให้ประสิทธิภาพของฉันลดลงถึง 250r / s จากการทดสอบที่ใช้เวลานาน อีกครั้งหน่วยความจำไม่ได้สูงสุดในระหว่างการทดสอบเหล่านี้และการใช้ HDD ไม่มีศูนย์
ขอบคุณล่วงหน้าทั้งหมด :)
แก้ไข นี่คือการตั้งค่า nginx ของฉัน - http://pastie.org/1450749 - ส่วนใหญ่เป็นวานิลลาที่มีไขมันที่ชัดเจนถูกตัดออก