Tốc độ: Magento với cả APC và Memcached


17

Chúng tôi đã nghiên cứu nhiều diễn đàn và không biết câu trả lời sau đây. Chúng tôi có cả hai APCMemcachecài đặt trên máy chủ của chúng tôi. Chúng tôi không chắc chắn cấu hình chính xác và tốt nhất là gì.

Câu hỏi của tôi

Các cài đặt tốt nhất để chạy Magento bằng cả Memcache + APC là gì? (Hoặc điều này không thông minh chút nào)

Nghiên cứu cơ bản

Ở đây Memcache và APC được khuyên là bộ đệm nhanh và chậm (nhưng không có đĩa). Âm thanh như thế này chỉ hoạt động khi bạn có đủ RAM (và chắc chắn về nó)

Và bài viết này là về Memcache hoặc APC - và chúng tôi có cả hai

Và ở đây nói rằng Memcache chỉ thực sự hoạt động khi bạn cũng có một phụ trợ chậm được xác định

Và tôi nghĩ rằng bài viết này đang nói như vậy

Đây là giải pháp ISP của tôi cho local.xml

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

Tình hình

Lưu trữ chia sẻ Brim FPC được cài đặt: http : // ec Commerce.brimllc.com/full-page-cache-magento.html (FPC này cũng có bộ đệm tệp có thể mở rộng để làm cho nó phức tạp hơn)


@sonassi, tại sao không thay vì thẻ memcached? code.google.com/p/memcached-tag

Câu trả lời:


26

Bạn cần hiểu sự khác biệt rõ ràng giữa hai sản phẩm này để hiểu cách sử dụng chúng.

  • APC là cả bộ đệm OPCodebộ đệm nhanh
  • Memcache chỉ là một phần cuối nhanh

Sử dụng APC làm bộ đệm OPCode

Chỉ cần cài đặt mô-đun trên máy chủ của bạn

pecl install apc

Và kích hoạt nó trong php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

Sau đó, bạn kích hoạt và tinh chỉnh cấu hình thời gian chạy cho phù hợp, ví dụ.

apc.enables
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

Sau đó khởi động lại PHP / Apache

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Sau đó, không còn gì để làm. Xác nhận APC được bật nhanh chóng phpinfo()- nhưng nếu không, tại thời điểm này, phần bộ đệm OPCode của APC đang hoạt động.

Không có gì cần phải được cấu hình về phía Magento.

Sử dụng APC như một phần cuối nhanh

Bạn cần thêm những điều sau đây vào ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

Sau đó xả bộ nhớ cache cửa hàng hiện tại của bạn. Để xác minh nó đang hoạt động, tải một trang ở mặt trước và ./var/cachethư mục sẽ trống.

Sử dụng Memcache như một phần cuối nhanh

Bạn sẽ cần cài đặt Memcache dưới dạng tiện ích mở rộng PHP và cài đặt Memcache Daemon (Memcached) tương ứng trên máy chủ của bạn.

pecl install memcache

Và kích hoạt nó trong php.ini của bạn

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Sau đó cài đặt Memcached trên máy chủ. Đối với RH / Centos, hãy điều chỉnh URL cho phù hợp với phiên bản phát hành và kiến ​​trúc CPU của bạn.

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

Sau đó sửa đổi Magento để sử dụng Memcache làm phụ trợ nhanh, thay đổi đường dẫn ổ cắm thành kết nối TCP / IP cho phù hợp.

<cache>
  <slow_backend>database</slow_backend>

  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>

  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

Hãy cẩn thận với Memcache và gắn thẻ - nó đang lưu trữ cái gì

Memcache chỉ hỗ trợ một cấp độ quan hệ khóa-giá trị duy nhất, do đó, nó không thể lưu trữ các thẻ bộ đệm Magento (được sử dụng để xóa dữ liệu bộ đệm một cách độc lập). Do đó, bạn cần chỉ định một slow_backendđể duy trì mối quan hệ thẻ nội dung bộ đệm hoặc không xác định một mối quan hệ nào cả.

Nếu bạn xác định a slow_backend, bạn sẽ gặp rủi ro các thẻ bộ đệm phát triển lớn đến mức hiệu suất bị phủ định; đó cũng là vấn đề cố hữu mà bạn không thể mở rộng trên nhiều máy chủ nếu mỗi máy chủ đang duy trì các thẻ bộ nhớ cache của riêng họ.

Vì vậy, khi sử dụng Memcache, cách tiếp cận tốt hơn (với cảnh báo bạn không thể xóa bộ nhớ cache một cách độc lập), là không bận tâm sử dụng slow_backend.

Trong trường hợp đó, chúng tôi khuyên bạn nên xóa <slow_backend>database</slow_backend>và thay thế bằng:

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

Điều này sẽ phá vỡ / vô hiệu hóa cấp độ bộ nhớ đệm thứ 2 (và ngăn lưu trữ thẻ), nhưng vẫn cho phép hiệu suất của Memcache.

Sử dụng cái nào

Nếu đó là một triển khai máy chủ duy nhất - không có hại gì khi chỉ sử dụng APC cho mọi thứ.

Nếu đây là một thiết lập phân tán - thì bạn sẽ cần sử dụng Memcache làm phụ trợ nhanh (để tất cả các máy có thể truy cập vào cửa hàng chung).

Liên quan nhiều hơn là nếu nhà cung cấp dịch vụ lưu trữ của bạn không thể cho bạn biết đúng thiết lập để sử dụng, bạn chắc chắn với máy chủ lưu trữ sai.


Các bản phân phối: sonassi.com , php.net , repoforge.org


Khi tôi cố gắng vô hiệu hóa Slow_backend_cache bằng thủ thuật này, tôi nhận được slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfacetrong Mage 1.7.0.2
Aaron Pollock

6

Tôi hoàn toàn đồng ý với các câu trả lời trước đây, nhưng đây là một độ chính xác ngắn để hoàn thành nó: Có, apc có thể được sử dụng như một công cụ lưu trữ bộ đệm và như một trình tối ưu hóa mã byte PHP. Nhưng hai điểm cần được làm rõ:

  • Là một phụ trợ nhanh, các chỉ thị cấu hình được APC sử dụng để hiểu cách nó phải lưu dữ liệu được quản lý thông qua các chỉ thị apc.user_%. Những cái khác chỉ liên quan đến bộ đệm mã byte (Ex apc.ttl: thời gian hết hạn cho bộ đệm opcode, apc.user_ttl: thời lượng hết hạn cho dữ liệu được lưu trữ trong bộ nhớ cache của Magento của bạn).

  • Và là một phụ trợ nhanh, APC có hành vi giống hệt như memcached: nó không quản lý các thẻ bộ đệm và đối với Magento, nó yêu cầu một phụ trợ chậm được cấu hình (hoặc mặc định sử dụng tệp phụ trợ chậm).

Theo kinh nghiệm của tôi, trên các trang web có lưu lượng truy cập lớn, nếu bạn chỉ sử dụng apc làm trình tối ưu hóa mã byte, bạn cần từ 96 đến 256Mo trong giá trị cấu hình apc.shm_size. Đồng thời tăng apc.num_files_hint từ 1000 lên 15000: theo mặc định, bộ đệm mã byte bộ đệm apc chỉ có 1000 tệp và Magento chứa khoảng ~ 20.000 tệp PHP và PHTML theo mặc định ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Vì vậy, tùy chỉnh giá trị này với mã nguồn của bạn.

Nếu bạn sử dụng APC hoặc memcached dưới dạng phụ trợ nhanh, thật khó để cung cấp cho bạn một số mẹo về bộ nhớ cần thiết: nó thực sự phụ thuộc vào chính sách bộ đệm được áp dụng trong trường hợp của bạn.

Hiện tại, cấu hình bộ đệm của bạn hoạt động như thế này:

  • mọi nội dung được lưu trữ cả trong memcached và trong tập tin
  • Phần cuối nhanh luôn được yêu cầu trước phần phụ trợ chậm
  • nếu không tìm thấy gì trong phần phụ trợ nhanh, magento tìm kiếm trong phần phụ trợ chậm

Tại sao hai cấp quản lý? memcached và các phụ trợ nhanh khác là kho lưu trữ bộ nhớ. Vì vậy, nó có nghĩa là dữ liệu có thể bị hỏng hoặc đã biến mất.

Làm thế nào bạn có thể tăng hiệu suất cấu hình này?

Vô hiệu hóa cách viết thứ hai có lẽ là một trong những lựa chọn hiệu quả nhất. Điều này được giải thích trong bài viết thứ tư mà bạn đề cập. Nhưng bạn không thể sử dụng mà không sửa đổi mã nguồn Slow_backend_store_data. Trong ngữ cảnh của bạn, tôi không khuyên bạn nên thực hiện tùy chỉnh này vì những lý do sau: dữ liệu của bạn được lưu trong bộ đệm sẽ không bao giờ được kiểm soát. Bạn sẽ lưu trữ dữ liệu trong bộ nhớ, sẽ kiếm được hiệu suất, nhưng có lẽ gửi cho các đối thủ của bạn một nội dung không hợp lệ. Vì vậy, bạn cần tìm một giải pháp đảm bảo bạn có các điểm nhớ bộ nhớ (để có hiệu suất tốt hơn), kiểm soát ghi và khả năng vô hiệu hóa bộ nhớ đệm Slow_backend_store_data. Bạn có thể tiếp cận bối cảnh này bằng cách:

  • thay thế máy chủ memcached bằng redis (redis có thể kiểm soát đọc và ghi giống như được thực hiện bởi một hệ thống tập tin) và tiếp tục sử dụng apc như một trình tối ưu hóa mã byte

  • * đảm bảo rằng bạn có thể sử dụng tùy chọn Slow_backend_store_data * bằng cách tùy chỉnh mã nguồn của bạn hoặc bằng cách chuyển sang cơ sở dữ liệu chậm phụ trợ (vâng, nó làm tăng tải của máy chủ cơ sở dữ liệu của bạn, nhưng nếu chính sách bộ đệm của bạn được xác định rõ vấn đề)

  • * hủy kích hoạt tùy chọn Slow_backend_store_data * : trong cấu hình này, nó không còn cần thiết nữa, bạn đã đọc và ghi điều khiển được thực hiện bởi redis.


2

Như một lưu ý bổ sung cho điều này, chúng tôi đã thấy rằng khi sử dụng APC với Magento (đối với bộ đệm ẩn opcode - chúng tôi sử dụng Redis cho trang Magento thông thường và chặn bộ đệm), điều quan trọng là phải đảm bảo rằng cài đặt chỉ số là 0 trong sản xuất (nhưng 1 trong phát triển):

apc.stat = 0

Cài đặt apc.stat được sử dụng để xác định xem có kiểm tra tập lệnh trên mỗi yêu cầu hay không để xác định xem nó có bị sửa đổi hay không ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) và do đó, đặt giá trị này thành 0 trong môi trường sản xuất sẽ mang lại lợi ích hiệu suất của APC khi không thực hiện kiểm tra này với mỗi yêu cầu.

Đáng lưu ý rằng một khi apc.stat được đặt thành 0, bạn có thể sẽ phải khởi động lại quy trình máy chủ web của mình để nhận các thay đổi tệp (tức là sau triển khai) nhưng dù sao đây cũng phải là một phần của chiến lược triển khai sau của bạn.


1

Điều tốt nhất chúng tôi đã làm để tăng tốc đáng kể phụ trợ là cài đặt REDIS làm trình xử lý bộ đệm . Hiện tại nó cũng được hỗ trợ trong lõi từ Magento 1.8 trở lên.

Không gì có thể so sánh ... bây giờ là nhấp chuột nhấp chuột nhấp chuột

http: //www.magentoc Commerce.com/ledgeledge-base/entry/redis-magento-ce-ee

Ngoài ra, bạn có thể xem xét thêm tiện ích mở rộng Phiên Redis để thêm phiên vào máy chủ bộ nhớ redis ...

Chúc may mắn!


0

Từ tệp local.xml này, Magento sẽ chọn mục nhập cuối cùng và sử dụng Memcache. Tôi nghĩ có một sự nhầm lẫn giữa cách APC và Memcache có thể hoạt động với Magento.

Đầu tiên, APC có 2 cách sử dụng:

  • bộ nhớ đệm opcode - biên dịch các tập tin php của bạn thành opcode, giúp thực thi tập lệnh nhanh hơn khoảng 25%
  • lưu trữ khóa / giá trị - có thể được Magento sử dụng làm hệ thống bộ đệm.

Mặt khác, Memcache chỉ là một kho lưu trữ khóa / giá trị. Ưu điểm lớn của Memcache là nó có thể hoạt động ở chế độ máy khách-máy chủ, vì vậy nhiều máy chủ ngoại vi có thể sử dụng cùng một bộ đệm, đây là điều bắt buộc nếu bạn có nhiều máy chủ phục vụ cùng một trang web.

Thiết lập phổ biến nhất là cài đặt APC để nhận bộ đệm ẩn opcode (để bạn có được thực thi tập lệnh nhanh hơn ~ 25%) và sử dụng Memcache làm máy chủ bộ đệm. Tôi cũng đã sử dụng APC như một hệ thống bộ đệm và mặc dù về lý thuyết, nó sẽ nhanh hơn một chút so với Memcache, bạn không thể phân biệt được.


Vì vậy, nếu tôi đọc điều này: Thiết lập phổ biến nhất là cài đặt APC để nhận bộ đệm ẩn opcode (để bạn có được thực thi tập lệnh nhanh hơn ~ 25%) và sử dụng Memcache làm máy chủ bộ đệm. Vậy thì làm thế nào chúng ta có thể sử dụng cả hai cùng nhau? Có phải như thế này không: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

Để sử dụng cả hai cùng nhau, bạn không cần phải tuyên bố bất cứ điều gì liên quan đến APC.
Ben Lessani - Sonassi

Vì vậy, mã sẽ là tất cả mọi thứ từ? <cache> <backend> memcached </ backend> và bỏ qua phần đầu tiên
snh_nl

Ngoài ra. Đối với tôi, tốc độ phụ trợ luôn là thước đo cho tốc độ chung (vì FPC, v.v. không áp dụng ở đây) ...
snh_nl
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.