Cache PHP (opcode) mana yang harus digunakan dan mengapa?

44

Saya terus mendengar tentang beberapa cache PHP (opcode) seperti - APC, XCache, Memcache, eAccelerator, dll.

Tetapi saya tidak pernah tahu bagaimana cara memilih satu. Terlepas dari manfaat kinerja, yang seharusnya diberikan oleh sistem caching, faktor lain mana yang harus menjadi perhatian.

Seperti mengapa Anda akan mengatakan sistem X cache lebih baik daripada Y? Saya kurang khawatir tentang perolehan kinerja relatif. Perbedaan kecil antara dua sistem tidak begitu penting.

Jika jawaban umum untuk pertanyaan saya tidak memungkinkan, berikut adalah beberapa petunjuk. Saya menggunakan VPS khusus dengan Mediatemple (dengan akses root). RAM adalah 512 MB (fisik) + 400MB (swap) Saya prihatin dengan WordPress dan sepupunya WordPress-MU dan BuddyPress. 90% dari kode / situs kami termasuk dalam keluarga WordPress.

Terima kasih sebelumnya atas bantuannya.

rahul286
sumber

Jawaban:

33

Produk yang Anda daftarkan memiliki tujuan berbeda.

Tembolok OPCode

Ada banyak Akselerator PHP (OPCaches) seperti yang terlihat pada daftar Wikipedia ini . Seperti yang umum terjadi pada produk-produk open source, semuanya hampir serupa. XCache adalah akselerator PHP lighttp, dan merupakan pilihan default saat Anda menjalankan HTTPd itu. Ini berfungsi baik dengan Apache juga, namun APC tampaknya sedikit lebih "bermain baik dengan orang lain" secara sosial, didukung secara resmi sebagai bagian dari PHP, dan dirilis sejalan dengan distribusi PHP resmi.

Saya meninggalkan eAccelerator kami karena perkembangannya yang lambat, dan tertinggal dengan rilis PHP, dan status resmi yang diberkati APC dengan kinerja yang sama.

Produk-produk ini biasanya drop in; tidak ada kode yang mengubah peningkatan kinerja instan. Dengan basis kode besar (Drupal, Wordpress) kinerjanya bisa hingga 3x lebih baik sambil menurunkan waktu respons dan penggunaan memori.

Caching Data

Memcache adalah produk yang sedikit berbeda - Anda mungkin menganggapnya sebagai sistem nilai kunci ringan yang dapat ditingkatkan ke beberapa server . Perangkat lunak harus ditingkatkan untuk mendukung Memcache, dan itu memecahkan masalah tertentu lebih baik daripada yang lain. Jika Anda memiliki daftar nilai stok realtime di situs web Anda, Anda dapat menggunakan Memcache untuk menyimpan daftar penduduk dari nilai saat ini yang ditampilkan di seluruh situs web Anda. Anda mungkin menggunakannya untuk menyimpan data sesi untuk penggunaan kembali jangka pendek. Anda tidak akan menggunakannya untuk hal-hal lain seperti cache satu halaman penuh, atau sebagai pengganti MySQL.

Ada juga tambahan Wordpress seperti WP-Super-Cache yang dapat secara drastis meningkatkan kinerja Wordpress (infact, WP-Super-Cache dapat menyaingi situs berbasis HTML statis dalam banyak kasus)

Singkatnya - saya akan sangat merekomendasikan APC jika Anda ingin "mengatur dan melupakannya, produk yang didukung dengan baik".

SirStan
sumber
Jawaban ini sedang dibahas di Meta: meta.stackexchange.com/questions/15474/…
Brad Gilbert
Isi " [4]: http://" untuk memperbaikinya.
Brad Gilbert
Terima kasih banyak, SirStan! Jawaban Anda tidak hanya memecahkan masalah saya tetapi juga membantu saya mendapatkan lebih banyak wawasan tentang dunia caching. Saya hanya ingin bertanya satu hal lagi. Saya sudah menggunakan wp-supercache. Apakah ide yang baik untuk menggabungkannya dengan APC? Akankah APC semakin meningkatkan kinerja secara signifikan? Apakah APC dan Wp-SuperCache akan bekerja bersama? Apakah saya membutuhkan keduanya? Atau APC akan membuat Wp-SuperCache berlebihan?
rahul286
Catatan: APC melakukan caching data & caching kode-op.
lo_fye
2
Jawaban ini sekarang sangat usang. APC sepertinya tidak akan diperbarui untuk versi PHP mendatang yang telah digantikan oleh optimizer dan opcode cache Zend (sekarang dikenal sebagai opcache) sejak v. 5.5. Namun saya belum melihat perbedaan substansial dalam kinerja ( symcbean.blogspot.co.uk/2013/09/... ) lebih lanjut kurangnya dukungan data dalam opcache dan kurangnya memory reclaims dapat membuat upgrade counter produktif bagi sebagian orang.
symcbean
6

APC akan dibangun ke dalam PHP6, jadi ini adalah pilihan yang logis. Saya menggunakannya, dan peningkatan kinerja luar biasa. Jika Anda perlu men-cache sesuatu selain opcodes (yaitu hasil query db), Anda juga dapat menggunakan APC, tetapi tidak mungkin untuk membagikan cache APC antara beberapa server. Jika Anda hanya perlu melakukan cache pada satu server, APC sangat bagus. Jika Anda perlu meningkatkan ke beberapa server, dan ingin berbagi cache di antara mereka, memcached adalah man Anda.

Namun, satu hal yang akan saya lakukan adalah membuat kelas pembungkus untuk setiap caching (non-opcode) yang Anda lakukan. Dengan begitu Anda bisa menukar mesin caching tanpa mengubah kode Anda.

lo_fye
sumber
WOW. Seandainya saya mengetahui status resmi APC, saya akan beralih kembali untuk jangka panjang ... :-) Saya juga tidak tahu banyak tentang perbedaan cache opcode / non-opcode. Sebagai pilihan pribadi, saya tidak ingin melalui overhead membuat kelas pembungkus atau memodifikasi sumber aplikasi saya untuk membantu mereka beradaptasi dengan caching env.
rahul286
6
Perhatikan bahwa, karena PHP 5.5 mengintegrasikan Zend Opcache sebagai cache opcode "resmi", saya pikir itu tidak mungkin mereka akan beralih ke APC untuk PHP 6.
Matteo Tassinari
1
Untuk memperbaikinya: PHP 5.5 memang disertakan bersama Zend Opcache. Tidak akan ada PHP 6. Sebagai gantinya akan ada PHP 7. APC dianggap hampir (?) Usang.
Jisse Reitsma
6

Hanya untuk mencatat bahwa beberapa hal telah berubah sedikit dan tampaknya APC tidak akan dimasukkan dalam PHP 6 core.

APC memiliki perkembangan yang lambat dan sepertinya tidak akan pernah kompatibel dengan PHP 5.5. Karena itu, sepertinya orang-orang dari PHP akan mengatur ekstensi cache opcode Zend OPCache sebagai ekstensi PHP CORE. Anda peduli baca lebih lanjut di sini http://wiki.php.net/rfc/optimizerplus .

Catatan penting: Zend OPCache tidak memiliki cache data pengguna seperti APC, jadi jika Anda membutuhkan cache data pengguna, Anda dapat menggunakannya bersama dengan Memcache.

Nemke
sumber
1
Itu juga membatalkan seluruh cache ketika penuh (entri yang tidak valid TIDAK dihapus) - maka jika Anda memiliki kode lebih dari memori atau sering digunakan, maka berharap untuk melihat lonjakan kinerja.
symcbean
3

Jika menjalankan versi PHP setidaknya 5,50, OpCache adalah taruhan terbaik Anda (PHP / PECL native library). Itu harus datang pra-dikompilasi jika menginstal dari biner.

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

Jika menjalankan versi PHP sebelum 5.5, APC (PHP / PECL cache OpCode asli) akan menjadi pilihan paling sederhana, meskipun dianggap tidak terawat dan mati:

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

Menggunakan fungsionalitas OpCache asli PHP akan menyelamatkan Anda dari kesulitan mempertahankan perpustakaan pihak ke-3.

berulang
sumber
1
Jika menjalankan PHP <5.5, hal pertama yang harus Anda lakukan adalah memperbaruinya.
Michael Hampton
@ michael-hampton :: Memang! Tetapi dalam beberapa kasus yang jarang terjadi, Anda tidak dapat memperbarui PHP tanpa memutakhirkan OS, yang bahkan dapat berarti persyaratan perangkat keras baru. Contoh - Saya bekerja untuk perusahaan yang menjalankan server IBM i-series, versi 6somethings. Versi PHP kami adalah 5.4.3. Karena IBM mengandalkan Zend untuk porting versi PHP lebih, PHP 5.6 memerlukan versi lebih baru dari IBM-i OS - 7.1 atau lebih baru (dan selanjutnya versi yang lebih baru dari server PHP Zend), yang membutuhkan server Power-8 baru dan seterusnya ... meh.
kambuh
0

Pasangan cache kunci / nilai cache, bukan opcode. Anda dapat menggunakannya bersamaan dengan salah satu dari cache opcode.

pengguna10699
sumber
Tampaknya dari jawaban SirStan (di bawah) bahwa memcache mungkin perlu saya untuk memodifikasi aplikasi PHP saya. Sebenarnya saya menggunakan Wordpress dan memodifikasi kode intinya bukan ide yang baik.
rahul286