แคช HTTP แบบ Squid หรือ Other ที่มี SSD Cache


9

ฉันใคร่ครวญการตั้งค่าแคช squid (หรือวานิช) ในระบบที่มีไดรฟ์ SSD

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

สมมติว่าฉันสามารถใส่ SSD 7 ตัวในการกำหนดค่า RAID (มีบางกรณีที่จะให้ฉันแพ็คมากขึ้น)

คำถามการใช้งาน:

  • ฉันควรใช้ RAID0 หรือไม่ (ฉันคาดว่าไดรฟ์จะล้มเหลวในที่สุดดังนั้นนี่จึงเป็นอันตราย)

  • ฉันควรใช้ RAID10 หรือไม่ (สิ่งนี้จะลดรอยเท้าบนดิสก์ของฉันซึ่งมีราคาแพง)

  • ฉันควรใช้ RAID5 หรือไม่ (SSD เป็นที่รู้จักกันว่ามีประสิทธิภาพการเขียนและการ จำกัด การเขียน "ไม่ดี" และการเขียนแบบพิเศษทั้งหมดอาจทำให้การทำงานช้าลงอย่างมาก)

  • ฉันควรปฏิบัติต่อแต่ละดิสก์ในฐานะที่เป็น squast datastore หรือไม่? (ปลาหมึกจะจัดการกับที่เก็บข้อมูลหลายแห่งได้ดีแค่ไหนและจะเกิดอะไรขึ้นหาก / เมื่อล้มเหลว)

  • ฉันควรเพิกเฉยดาต้าสโตร์และทำ SSD ในพาร์ติชั่น SWAP ขนาดใหญ่แล้วปล่อยให้ linux VM ทำมันได้หรือไม่ (ดูเหมือนเลอะเทอะ)

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


+1 สำหรับคำถามที่น่าสนใจผมไม่เคยคิดว่าการทำไดรฟ์เพียงเป็นพาร์ทิชัน swap ขนาดใหญ่
บ๊อบ

ใช่น่าสนใจแน่นอน ... แม้ว่าฉันจะไม่อยากตกหลุมกับ SSD เลยและเพียงเพิ่ม RAM สำหรับเงินจำนวนนั้นแทน
Oskar Duveborn

น่าเสียดายที่รูปแบบแคชที่ฉันต้องการไม่พอดีกับ RAM ฉันมีปลาหมึกที่สำรอง RAM ไว้แล้วสำหรับวัตถุเหล่านั้น
Joel K

คำตอบ:


8

เราใช้วานิชบนไดรฟ์ ssd ในช่วง 9 เดือนที่ผ่านมามันทำงานได้ดีมากสำหรับเรา ก่อนหน้านี้เราใช้ปลาหมึกหน่วยความจำแคชเฉพาะกับปลาคาร์พเลเยอร์ มันทำงานได้ แต่การกระจายตัวของหน่วยความจำเป็นปัญหาจริงที่ต้องเริ่มต้นใหม่บ่อยครั้ง Squid 2.x จะใช้เพียงหนึ่งคอร์เท่านั้นซึ่งทำให้ไม่มีประสิทธิภาพในฮาร์ดแวร์ปัจจุบัน

สำหรับเว็บไซต์ของเราซึ่งเป็นมิตรกับแคชเราเห็นการใช้งานซีพียูประมาณ 10% ในเครื่อง 8 คอร์ที่รองรับปริมาณข้อมูล 100Mbit / s ในการทดสอบของเราเราใช้แบนด์วิดท์หมดก่อนที่จะถึงขีด จำกัด ของ cpu ด้วยพอร์ต 2 1Gb

ฉันมีคำแนะนำในการใช้น้ำยาวานิชด้วยแคช ssd

  • ประสิทธิภาพการเขียนแบบสุ่มมีความสำคัญจริงๆ เราได้ลองใช้ผู้จำหน่ายหลายรายสำหรับไดรฟ์ ssd ก่อนที่จะตกลงบน intel x-25m เราได้เห็นโพสต์เล็ก ๆ น้อย ๆ เพียง. 1MB / s สำหรับการเขียนแบบสุ่ม 4k เราจะได้รับการเขียนแบบสุ่มขนาด 24k / s 4k ด้วย x-25m

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

  • โหมด mmap แคชวานิชสามารถ mmap'd เป็นไฟล์หรือใช้พื้นที่สว็อป การใช้ swap ไม่ได้ผลสำหรับเรามันมีแนวโน้มที่จะใช้แบนด์วิดธ์ของ i / o มากขึ้นเพื่อรองรับปริมาณการใช้งานที่เท่ากัน มีการอ่าน 4 ส่วนในโค้ด linux swapin เราเขียนโปรแกรมแก้ไขเพื่อลบสิ่งนี้ แต่ยังไม่ได้ลองใช้ในการผลิต

  • กำหนดเวลาสิ้นสุด ด้วย 2.6.28+ นี่คือ ssd ตระหนักและทำงานได้ดี เราลอง noop แต่พบว่ากำหนดเวลามีความยุติธรรมเนื่องจากแบนด์วิดธ์ของ i / o มี จำกัด

  • ปิดใช้งานการอ่านล่วงหน้า เนื่องจากไม่มีความล่าช้าในการหมุนจึงไม่มีจุดในการอ่านข้อมูลพิเศษเพียงเพราะคุณอาจต้องการมัน แบนด์วิดธ์ของ i / o มีค่าสำหรับสิ่งเหล่านี้

  • เรียกใช้ 2.6.28+ mmap พื้นที่มากมายบน linux ทำให้ตัวจัดการหน่วยความจำออกกำลังกายได้ดี แต่การแบ่ง lru patches ช่วยได้มาก การใช้งาน kswapd cpu ลดลงมากเมื่อเราอัปเดต

เราได้โพสต์ไฟล์ VCL เราเช่นเดียวกับเครื่องมือต่างๆที่เราใช้ด้วยสารเคลือบเงาที่ข้อความลิงค์ vcl ยังรวมถึงการแฮ็คอย่างเรียบร้อยที่ใช้เซิร์ฟเวอร์ geoiplookup ที่เร็วมากโดยใช้ฐานข้อมูล maxmind


1

ฉันไม่ได้ใช้ SSD เป็นแคช HTTP แต่ฉันสามารถทำการสังเกตเหล่านี้ได้:

ไม่ใช่ SSD ทุกตัวที่เท่ากันดังนั้นคุณต้องระมัดระวังในการเลือกอันที่เหมาะสม FusionIO สร้าง SSD ที่สำรอง PCIe ซึ่งเป็นนักแสดงระดับไฮเอนด์จริงๆ (ที่มีความจุค่อนข้างต่ำ) แต่มีราคาแพง X25-E SLC SSD ของ Intel นั้นทำงานได้ดีมากและมีราคาไม่แพง แต่ก็ยังมีความจุต่ำ ทำวิจัยของคุณ! ฉันสามารถแนะนำ X25-E SLC Variants ได้อย่างแน่นอนเนื่องจากฉันใช้สิ่งเหล่านี้ในระบบการผลิต

มี SSDS อื่น ๆ อยู่ที่นั่นซึ่งอาจทำให้คุณมีความเร็วในการอ่าน / เขียนตามลำดับที่ดี แต่สิ่งสำคัญสำหรับบางสิ่งเช่นแคชคือการสุ่ม IO และ SSD จำนวนมากจะให้ประสิทธิภาพการทำงานแบบสุ่มเหมือนกับดิสก์หมุน เนื่องจากการเขียนเอฟเฟกต์การขยายใน SSD แผ่นดิสก์หมุนมักจะทำงานได้ดีขึ้น SSD หลายตัวมีตัวควบคุมคุณภาพต่ำ (เช่นตัวควบคุม JMicron รุ่นเก่า) ซึ่งสามารถรับประสิทธิภาพที่ลดลงอย่างมากในบางสถานการณ์ Anandtech และเว็บไซต์อื่น ๆ ทำการเปรียบเทียบที่ดีกับเครื่องมือเช่น iometer ตรวจสอบที่นั่น

และแน่นอนว่า SSD นั้นมีขนาดเล็ก Intel X25-E ซึ่งฉันจะบอกว่าเป็น SSD ที่ดีที่สุดที่ฉันเคยเห็นมาในรุ่น 32 และ 64 GB เท่านั้น

สำหรับระดับ RAID ยังคงมีบันทึกประสิทธิภาพการทำงาน RAID มาตรฐาน การเขียนไปยัง RAID 5 แบบ baically เกี่ยวข้องกับการอ่านบล็อกข้อมูลที่คุณกำลังจะแก้ไขอ่าน parity block อัปเดตพาริตี้เขียนบล็อกข้อมูลและเขียน parity ดังนั้นจึงยังคงให้ประสิทธิภาพที่แย่กว่า RAID อื่น ระดับแม้กับ SSD อย่างไรก็ตามด้วยไดรฟ์เช่น X25-E ที่มีประสิทธิภาพการสุ่ม IO สูงเช่นนี้อาจมีความสำคัญน้อยลงเนื่องจากจะยังคงมีประสิทธิภาพสูงกว่าการสุ่ม IO บนดิสก์หมุนสำหรับอาร์เรย์ที่มีขนาดใกล้เคียงกัน

จากสิ่งที่ฉันได้เห็นแบนด์วิดท์ของตัวควบคุม RAID อิ่มตัวเร็วเกินไปสำหรับการใช้ประโยชน์สูงสุดจากดิสก์ RAID 7 ชุดอย่างน้อยที่สุดเท่าที่เกี่ยวข้องกับประสิทธิภาพตามลำดับ คุณไม่สามารถรับตัวควบคุม SATA ได้มากกว่า 800MB / s ในปัจจุบัน (3ware, areca และอื่น ๆ ) การมีอาร์เรย์ที่เล็กกว่าในตัวควบคุมหลายตัว (เช่น RAID1 หลายตัวแทนที่จะเป็น RAID10 ตัวเดียว) จะปรับปรุงสิ่งนี้แม้ว่าประสิทธิภาพของแต่ละอาเรย์ของแต่ละอาร์เรย์จะได้รับผลกระทบ

เกี่ยวกับแคช HTTP ฉันคิดว่าคุณจะได้รับบริการที่ดีขึ้นด้วยดิสก์หมุนที่เหมาะสมและ RAM มากมาย วัตถุที่เข้าถึงบ่อยจะยังคงอยู่ในแคชหน่วยความจำไม่ว่าจะเป็นแคชภายในของปลาหมึกหรือในแคช fs ของระบบปฏิบัติการ เพียงแค่ให้เครื่อง ram มากขึ้นสามารถลดการโหลดดิสก์ได้อย่างมากเนื่องจากสิ่งนี้ หากคุณใช้งาน squid cache ขนาดใหญ่คุณอาจต้องการพื้นที่ดิสก์จำนวนมากและ SSD ที่มีประสิทธิภาพสูงยังคงมีความจุเพียงเล็กน้อยเท่านั้น


แม้แต่ X25-M ก็ยังสามารถใช้งานได้
Pyrolistical

ฉันทำการบ้านและรู้วิธีหลีกเลี่ยง JMicrons ฉันกำลังพิจารณา X25-Ms (Intel MLC) เป็นส่วนใหญ่และอาจเป็นซีรีส์ OCZ Vertex รุ่นใหม่ (ไม่ใช่ JMicron)
Joel K

ว้าวจุดสุดยอด ocz มีการเขียนแบบสุ่มสูงสุดต่ำกว่าแม้แต่ x25-m !!!
Pyrolistical

1

ฉันไม่คุ้นเคยกับไดรฟ์ SSD แต่ฉันสามารถพูดคุยเกี่ยวกับสถาปัตยกรรมที่ฉันใช้ซึ่งอาจช่วยแก้ปัญหาของคุณได้

พี่น้อง

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

วีไอพี

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

เด็ก ๆ

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

ปลาหมึกตัวเอง

ฉันไม่ได้ดู 3.0 จริง ๆ แต่ 2.x ยังคงเป็นเธรดเดี่ยว ในบางจุดคุณกำลังจะหมด CPU หรือบัฟเฟอร์ TCP ฉันจะกระจายแคชใน 2-3 กล่องน้อยกว่าถ้าเป็นไปได้ นอกจากนี้คุณอาจต้องการวางแผนแบ่งพาร์ค Squid ฟาร์มของคุณในอนาคตหากคุณเห็นว่าระบบกำลังเติบโต

โชคดีในกรณีใด ๆ กับการสร้าง SSD ของคุณ ฉันสนใจที่จะได้ยินว่ามันจะเปิดออกในขณะที่ฉันอาจจะไปเส้นทางที่ในอนาคต


0

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

เพียงใช้ Raid 0 หรือแยกพวกมันออก ฉันคิดว่าการแยกจะดีกว่าเนื่องจากความล้มเหลวของไดรฟ์จะไม่ทำให้แคชทั้งหมดของคุณสูญหาย


Squid กู้คืนมาได้ดีแค่ไหนหากแหล่งข้อมูลเดียวล่ม (เห็นได้ชัดว่าฉันจำเป็นต้องทดสอบสิ่งนี้) RAID5 คือการประนีประนอมหาก Squid ไม่ได้สง่างามเกี่ยวกับ datastore ที่ล้มเหลว
Joel K

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