Której pamięci podręcznej PHP (opcode) należy użyć i dlaczego?


44

Ciągle słyszę o niektórych buforach PHP (opcode), takich jak - APC, XCache, Memcache, eAccelerator itp.

Ale nigdy nie mogłem wymyślić, jak wybrać jeden. Oprócz korzyści w zakresie wydajności, które ma zapewnić system buforowania, które inne czynniki powinny budzić obawy.

Na przykład dlaczego powiesz, że system pamięci podręcznej X jest lepszy od Y? Mniej martwię się względnym wzrostem wydajności. Małe różnice między dowolnymi dwoma systemami mają mniejsze znaczenie.

Jeśli ogólna odpowiedź na moje pytanie nie jest możliwa, oto kilka wskazówek. Używam dedykowanego VPS z Mediatemple (z dostępem do roota). Pamięć RAM to 512 MB (fizyczna) + 400 MB (zamiana) Niepokoi mnie WordPress i jego kuzyni WordPress-MU i BuddyPress. 90% naszych kodów / witryn należy do rodziny WordPress.

Z góry dziękuję za pomoc.

Odpowiedzi:


33

Wymienione produkty służą różnym celom.

Pamięci podręczne OPCode

Istnieje wiele akceleratorów PHP (OPCache) widocznych na tej liście w Wikipedii . Podobnie jak w przypadku produktów open source, wszystkie są dość podobne. XCache jest akceleratorem PHP lighttp i jest domyślnym wyborem podczas uruchamiania tego HTTPd. Działa również dobrze z Apache, jednak APC wydaje się nieco bardziej „dobrze współpracować z innymi” społecznie, oficjalnie wspierany jako część PHP, i jest wydawany wraz z oficjalną dystrybucją PHP.

Porzuciłem usign eAccelerator z powodu jego spowolnienia rozwoju i opóźnień w stosunku do wydań PHP, a oficjalny status błogosławionego APC oferuje z podobną wydajnością.

Te produkty są zazwyczaj dostarczane; bez zmiany kodu natychmiastowe zwiększenie wydajności. Dzięki dużym bazom kodów (Drupal, Wordpress) wydajność może być nawet trzykrotnie lepsza, przy jednoczesnym skróceniu czasu odpowiedzi i zużycia pamięci.

Buforowanie danych

Memcache to nieco inny produkt - możesz myśleć o nim jako o lekkim systemie kluczowej wartości, który można skalować do wielu serwerów . Oprogramowanie musi zostać ulepszone, aby obsługiwać Memcache, i rozwiązuje niektóre problemy lepiej niż inne. Jeśli posiadasz listę wartości akcji w czasie rzeczywistym na swojej stronie internetowej, możesz użyć Memcache do przechowywania listy rezydentów bieżącej wartości wyświetlanej w całej witrynie. Możesz go użyć do przechowywania danych sesji do ponownego użycia w krótkim okresie. Nie używałbyś go do innych celów, takich jak pamięć podręczna na całej stronie lub jako zamiennik MySQL.

Istnieją również dodatki Wordpress, takie jak WP-Super-Cache, które mogą radykalnie poprawić wydajność Wordpress (w rzeczywistości, WP-Super-Cache może konkurować ze statycznymi stronami opartymi na HTML w wielu przypadkach)

Podsumowując - gorąco polecam APC, jeśli chcesz „ustawić i zapomnieć, dobrze obsługiwany produkt”.


Ta odpowiedź jest dyskutowana na Meta: meta.stackexchange.com/questions/15474/…
Brad Gilbert,

Wpisz „ [4]: http://”, aby to naprawić.
Brad Gilbert,

Wielkie dzięki SirStan! Twoja odpowiedź nie tylko rozwiązała mój problem, ale także pomogła mi uzyskać lepszy wgląd w świat pamięci podręcznej. Chcę cię tylko zapytać. Już używam wp-supercache. Czy warto połączyć go z APC? Czy APC znacznie poprawi wydajność? Czy APC i Wp-SuperCache będą działać razem? Czy potrzebuję ich obu? Czy APC sprawi, że Wp-SuperCache stanie się zbędny?
rahul286,

Uwaga: APC wykonuje zarówno buforowanie danych, jak i buforowanie kodu operacyjnego.
lo_fye

2
Ta odpowiedź jest teraz bardzo przestarzała. APC raczej nie będzie aktualizowana dla przyszłych wersji PHP, które zostały zastąpione przez optymalizator Zend i pamięć podręczną opcode (znaną teraz jako opcache) od wersji 5.5. Jednak nie widziałem znaczącej różnicy w wydajności ( symcbean.blogspot.co.uk/2013/09/... ). Ponadto brak obsługi danych w opcache i brak odzyskiwania pamięci może sprawić, że uaktualnienie przyniesie efekt przeciwny do zamierzonego.
symcbean


6

APC zostanie wbudowany w PHP6, więc jest to logiczny wybór. Używam go, a wzrost wydajności jest niesamowity. Jeśli potrzebujesz buforować coś innego niż opcodes (np. Wyniki zapytania db), możesz do tego również użyć APC, ale nie można współużytkować pamięci podręcznej APC między wieloma serwerami. Jeśli potrzebujesz buforować tylko na jednym serwerze, APC jest świetny. Jeśli chcesz skalować się na wiele serwerów i chcesz udostępnić pamięć podręczną między nimi, Memcached to twój człowiek.

Jedną rzeczą, którą bym zrobił, to stworzyć klasę opakowania dla każdego buforowania (bez kodu operacyjnego). W ten sposób możesz wymienić silnik buforowania bez zmiany kodu.


ŁAŁ. Gdybym znał oficjalny status APC, wróciłbym do niego długoterminowo z powrotem ... :-) Nie wiedziałem też wiele o różnicy pamięci podręcznej opcode / non-opcode. Jako osobisty wybór nie chcę zajmować się tworzeniem klas opakowań ani modyfikowaniem źródła moich aplikacji, aby pomóc im dostosować się do buforowania środowiska env.
rahul286

6
Zauważ, że skoro PHP 5.5 zintegrował Zend Opcache jako „oficjalną” pamięć podręczną opcode, myślę, że jest mało prawdopodobne, że przestawią się na APC dla PHP 6.
Matteo Tassinari

1
Aby to naprawić: PHP 5.5 rzeczywiście jest dostarczane z Zend Opcache. Nie będzie PHP 6. Zamiast tego będzie PHP 7. APC należy uznać za prawie (?) Przestarzałe.
Jisse Reitsma

6

Należy tylko zauważyć, że sytuacja nieco się zmieniła i wydaje się, że APC nie będzie uwzględniony w rdzeniu PHP 6.

APC rozwija się powoli i wygląda na to, że nigdy nie będzie kompatybilny z PHP 5.5. Z tego powodu wygląda na to, że faceci z PHP będą ustawiać rozszerzenie pamięci podręcznej opcode Zend OPCache jako rozszerzenie PHP CORE. Więcej informacji znajdziesz tutaj http://wiki.php.net/rfc/optimizerplus .

Ważna uwaga: Zend OPCache nie ma pamięci podręcznej danych użytkownika, takiej jak APC, więc jeśli potrzebujesz pamięci podręcznej danych użytkownika, możesz użyć jej razem z Memcache.


1
Unieważnia również całą pamięć podręczną, gdy się zapełni (nieprawidłowe wpisy NIE są usuwane) - dlatego jeśli masz więcej kodu niż pamięci lub często wdrażasz, spodziewaj się wzrostu wydajności.
symcbean,

3

Jeśli korzystasz z wersji PHP co najmniej 5.50, najlepszym rozwiązaniem jest OpCache (natywna biblioteka PHP / PECL). Powinien zostać wstępnie skompilowany, jeśli instalujesz z pliku binarnego.

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

Jeśli uruchomisz wersję PHP wcześniejszą niż 5.5, APC (natywna pamięć podręczna OpCode PHP / PECL) byłaby najprostszym wyborem, chociaż jest uważana za nieobsługiwaną i martwą:

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

Korzystanie z natywnej funkcjonalności OpCache PHP powinno zaoszczędzić kłopotów z utrzymywaniem bibliotek stron trzecich.


1
Jeśli korzystasz z PHP <5.5, pierwszą rzeczą, którą powinieneś zrobić, jest jego aktualizacja.
Michael Hampton

@ michael-hampton :: Rzeczywiście! Ale w niektórych rzadkich przypadkach nie można zaktualizować PHP bez aktualizacji systemu operacyjnego, co może nawet oznaczać nowe wymagania sprzętowe. Przykład - pracuję dla firmy z serwerami IBM serii i, wersja 6. Nasza wersja PHP to 5.4.3. Ponieważ IBM polega na przenoszeniu wersji PHP przez Zend, PHP 5.6 wymaga nowszej wersji systemu operacyjnego IBM-i OS - 7.1 lub nowszej (a następnie nowszej wersji serwera Zend PHP), która wymaga nowych serwerów Power-8 itd. ... meh.
recurse

0

Memcache buforuje pary klucz / wartość, a nie kody operacyjne. Możesz użyć go w połączeniu z jedną z pamięci podręcznych opcode.


Z odpowiedzi SirStana (poniżej) wydaje się, że memcache może wymagać ode mnie modyfikacji moich aplikacji PHP. Właściwie używam Wordpressa i modyfikacja jego podstawowego kodu nie będzie dobrym pomysłem.
rahul286,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.