nginx และ memcached ทำงานร่วมกันได้ดีแค่ไหน?


14

เรามีเว็บแอปพลิเคชันที่ใช้ Java EE ทำงานบนคลัสเตอร์เซิร์ฟเวอร์แอปGlassfish ทราฟฟิกขาเข้าส่วนใหญ่จะเป็นคำขอที่เงียบสงบสำหรับการเป็นตัวแทนที่ใช้ XML ของทรัพยากรแอปพลิเคชันของเรา แต่บางที 5% ของการรับส่งข้อมูลอาจจะใช้สำหรับการเป็นตัวแทน JSON- หรือ XHTML / CSS

ขณะนี้เรากำลังตรวจสอบโซลูชันการโหลดบาลานซ์เพื่อกระจายทราฟฟิกขาเข้าข้ามอินสแตนซ์ Glassfish ในคลัสเตอร์ นอกจากนี้เรายังดูวิธีการถ่ายโอนคลัสเตอร์โดยใช้ memcached ซึ่งเป็นแผนที่แฮชกระจายในหน่วยความจำซึ่งกุญแจจะเป็นชื่อทรัพยากร REST (เช่น "/ user / bob", "/ group / jazzlovers") และค่าที่เป็น การเป็นตัวแทน XML ที่สอดคล้องกัน

วิธีการหนึ่งที่ให้สัญญาว่าจะฆ่านกทั้งสองด้วยหินก้อนเดียวและใช้เซิร์ฟเวอร์nginx HTTP น้ำหนักเบาและพร็อกซีย้อนกลับอย่างรวดเร็ว Nginx จะจัดการคำขอที่เข้ามาแต่ละรายการโดยค้นหา URI เป็นครั้งแรกใน memcached เพื่อดูว่ามีการแสดง XML ที่ยังไม่หมดอายุที่นั่นหรือไม่ ถ้าไม่ได้ nginx ส่งการร้องขอไปยังหนึ่งในอินสแตนซ์ Glassfish โมดูล nginx memcached อธิบายไว้ในการเขียนสั้น ๆนี้

ความประทับใจโดยรวมของคุณกับ nginx และ memcached ใช้วิธีนี้คุณมีความสุขมากแค่ไหน? แหล่งข้อมูลใดที่คุณคิดว่ามีประโยชน์ที่สุดสำหรับการเรียนรู้เกี่ยวกับพวกเขา หากคุณลองพวกเขาและพวกเขาไม่ตรงกับวัตถุประสงค์ของคุณทำไมไม่และคุณใช้อะไรแทน

หมายเหตุ: นี่เป็นคำถามที่เกี่ยวข้อง ก่อนที่ผมจะรู้เกี่ยวกับ ServerFault ผมถามเกี่ยวกับเรื่องนี้StackOverflow

แก้ไข: คำตอบทั้งหมดที่นี่จนถึงมีประโยชน์มากแม้ว่าจะไม่มีประสบการณ์โดยตรง ในที่สุดคำตอบนี้ก็ปรากฏขึ้นใน StackOverflow และมันค่อนข้างรั้นในการตั้งค่า nginx / memcached


เจ๋งจะทำ เราอาจจะทำการทดลองกับมันในเดือนหน้าหรืออย่างอื่น
Jim Ferrans

คำตอบ:


6

คุณควรใช้แคชเซิร์ฟเวอร์ต่อหน้าเว็บเซิร์ฟเวอร์ของคุณ ฉันแนะนำ Varnish-cache เราใช้มันในที่ทำงานกับเว็บไซต์ที่ใหญ่ที่สุดและวุ่นวายที่สุดในสแกนดิเนเวีย เราแทนที่กล่อง Squid ที่โหลดสูง 13 กล่องด้วยกล่องวานิช 1 กล่องและกล่องสำรอง 1 อัน

ฉันเปรียบเทียบแอพง่าย ๆ บนเว็บไซต์ส่วนตัวของฉันและมันเปลี่ยนจาก 9 คำขอเป็นวินาทีถึงมากกว่า 2000

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


1
แต่แคช Nginx อย่างชัดเจนเร็วกว่าวานิช
VBart

4

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

ฉันขอแนะนำให้ให้แอปทำการค้นหาและแสดงเนื้อหาที่แคชไว้และปล่อยให้ตัวโหลดบาลานซ์ทำงานได้ ต้องบอกว่า nginx ไม่สมบูรณ์แบบเมื่อพูดถึงการทำ load balancing - มันให้ขั้นตอนวิธี round-robin ขั้นพื้นฐานเท่านั้น ฉันแนะนำ haproxy แทน หากคุณต้องการบริการถอดรหัส SSL หน้า nginx ทำงานได้ดีต่อหน้า haproxy ในประสบการณ์ของฉัน


1

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

นอกจากนี้ให้พิจารณาสถานการณ์เช่นนี้: เมื่อผู้ใช้มีการตรวจสอบหน้าเว็บที่มีลักษณะแตกต่างกันพร้อมคุณสมบัติเพิ่มเติมที่มีอยู่และทำให้เป็นรายบุคคลสำหรับผู้ใช้แต่ละคน URL เหมือนกันสำหรับความมั่นใจในการเชื่อมโยงและอื่น ๆ ตัวอย่างเช่นไซต์ที่ผู้ใช้ที่ถูกตรวจสอบไม่จำเป็นต้องป้อนชื่อ / captcha ของเขาสำหรับความคิดเห็นหรือเว็บไซต์แสดงชื่อผู้ใช้ของคุณด้านบนเมื่อคุณเข้าสู่ระบบ (เช่นเซิร์ฟเวอร์ผิด) ในกรณีเช่นนี้ nginx จะไม่สามารถใช้งานได้เนื่องจากคุณไม่สามารถแยกแยะผู้ใช้ที่ได้รับการรับรองความถูกต้องจาก unauthed

หากคุณไม่ต้องการ SSL ฉันขอแนะนำให้คุณใช้น้ำยาวานิช มันได้รับการออกแบบเป็น HTTP Accelerator ไม่ใช่เว็บเซิร์ฟเวอร์หรือพร็อกซี หากคุณต้องการ SSL ให้เรียกใช้ nginx อยู่ด้านบนเป็นตัวเร่ง SSL และเคลือบเงาเป็นตัวเร่ง HTTP ธรรมดาเนื่องจาก Varnish ไม่สามารถจัดการกับ SSL ได้

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


1

ตัวเลือกของฉันคือ haproxy พร็อกซีย้อนกลับที่เล็กและเร็วมาก แต่ไม่ใช่แคชพร็อกซี! ฉันใช้สำหรับระบบแคชของฉัน "Squid Web Proxy"

CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
                                          -> WEB II /lighttpd/
                                          -> WEB III /lighttpd/

งานนี้สมบูรณ์แบบสำหรับระบบเว็บของฉัน

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