ให้บริการไฟล์คงที่ด้วย nginx ผ่าน NFS?


9

ฉันมีเว็บไซต์ที่ได้รับคำขอประมาณ 7k ต่อวินาทีบนเซิร์ฟเวอร์ nginx เซิร์ฟเวอร์นี้ทั้งสองจัดการการเขียนใหม่ไปยังเซิร์ฟเวอร์ Apache เช่นเดียวกับการให้บริการไฟล์คงที่ภาพ ฯลฯ โดยตรง ไฟล์สแตติกเป็นส่วนที่ใหญ่ที่สุดในนั้นด้วยคำขอประมาณ 5k

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

NFS เร็วพอหรือยังสำหรับเรื่องนี้ มีการ จำกัด จำนวนคำขอที่ NFS สามารถจัดการได้หรือไม่ มีตัวเลือก "ต้องมี" เมื่อไปทางนี้หรือไม่?

โบนัส: มีทางเลือกอื่นสำหรับการตั้งค่านี้นอกเหนือจาก NFS หรือไม่

ขอบคุณ!


ไม่มีการเข้าถึงแบบอ่านหรือ "เข้าถึงเท่านั้น" หรือไม่
pauska

ขอบคุณ! เฉพาะการเข้าถึงเพื่ออ่านและไม่สามารถเข้าถึงเพื่อเขียน
j0nes

2
7k ร้องขอต่อวินาทีคือ ~ 6,048,00,000 คำขอต่อวันหากคุณใช้เซิร์ฟเวอร์ NGINX เดียวเรา (และ บริษัท ที่ใช้กลุ่มเซิร์ฟเวอร์สำหรับการโหลดครึ่งหนึ่ง) จะรักการตั้งค่าของคุณ
Smudge

คำตอบ:


2

ด้วยการตั้งค่าเซิร์ฟเวอร์ NFS ส่วนกลางคุณจะนำเสนอความล้มเหลวเพียงจุดเดียวในการออกแบบของคุณ สิ่งเดียวที่ควรจะเป็นตัวทำลายข้อตกลง ถ้าไม่เช่นนั้น NFS อาจเร็วพอสำหรับการโหลดเช่นนี้ ปัจจัยสำคัญจะมี RAM เพียงพอที่จะแคชไฟล์การเชื่อมต่อระหว่างกันที่มีความหน่วงต่ำ (Gig-E หรือดีกว่า) และการปรับแต่ง (น้อยกว่าก่อนหน้า)

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


2
NFS ไม่จำเป็นต้องเป็น SPoF
gWaldo

@gWaldo คุณจะตั้งค่า "เซิร์ฟเวอร์ NFS ส่วนกลาง" ได้อย่างไรและไม่ได้เป็น SPoF
Chris S

คุณทำได้โดยตระหนักว่าเซิร์ฟเวอร์ NFS ส่วนกลางคือ SPoF และเลือกที่จะใช้คลัสเตอร์ NFS แทน ฉันไม่ได้เห็นด้วยกับคุณจริงๆ ....
gWaldo

ขอบคุณ - ยอมรับโซลูชันนี้เพราะฉันคิดว่าฉันจะไปเส้นทาง rsync เพื่อหลีกเลี่ยงจุดเดียวของความล้มเหลว (ซึ่งควรเป็นปัญหาหลักของฉัน)
j0nes

มันค่อนข้างง่ายในการติดตั้งเซิร์ฟเวอร์ NFS ที่จำลองแบบสองระดับความพร้อมใช้งานสูงโดยใช้ GlusterFS และ CTDB ในแง่ของประสิทธิภาพคลัสเตอร์ของฉันได้รับคำขอประมาณ 10k ต่อวินาทีและมันก็แตกได้ดี ปัญหาเดียวคือเซิร์ฟเวอร์ NFS จะต้องมี RAM มากมาย
Alpha01

2

ฉันใช้cachefilesd (และเคอร์เนล linux ที่ผ่านมาพร้อมกับ cachefs) เพื่อแคชไฟล์ NFS ไปยัง HD ในเครื่อง วิธีนี้ทุกการอ่านใน nfs จะคัดลอกไฟล์ไปยัง / var / cache / fs dir และการอ่านครั้งถัดไปจะถูกส่งจากที่นั่นโดยมีเคอร์เนลตรวจสอบใน nfs หากเนื้อหายังคงถูกต้อง

วิธีนี้คุณสามารถมี NFS ส่วนกลางได้ แต่ไม่สูญเสียประสิทธิภาพของไฟล์โลคัล

Cachefilesd จะดูแลการล้างไฟล์เก่าเมื่อขนาด / inodes ฟรีถึงระดับที่กำหนดไว้ดังนั้นคุณสามารถให้บริการข้อมูลที่ผิดปกติจาก NFS และคำขอทั่วไปจาก HD

แน่นอนว่ายังใช้น้ำยาวานิชเพื่อแคชคำขอที่พบบ่อยและบันทึก nginx / NFS จากการให้บริการแล้ว

นี่คือ cachefilesd ขนาดเล็ก howto


1

ความเร็วขึ้นอยู่กับหลายปัจจัย:

  • เซิร์ฟเวอร์ของคุณจะเชื่อมต่อกับเป้าหมายของ NFS อย่างไร ดิสก์ SAS แบบดูอัลพอร์ตเดียวสามารถใช้ความเร็วการถ่ายโอน 6gbit / s จำไว้ว่าหากคุณวางแผนที่จะใช้ 1gig Ethernet (ซึ่งคุณสามารถลบค่าใช้จ่าย TCP 20% ได้)
  • เซิร์ฟเวอร์ NFS ประเภทใดที่จะได้รับแคช คุณใช้คอนโทรลเลอร์อาร์เรย์ระดับองค์กรที่มีแคชจำนวนมากหรือไม่ การอ่านแคชคือกุญแจสำคัญในการตั้งค่านี้
  • มีเซิร์ฟเวอร์กี่เครื่องที่เข้าถึงไฟล์เดียวกันพร้อมกัน? การล็อค NFS สามารถทำร้ายได้ - ไม่ดี

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

อีกทางเลือกหนึ่งสำหรับเซิร์ฟเวอร์ไฟล์กลางคือการใช้การซิงโครไนซ์ / การจำลองแบบระหว่างเว็บเซิร์ฟเวอร์ของคุณ (เช่น Chris S แนะนำ) rsync หรือ DRBD อาจเป็นตัวเลือกที่ยอดเยี่ยมและคุ้มค่า


1

ฉันจะแนะนำกับ NFS ยกเว้นว่าคุณใส่ Caching ไว้ในนั้น แคช nginx ดีกว่าไม่มีอะไร แต่วานิชดีกว่า

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

หากคุณใส่ NFS ตรวจสอบให้แน่ใจว่าคุณมีความซ้ำซ้อน


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