แคช Nginx ใช้ร่วมกันระหว่างเซิร์ฟเวอร์หลายเครื่อง


9

เรามีเซิร์ฟเวอร์ REST-ish API 8 แห่งที่มี Nginx ใช้ FastCGI กับ PHP-FPM เพื่อจัดการคำขอ ขณะนี้เรากำลังใช้การแคช FastCGI ของ Nginx (คำสั่งเช่นfastcgi_cache_path) ซึ่งหมายความว่าการตอบสนองของ API ถูกแคช แต่มีแคชแยกต่างหากสำหรับแต่ละเซิร์ฟเวอร์

มีวิธีที่ดีในการแชร์ที่เก็บแคชระหว่างเซิร์ฟเวอร์ทั้งแปดหรือไม่

เราได้พิจารณาการใช้ Redis เป็นที่เก็บข้อมูลที่ใช้ร่วมกัน แต่โมดูลที่มีอยู่ดูเหมือนจะต้องการการเปลี่ยนแปลงแอปพลิเคชัน ในบางกรณีเราอาจต้องการแคชการตอบสนองภายนอกการควบคุมของเรา (ผ่าน HTTP ไปยัง API ภายนอก) โดยปกติแล้วการแทนที่แบบฝังสำหรับการแคช Nginx ในตัวของการตอบกลับ FastCGI และ HTTP จะพร้อมใช้งาน


ทำไมคุณไม่ทำให้แคชไม่ได้อยู่ในส่วนหน้า (Nginx) แต่ในส่วนหลัง (โปรแกรม PHP)?
Max Kochubey

@ hangover ฉันไม่เห็นเหตุผลใด ๆ ที่จะคิดค้นวงล้ออีกครั้ง แคช Nginx ทำงานได้ดีและรวดเร็ว หากเราสามารถหลีกเลี่ยงค่าใช้จ่ายในการดำเนินการตามคำขอผ่านแอพพลิเคชั่นเราสามารถทำให้สิ่งต่าง ๆ เป็นไปอย่างรวดเร็ว Nginx ตอบกลับคำขอที่แคชสำหรับเราภายในเวลาไม่เกิน 5 มิลลิวินาที การเปิดตัวแอปพลิเคชัน PHP ของเราแม้ว่าจะให้การตอบสนองที่แคชไว้อาจจะช้ากว่านั้น 10 เท่า การแคช Nginx ทำงานได้ดีสำหรับเราตอนนี้เราแค่ต้องกระจายแคชนั้นในเซิร์ฟเวอร์หลาย ๆ เครื่อง
แบรด

1
ตกลงคุณสามารถลองใช้โมดูลNginx SRCacheของบุคคลที่สามเพื่อจัดเก็บเนื้อหาที่แคชไว้ใน Memcached โดยเฉพาะRed Red
Max Kochubey

1
@Brad นี่เป็นแฮ็คดังนั้นฉันจะไม่ตอบเป็นคำตอบ: ขณะนี้เรามีสคริปต์ที่รันทุกคืนที่ใช้ rsync ระหว่างไดเรกทอรีแคช nginx บนเซิร์ฟเวอร์ของเราเพื่อให้ทันสมัยกับไฟล์แคชล่าสุดจากผู้อื่นทั้งหมด สคริปต์จบลงด้วยการเริ่ม nginx ที่สง่างามและการตรวจสอบความสำเร็จ อย่างที่ฉันบอกว่ามันแฮ็ก แต่มันใช้ได้กับเราในระบบที่มีปริมาณงานสูง
mVChr

@mVChr ที่น่าสนใจ คุณได้ลองใช้ rsync หรือคล้ายกันอย่างต่อเนื่อง? ในท้ายที่สุดสำหรับการใช้งานของฉันในที่สุดฉันก็ได้รับ Redis ทำงาน แต่นี่ไม่อนุญาตให้มีแคชที่มีขนาดใหญ่มากเนื่องจากคอลเลกชัน Redis ทั้งหมดจะต้องอยู่ในหน่วยความจำ 16GB เพิ่มขึ้นอย่างรวดเร็วในแอปพลิเคชันของฉัน
แบรด

คำตอบ:


1

ดูเหมือนว่าจะมีการโพสต์บล็อกค่อนข้างใหม่ที่https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ เกี่ยวกับปัญหานี้ ตัวอย่างแรกนี้อาจเป็นประโยชน์ได้หากคุณเรียกใช้แคชเซิร์ฟเวอร์ nginx มากกว่าสองเครื่อง

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

มันควรทำงานกับโอเพ่นซอร์สเวอร์ชันของ NGINX ด้วย โดยทั่วไปจะทำงานโดย proxying คำขอเรียงซ้อนผ่านเซิร์ฟเวอร์ NGINX แต่ละเซิร์ฟเวอร์ (Nginx-Cache1-> NGinx-Cache2-> Origin-Server) เซิร์ฟเวอร์แต่ละตัวเริ่มต้นจากแคชที่เกี่ยวข้องและถ้าต้องการก็สามารถสร้าง HA Cluster ได้เช่นกัน https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

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