ควรใช้แคช PHP (opcode) ใดและเพราะเหตุใด


44

ฉันคอยฟังเกี่ยวกับแคช PHP (opcode) เช่น - APC, XCache, Memcache, eAccelerator เป็นต้น

แต่ฉันไม่สามารถหาวิธีที่จะเลือกได้ นอกเหนือจากประสิทธิภาพในการทำงานซึ่งระบบแคชควรส่งมอบซึ่งปัจจัยอื่น ๆ ควรเป็นประเด็นที่น่ากังวล

ทำไมคุณจะบอกว่าระบบแคช X ดีกว่า Y ฉันกังวลน้อยเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานที่เกี่ยวข้อง ความแตกต่างเล็กน้อยระหว่างระบบสองระบบมีความสำคัญน้อยกว่า

หากคำตอบทั่วไปของคำถามของฉันเป็นไปไม่ได้นี่คือคำแนะนำเล็กน้อย ฉันใช้ VPS เฉพาะกับ Mediatemple (ด้วยการเข้าถึงรูท) RAM คือ 512 MB (ทางกายภาพ) + 400MB (สลับ) ฉันกังวลเกี่ยวกับ WordPress และลูกพี่ลูกน้องของ WordPress-MU และ BuddyPress 90% ของรหัส / ไซต์ของเราตกอยู่ในตระกูล WordPress

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ

คำตอบ:


33

รายการสินค้าที่คุณให้บริการมีวัตถุประสงค์ที่แตกต่างกัน

แคช OPCode

มี PHP Accelerator (OPCaches) มากมายที่เห็นในรายการ Wikipediaนี้ เป็นเรื่องปกติกับผลิตภัณฑ์โอเพนซอร์สพวกเขาทั้งหมดค่อนข้างคล้ายกัน XCache เป็นตัวเร่ง PHP lighttp และเป็นตัวเลือกเริ่มต้นเมื่อคุณใช้ HTTPd นั้น มันทำงานได้ดีกับ Apache เช่นกัน แต่ APC ดูเหมือนจะ "เล่นได้ดีกับคนอื่น ๆ " พูดทางสังคมได้รับการสนับสนุนอย่างเป็นทางการในฐานะส่วนหนึ่งของ PHP และเผยแพร่อย่างเป็นทางการพร้อมการกระจาย PHP อย่างเป็นทางการ

ฉันละทิ้ง eAccelerator usign เนื่องจากการพัฒนาที่ช้าและล้าหลังต่อการเปิดตัวของ PHP และสถานะที่เป็นทางการของ APC ที่นำเสนอด้วยประสิทธิภาพที่คล้ายกัน

โดยปกติแล้วผลิตภัณฑ์เหล่านี้จะดรอป ไม่มีการเปลี่ยนรหัสเพิ่มประสิทธิภาพทันที ด้วยฐานรหัสขนาดใหญ่ (Drupal, Wordpress) ประสิทธิภาพจะดีขึ้นถึง3 เท่าในขณะที่ลดเวลาตอบสนองและการใช้หน่วยความจำ

การแคชข้อมูล

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

นอกจากนี้ยังมี Wordpress addons เช่นWP-Super-Cacheที่สามารถปรับปรุงประสิทธิภาพของ Wordpress ได้อย่างมาก (infact, WP-Super-Cache สามารถเทียบเคียงกับเว็บไซต์ที่ใช้ HTML ในหลาย ๆ กรณี)

โดยสรุป - ฉันอยากจะแนะนำ APC ถ้าคุณต้องการ "ตั้งค่าและลืมมันผลิตภัณฑ์ที่ได้รับการสนับสนุนเป็นอย่างดี"


คำตอบนี้จะถูกกล่าวถึงใน Meta: meta.stackexchange.com/questions/15474/...
แบรดกิลเบิร์

กรอก " [4]: http://" เพื่อแก้ไข
Brad Gilbert

ขอบคุณตัน SirStan! คำตอบของคุณไม่เพียง แต่แก้ไขปัญหาของฉัน แต่ยังช่วยให้ฉันได้รับข้อมูลเชิงลึกมากขึ้นเกี่ยวกับแคชโลก ฉันแค่อยากถามคุณอีกครั้ง ฉันใช้ wp-supercache อยู่แล้ว เป็นความคิดที่ดีหรือไม่ที่จะรวมเข้ากับ APC APC จะปรับปรุงประสิทธิภาพให้ดีขึ้นอย่างมีนัยสำคัญหรือไม่ APC และ Wp-SuperCache จะทำงานร่วมกันได้หรือไม่ ฉันต้องการมันทั้งคู่ไหม? หรือ APC จะทำให้ Wp-SuperCache ซ้ำซ้อน?
rahul286

หมายเหตุ: APC ทำทั้งแคชข้อมูลและแคชรหัส op-code
lo_fye

2
คำตอบนี้เก่ามาก APC ไม่น่าจะได้รับการอัปเดตสำหรับเวอร์ชันในอนาคตของ PHP ซึ่งถูกแทนที่ด้วยเครื่องมือเพิ่มประสิทธิภาพและแคช opcode ของ Zend (ปัจจุบันรู้จักกันในนาม opcache) ตั้งแต่เวอร์ชัน 5.5 อย่างไรก็ตามฉันไม่เห็นความแตกต่างอย่างมีนัยสำคัญในประสิทธิภาพ ( symcbean.blogspot.co.uk/2013/09/… ) การขาดการสนับสนุนข้อมูลใน opcache และการขาดหน่วยความจำที่เรียกคืนอาจทำให้การปรับปรุงการนับผลสำหรับบางคน
symcbean

8

คำตอบที่ดีถูกโพสต์ใน stackoverflow ซึ่งตอบคำถามของคุณได้ดี

https://stackoverflow.com/questions/28716/which-php-opcode-cacher-should-i-use-to-improve-performance


มันเป็นการสนทนาที่ดีจริงๆที่เกิดขึ้นกับ stackoverflow ขอบคุณสำหรับลิงค์ :-)
rahul286

6

APCจะถูกสร้างขึ้นใน PHP6 ดังนั้นจึงเป็นตัวเลือกที่สมเหตุสมผล ฉันใช้มันและการเพิ่มประสิทธิภาพนั้นน่าทึ่งมาก หากคุณต้องการแคชอย่างอื่นนอกเหนือจาก opcodes (เช่นผลลัพธ์การสืบค้น db) คุณสามารถใช้ APC สำหรับสิ่งนั้นได้เช่นกัน แต่ไม่สามารถแชร์แคช APC ระหว่างเซิร์ฟเวอร์หลายเครื่องได้ หากคุณต้องการแคชบนเซิร์ฟเวอร์เดียว APC นั้นยอดเยี่ยม หากคุณต้องการขยายไปยังเซิร์ฟเวอร์หลายเครื่องและต้องการแชร์แคชระหว่างกันmemcachedคือคนของคุณ

แต่สิ่งหนึ่งที่ฉันจะทำคือสร้างคลาส wrapper สำหรับแคช (ไม่ใช่ opcode) ที่คุณทำ ด้วยวิธีนี้คุณสามารถสลับเอ็นจิ้นแคชได้โดยไม่ต้องเปลี่ยนรหัสของคุณ


ว้าว. ถ้าฉันรู้สถานะอย่างเป็นทางการของ APC ฉันจะเปลี่ยนกลับมาเป็นระยะยาว ... :-) ฉันยังไม่รู้มากเกี่ยวกับ opcode / non-opcode cache แตกต่างกัน เป็นทางเลือกส่วนตัวฉันไม่ต้องการผ่านค่าใช้จ่ายในการสร้างคลาส wrapper หรือแก้ไขแหล่งที่มาของแอพของฉันเพื่อช่วยให้พวกเขาปรับตัวเข้ากับการแคช env
rahul286

6
โปรดทราบว่าเนื่องจาก PHP 5.5 รวม Zend Opcache เป็นแคช opcode "เป็นทางการ" ฉันคิดว่ามันไม่น่าเป็นไปได้ที่พวกเขาจะเปลี่ยนเป็น APC สำหรับ PHP 6
Matteo Tassinari

1
เพื่อแก้ไขสิ่งนี้: PHP 5.5 มาพร้อมกับ Zend Opcache จะไม่มี PHP 6 จะมี PHP 7 แทน APC จะถูกพิจารณาว่าล้าสมัยเกือบ (?)
Jisse Reitsma

6

เพิ่งทราบว่าสิ่งต่าง ๆ มีการเปลี่ยนแปลงเล็กน้อยและดูเหมือนว่า APC จะไม่รวมอยู่ใน PHP 6 core

APC มีการพัฒนาที่ช้าและดูเหมือนว่าจะไม่เข้ากันได้กับ PHP 5.5 ด้วยเหตุนี้ดูเหมือนว่าผู้ชายจาก PHP จะตั้งค่าส่วนขยายแคช opcode ของ Zend OPCache เป็นส่วนขยาย PHP CORE คุณสนใจอ่านเพิ่มเติมที่นี่http://wiki.php.net/rfc/optimizerplus

หมายเหตุสำคัญ: Zend OPCache ไม่มีแคชข้อมูลผู้ใช้เช่น APC ดังนั้นหากคุณต้องการแคชข้อมูลผู้ใช้คุณสามารถใช้ร่วมกับ Memcache ได้


1
นอกจากนี้ยังทำให้แคชทั้งหมดไม่สมบูรณ์เมื่อได้รับเต็ม (รายการที่ไม่ถูกต้องจะไม่ถูกลบ) - ดังนั้นหากคุณมีรหัสมากกว่าหน่วยความจำหรือปรับใช้บ่อยๆคาดว่าจะเห็นประสิทธิภาพเพิ่มขึ้น
symcbean

3

หากใช้งานเวอร์ชัน PHP อย่างน้อย 5.50 OpCache เป็นทางออกที่ดีที่สุดของคุณ (ไลบรารีดั้งเดิมของ PHP / PECL) ควรรวบรวมไว้ล่วงหน้าหากติดตั้งจากไบนารี

http://php.net/manual/en/book.opcache.php

หากใช้รุ่น PHP ก่อนหน้า 5.5, APC (แคช OpCode ดั้งเดิมของ PHP / PECL) จะเป็นตัวเลือกที่ง่ายที่สุด

http://php.net/manual/en/book.apc.php

การใช้ฟังก์ชัน OpCache ดั้งเดิมของ PHP จะช่วยให้คุณประหยัดปัญหาในการบำรุงรักษาห้องสมุดของบุคคลที่สาม


1
หากใช้ PHP <5.5 สิ่งแรกที่คุณควรทำคืออัพเดตมัน
Michael Hampton

@ michael-hampton :: แน่นอน! แต่ในบางกรณีที่หายากคุณไม่สามารถอัปเดต PHP โดยไม่ต้องอัปเกรดระบบปฏิบัติการซึ่งอาจหมายถึงข้อกำหนดฮาร์ดแวร์ใหม่ ตัวอย่าง - ฉันทำงานให้กับ บริษัท ที่ใช้เซิร์ฟเวอร์ IBM i-series เวอร์ชัน 6somethings PHP เวอร์ชันของเราคือ 5.4.3 เนื่องจาก IBM พึ่งพา Zend สำหรับการย้ายเวอร์ชั่น PHP มากกว่า PHP 5.6 จึงต้องการ IBM-i OS เวอร์ชัน 7.1 หรือใหม่กว่า (และรุ่นใหม่กว่าของเซิร์ฟเวอร์ Zend PHP รุ่นใหม่กว่า) ซึ่งต้องการเซิร์ฟเวอร์ Power-8 ใหม่และอื่น ๆ ... meh
recurse

0

Memcache แคชคู่ของคีย์ / ค่าไม่ใช่ opcodes คุณสามารถใช้ร่วมกับหนึ่งในแคช opcode


ดูเหมือนว่าจากคำตอบของ SirStan (ด้านล่าง) memcache อาจต้องให้ฉันแก้ไขแอพ PHP ของฉัน จริงๆแล้วฉันใช้ Wordpress และการแก้ไขโค้ดหลักของมันจะไม่ใช่ความคิดที่ดี
rahul286
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.