Nên sử dụng bộ đệm cache (opcode) PHP nào và tại sao?


44

Tôi liên tục nghe về một số bộ đệm PHP (opcode) như - APC, XCache, Memcache, eAccelerator, v.v.

Nhưng tôi không bao giờ tìm ra cách chọn một. Ngoài lợi ích hiệu năng, một hệ thống bộ nhớ đệm được cho là sẽ cung cấp, những yếu tố khác nên là một điểm đáng quan tâm.

Giống như tại sao bạn sẽ nói hệ thống X cache tốt hơn Y? Tôi ít lo lắng về hiệu suất tương đối. Sự khác biệt nhỏ giữa bất kỳ hai hệ thống quan trọng ít hơn.

Nếu một câu trả lời chung cho câu hỏi của tôi là không thể, đây là vài gợi ý. Tôi sử dụng VPS chuyên dụng với MediHRple (có quyền truy cập root). RAM là 512 MB (vật lý) + 400 MB (trao đổi) Tôi lo ngại về WordPress và anh em họ của nó WordPress-MU và BuddyPress. 90% mã / trang web của chúng tôi rơi vào gia đình WordPress.

Cảm ơn trước sự giúp đỡ.

Câu trả lời:


33

Các sản phẩm bạn liệt kê phục vụ các mục đích khác nhau.

Bộ nhớ cache OPCode

Có nhiều Trình tăng tốc PHP (OPCaches) như đã thấy trong danh sách Wikipedia này . Như thường thấy với các sản phẩm nguồn mở, tất cả chúng đều khá giống nhau. XCache là trình tăng tốc PHP lighttp và là lựa chọn mặc định khi bạn đang chạy HTTPd đó. Nó cũng hoạt động tốt với Apache, tuy nhiên APC dường như hơi "chơi tốt với người khác" về mặt xã hội, được hỗ trợ chính thức như một phần của PHP và được phát hành cùng với bản phân phối PHP chính thức.

Tôi đã từ bỏ usign eAccelerator do sự phát triển chậm chạp của nó và tụt lại so với các bản phát hành của PHP và trạng thái may mắn chính thức mà APC cung cấp với hiệu suất tương tự.

Những sản phẩm này thường được thả vào; không có mã thay đổi tăng hiệu suất ngay lập tức. Với các cơ sở mã lớn (Drupal, Wordpress), hiệu suất có thể tốt hơn tới 3 lần trong khi giảm thời gian phản hồi và sử dụng bộ nhớ.

Bộ nhớ đệm dữ liệu

Memcache là một sản phẩm hơi khác biệt - bạn có thể nghĩ về nó như một hệ thống giá trị khóa nhẹ có thể được thu nhỏ cho nhiều máy chủ . Phần mềm phải được tăng cường để hỗ trợ Memcache và nó giải quyết một số vấn đề tốt hơn những phần mềm khác. Nếu bạn có một danh sách các giá trị chứng khoán theo thời gian thực trên trang web của mình, bạn có thể sử dụng Memcache để giữ một danh sách lưu trú của giá trị hiện tại được hiển thị trên trang web của bạn. Bạn có thể sử dụng nó để lưu trữ dữ liệu phiên để sử dụng lại ngắn hạn. Bạn sẽ không sử dụng nó cho những thứ khác như bộ nhớ cache toàn trang hoặc thay thế cho MySQL.

Ngoài ra còn có các addon Wordpress như WP-Super-Cache có thể cải thiện đáng kể hiệu năng của Wordpress (nguyên vẹn, WP-Super-Cache có thể cạnh tranh với các trang web dựa trên HTML tĩnh trong nhiều trường hợp)

Tóm lại - Tôi rất muốn giới thiệu APC nếu bạn muốn "đặt nó và quên nó, sản phẩm được hỗ trợ tốt".


Câu trả lời này đang được thảo luận trên Meta: meta.stackexchange.com/questions/15474/ Khăn
Brad Gilbert

Điền vào " [4]: http://" để sửa nó.
Brad Gilbert

Cảm ơn một tấn SirStan! Câu trả lời của bạn không chỉ giải quyết vấn đề của tôi mà còn giúp tôi hiểu rõ hơn về thế giới bộ nhớ đệm. Tôi chỉ muốn hỏi bạn một điều nữa. Tôi đã sử dụng wp-supercache. Có nên kết hợp nó với APC không? APC sẽ tiếp tục cải thiện hiệu suất đáng kể? APC và Wp-SuperCache sẽ hoạt động cùng nhau? Tôi có cần cả hai không? Hoặc APC sẽ làm cho Wp-SuperCache trở nên dư thừa?
rahul286

Lưu ý: APC thực hiện cả bộ đệm ẩn dữ liệu & bộ đệm mã op.
lo_fye

2
Câu trả lời này bây giờ rất hẹn hò. APC dường như không được cập nhật cho các phiên bản PHP trong tương lai đã được thay thế bằng bộ tối ưu hóa và bộ đệm opcode của Zend (hiện được gọi là opcache) kể từ câu 5.5. Tuy nhiên, tôi không thấy sự khác biệt đáng kể về hiệu suất ( symcbean.blogspot.co.uk/2013/09/ Khăn ) hơn nữa việc thiếu hỗ trợ dữ liệu trong opcache và thiếu bộ nhớ phục hồi có thể khiến việc nâng cấp hiệu quả đối với một số người.
symcbean


6

APC sẽ được tích hợp vào PHP6, vì vậy đây là một lựa chọn hợp lý. Tôi sử dụng nó, và tăng hiệu suất là tuyệt vời. Nếu bạn cần lưu trữ một cái gì đó không phải là opcodes (tức là kết quả truy vấn db), bạn cũng có thể sử dụng APC cho điều đó, nhưng không thể chia sẻ bộ đệm APC giữa nhiều máy chủ. Nếu bạn chỉ cần lưu trữ trên một máy chủ, APC là tuyệt vời. Nếu bạn cần mở rộng ra nhiều máy chủ và muốn chia sẻ bộ đệm giữa chúng, memcached là người đàn ông của bạn.

Tuy nhiên, một điều tôi sẽ làm là tạo một lớp bao bọc cho bất kỳ bộ đệm (không phải mã opcode) nào bạn làm. Bằng cách đó bạn có thể trao đổi bộ nhớ đệm mà không thay đổi mã của mình.


Ôi. Nếu tôi biết trạng thái chính thức của APC, tôi sẽ chuyển sang sử dụng lâu dài ... :-) Tôi cũng không biết nhiều về sự khác biệt của bộ đệm cache opcode / không opcode. Là một lựa chọn cá nhân, tôi không muốn trải qua quá trình tạo các lớp bao bọc hoặc sửa đổi nguồn ứng dụng của mình để giúp chúng thích ứng với bộ nhớ đệm env.
rahul286

6
Lưu ý rằng, vì PHP 5.5 tích hợp Zend Opcache là bộ đệm opcode "chính thức", tôi nghĩ không có khả năng họ sẽ chuyển sang APC cho PHP 6.
Matteo Tassinari

1
Để sửa lỗi này: PHP 5.5 thực sự xuất xưởng với Zend Opcache. Sẽ không có PHP 6. Thay vào đó sẽ có PHP 7. APC sẽ được coi là gần như (?) Đã lỗi thời.
Jisse Reitsma

6

Chỉ cần lưu ý rằng mọi thứ đã thay đổi một chút và có vẻ như APC sẽ không được bao gồm trong lõi 6 PHP.

APC có tốc độ phát triển chậm và có vẻ như nó sẽ không bao giờ tương thích với PHP 5.5. Do đó, có vẻ như những kẻ từ PHP sẽ thiết lập phần mở rộng bộ đệm opcode Zend OPCache làm phần mở rộng PHP CORE. Bạn quan tâm đọc thêm tại đây http://wiki.php.net/rfc/optimizerplus .

Lưu ý quan trọng: Zend OPCache không có bộ đệm dữ liệu người dùng như APC, vì vậy nếu bạn cần bộ đệm dữ liệu người dùng, bạn có thể sử dụng nó cùng với Memcache.


1
Nó cũng làm mất hiệu lực toàn bộ bộ đệm khi nó đầy (các mục không hợp lệ KHÔNG bị xóa) - do đó nếu bạn có nhiều mã hơn bộ nhớ hoặc triển khai thường xuyên, thì bạn sẽ thấy hiệu suất tăng đột biến.
symcbean

3

Nếu chạy phiên bản PHP ít nhất 5,50, OpCache là lựa chọn tốt nhất của bạn (thư viện gốc PHP / PECL). Nó sẽ được biên dịch trước nếu cài đặt từ nhị phân.

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

Nếu chạy phiên bản PHP trước 5.5, APC (bộ đệm OpCode riêng của PHP / PECL) sẽ là lựa chọn đơn giản nhất, mặc dù nó được coi là không rõ ràng và đã chết:

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

Sử dụng chức năng OpCache riêng của PHP sẽ giúp bạn tránh những rắc rối khi duy trì thư viện của bên thứ 3.


1
Nếu chạy PHP <5.5, điều đầu tiên bạn nên làm là cập nhật nó.
Michael Hampton

@ michael-hampton :: Thật vậy! Nhưng trong một số trường hợp hiếm hoi, bạn không thể cập nhật PHP mà không nâng cấp HĐH, điều này thậm chí có thể có nghĩa là một yêu cầu phần cứng mới. Ví dụ - Tôi làm việc cho một công ty chạy các máy chủ i-series của IBM, phiên bản 6somethings. Phiên bản PHP của chúng tôi là 5.4.3. Do IBM dựa vào Zend để chuyển các phiên bản PHP qua, PHP 5.6 yêu cầu phiên bản mới hơn của IBM-i OS - 7.1 hoặc mới hơn (và sau đó là phiên bản mới hơn của máy chủ Zend PHP), yêu cầu máy chủ Power-8 mới, v.v. ... ồ
recurse

0

Memcache lưu trữ cặp khóa / giá trị, không phải opcodes. Bạn có thể sử dụng nó kết hợp với một trong các bộ đệm opcode.


Dường như từ câu trả lời của SirStan (bên dưới) rằng memcache có thể cần tôi sửa đổi các ứng dụng PHP của mình. Thật ra tôi đang sử dụng Wordpress và sửa đổi mã cốt lõi của nó sẽ không phải là một ý tưởng hay.
rahul286
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.