วิธีแชร์เนื้อหาระหว่างเว็บเซิร์ฟเวอร์หลายเครื่อง


16

ฉันมีเว็บเซิร์ฟเวอร์ Linux หลายตัวติดอยู่กับ load balancer และฉันต้องการแชร์เนื้อหา (เช่นรูปภาพวิดีโอและอื่น ๆ ) ระหว่างเซิร์ฟเวอร์เหล่านี้ วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?

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

ขอบคุณล่วงหน้า.


นี่คือที่สิ่งต่าง ๆ เช่น Cassandra (ฐานข้อมูล NoSQL) มีประโยชน์
Alexis Wilke

ถือว่าใช้ Varnish เพื่อปรับปรุงประสิทธิภาพในการจราจรหนาแน่นหรือไม่? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

คำตอบ:


12

มีหลายวิธีในการทำสิ่งนี้ตามความต้องการของคุณ

  • ใช้เซิร์ฟเวอร์ไฟล์กลางที่เมาท์กับ fx NFS บนเว็บเซิร์ฟเวอร์
  • เหมือนข้างบน แต่ซ้ำซ้อนดังนั้นหากมีใครลงไปอีกคนก็เข้ามาแทนที่
  • ใช้เครื่องมือซิงโครไนซ์บางประเภท (ตัวอย่างเช่น rsync) และโฮสต์ไฟล์แบบโลคัลบนเว็บเซิร์ฟเวอร์ จากนั้นตั้งค่า cronjob เพื่อซิงค์ไฟล์ระหว่างเซิร์ฟเวอร์ในช่วงเวลาที่ระบุ
  • ใช้ CDN เช่น Amazon S3, Akamai เป็นต้น

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

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


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

@AlexisWilke - คุณพูดถูก rsync และฉันก็พูดถึงมันเช่นกันในคำตอบ ฉันได้ชี้แจงในคำตอบตอนนี้
Frederik Nielsen

Re: # 3 'ช่วงเวลาที่ตายแล้ว' ระหว่างการปรับใช้เนื้อหาใหม่และการซิงโครไนซ์เนื้อหาใหม่สามารถย่อให้เล็กสุดได้หากคุณใช้ตัวตรวจสอบระบบไฟล์ (เช่นwatchmanของ Facebook ) และเครื่องมือซิงค์อย่างรวดเร็ว (เช่นcsync2 ) ไม่ความล่าช้าจะไม่ลดลงเหลือศูนย์ แต่น้อยมากและอาจปรับใช้ง่ายกว่าทางเลือกอื่น ๆ
pepoluan

2

อีกวิธีที่ยอดเยี่ยมในการลดการโหลดบนเว็บเซิร์ฟเวอร์และการปรับสมดุลโหลดคือใช้ squid (คือ squid3) ตั้งค่าเป็นพร็อกซีย้อนกลับที่มีการแคช มันจะแคชเนื้อหาแบบคงที่เช่นรูปภาพ ฯลฯ ไปยัง HDD (ค่าเริ่มต้น) หรือเป็น RAM (เร็วกว่าและดีที่สุด) หากคุณตั้งค่าไว้ มันมีความสามารถในการปัดเศษโรบินไปยังเซิร์ฟเวอร์ squid อื่น ๆ เช่นกันหากมีโหนดใดโหนดหนึ่งโอเวอร์โหลด


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

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

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

1

เนื่องจากโดยปกติแล้วความต้องการเซิร์ฟเวอร์เพิ่มเติมมาจากทรัพยากรที่จำเป็นในการเรียกใช้เว็บไซต์ / aps แบบไดนามิกให้พิจารณาโฮสต์สินทรัพย์คงที่ที่โดเมนย่อย / โดเมนอื่น (เช่น static.yourdomain.com)

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

ขึ้นอยู่กับ load balancer ของคุณคุณอาจทำได้บนโดเมนเดียวกันโดยที่ load balancer ตัดสินใจว่าเซิร์ฟเวอร์ใดที่จะใช้สำหรับการร้องขอใด ๆ แต่ถ้าคุณใช้โดเมนแยกต่างหากคุณสามารถใส่สินทรัพย์แบบคงที่ของคุณลงใน CDN ได้ง่ายถ้า ความต้องการที่จะเกิดขึ้น!


1

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

  • ไฟล์ถ่ายทอดสดบนโฮสต์ส่วนกลางแชร์กับเว็บโฮสต์ผ่าน NFS mount
  • rsync ทำงาน 15 นาทีตลอดเวลาเพื่อให้สำเนาแบบอ่านอย่างเดียวในแต่ละพื้นที่เว็บใหม่
  • check_linkทุบตีสคริปต์ทำงานทุกนาทีเพื่อให้แน่ใจว่า NFS ภูเขายังคงมีอยู่และหากไม่ swaps symlink ไปอ่านอย่างเดียวคัดลอก

รายละเอียดเพิ่มเติมพบได้ในบทความนี้เมื่อฉันติดตั้งระบบนี้ครั้งแรก

upsides:

  • การอ่านไฟล์พร้อมใช้งานสูง
  • ไม่มีเงื่อนไขการแข่งขันสำหรับการเขียนไฟล์
  • ไฟล์ใหม่จะสามารถใช้งานได้ทันทีสำหรับโฮสต์เว็บทั้งหมด

ข้อเสีย:

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

0

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

นี่คือการแนะนำที่จะช่วยให้คุณตัดสินใจว่าคุณต้องการใช้ฐานข้อมูล NoSQL ประเภทใด

นี่คือรายการของทรัพยากรที่เกี่ยวข้องกับ NoSQL ที่มีอยู่


4
คำตอบนี้มีประโยชน์อย่างไรในปัญหาการซิงค์ไฟล์
ตัส

@titus ใน NoSQL เมื่อมีการเขียนบนโหนดใดโหนดหนึ่งมันจะถูกจำลองแบบบนโหนดอื่น ๆ ในคลัสเตอร์ ระดับการเขียนที่สม่ำเสมอของ Cassandra อาจช่วยทำให้ชัดเจน
Azzy

วิธีที่จะไปคือเก็บไฟล์ทั้งหมดใน NoSQL db?
ตัส

@tios คุณสามารถทำได้ แต่ฐานข้อมูล NoSQL สามารถทำได้มากขึ้นจากนั้นจัดเก็บไฟล์ทั้งหมดขึ้นอยู่กับความต้องการของคุณ
Azzy

2
OP ขอวิธีแก้ไขปัญหาเฉพาะ " เว็บเซิร์ฟเวอร์ Linux หลายตัวที่เชื่อมต่อกับ load balancer ... แบ่งปันสินทรัพย์ (เช่นรูปภาพวิดีโอและอื่น ๆ ) ระหว่างเซิร์ฟเวอร์เหล่านี้ " คำตอบของคุณเป็นเรื่องทั่วไปคุณสามารถแนะนำและ อธิบายเครื่องมือที่เฉพาะเจาะจง (และควรกำหนดค่ามากกว่านั้น) เพื่อจัดการกับปัญหา?
kdbanman

0

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

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