속도 : APC와 Memcached를 모두 갖춘 Magento


17

우리는 많은 포럼을 연구했으며 다음에 대한 답을 모릅니다. 우리는 모두 가지고 APCMemcache우리의 서버에 설치되어 있어야합니다. 올바른 구성이 무엇인지 잘 모르겠습니다.

내 질문

Memcache + APC를 동시에 사용하여 Magento를 실행하기위한 최상의 설정은 무엇입니까? (또는 전혀 영리하지 않습니다)

배경 조사

여기서 Memcache와 APC는 빠르고 느린 캐시 (디스크는 아님)로 권장됩니다. RAM이 충분할 때만 작동합니다.

이 기사는 Memcache 또는 APC 에 관한 것입니다.

그리고 여기에는 느린 백엔드가 정의되어있을 때만 Memcache가 실제로 작동한다고 말합니다.

그리고 나는이 기사가 같은 말을하고 있다고 생각합니다.

이것은 local.xml에 대한 ISP의 솔루션입니다.

<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>

상태

공유 호스팅 Brim FPC 설치 : http://ecommerce.brimllc.com/full-page-cache-magento.html (이 FPC에는 확장 가능한 파일 캐시가있어 더 복잡해집니다)


@sonassi, 왜 memcached-tag 대신에? code.google.com/p/memcached-tag

답변:


26

사용 방법을 이해하려면이 두 제품의 명확한 차이점을 이해해야합니다.

  • APC는 OPCode 캐시빠른 백엔드입니다
  • Memcache는 빠른 백엔드입니다

OPPC 캐시로 APC 사용

서버에 간단히 모듈을 설치하십시오

pecl install apc

그리고 당신의 그것을 활성화 php.ini

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

그런 다음 예를 들어 런타임 구성 을 활성화하고 미세 조정하십시오 .

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

그런 다음 PHP / Apache를 다시 시작하십시오.

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

그 후에는 할 일이 없습니다. APC가 빠르게 활성화되어 있는지 확인하십시오. phpinfo()그렇지 않으면이 시점에서 APC의 OPCode 캐시 부분이 활성화됩니다.

마 젠토 측에서는 아무것도 구성 할 필요가 없습니다.

APC를 빠른 백엔드로 사용

당신은에 다음을 추가해야합니다 ./app/etc/local.xml

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

그런 다음 기존 저장소 캐시를 비 웁니다. 작동하는지 확인하려면 프런트 엔드에 페이지를로드하면 ./var/cache디렉토리가 비어 있어야합니다.

Memcache를 빠른 백엔드로 사용

Memcache를 PHP 확장으로 설치하고 각각의 Memcache 데몬 (Memcached)을 서버에 설치해야합니다.

pecl install memcache

그리고 php.ini에서 활성화하십시오

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)

그런 다음 서버에 Memcached를 설치하십시오. RH / Centos의 경우 릴리스 버전 및 CPU 아키텍처에 맞게 URL을 조정하십시오.

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)

그런 다음 Memcache를 빠른 백엔드로 사용하도록 Magento를 수정하고 소켓 경로를 TCP / IP 연결로 변경하십시오.

<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>

- Memcache의 및 태그의주의 사항 은 무엇을 저장한다

Memcache는 단일 레벨의 키-값 관계 만 지원하므로 Magento 캐시 태그 (캐시 데이터를 독립적으로 플러시하는 데 사용)를 저장할 수 없습니다. 결과적으로, slow_backend캐시 컨텐츠 태그 관계를 유지하기 위해 를 지정 하거나 전혀 정의하지 않아야합니다.

을 정의 slow_backend하면 캐시 태그가 너무 커져 성능이 저하 될 위험이 있습니다. 각 서버가 자체 캐시 태그를 유지 관리하는 경우 여러 서버에서 확장 할 수없는 고유 한 문제도 있습니다.

따라서 Memcache를 사용할 때 캐시를 독립적으로 플러시 할 수 없다는 경고를 받는 더 나은 방법은을 사용하지 않아도 slow_backend됩니다.

이 경우 다음을 제거 <slow_backend>database</slow_backend>하고 교체하는 것이 좋습니다 .

  <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>

이렇게하면 두 번째 수준의 캐싱이 중단 / 비활성화되지만 태그 저장은 방지되지만 여전히 Memcache의 성능은 허용됩니다.

사용할 것

단일 서버 배포 인 경우 모든 것에 APC를 사용하는 것만으로도 해가 없습니다.

분산 설정 인 경우 Memcache를 빠른 백엔드로 사용해야합니다 (모든 머신이 공통 저장소에 액세스 할 수 있도록).

더 많은 문제는 호스팅 제공 업체가 올바른 설정을 할 수 없다면 호스트가 잘못되었다는 것입니다.


기여 : sonassi.com , php.net , repoforge.org


이 트릭을 사용하여 slow_backend_cache를 비활성화하려고하면 slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interface마법사 1.7.0.2
Aaron Pollock

6

나는 이전 답변에 동의하지만 여기에 짧은 정확도가 있습니다. 예, apc는 캐시 스토리지 엔진과 PHP 바이트 코드 최적화 프로그램으로 모두 사용할 수 있습니다. 그러나 다음 두 가지 사항을 명확히해야합니다.

  • 빠른 백엔드로서 APC가 데이터를 저장하는 방법을 이해하기 위해 사용하는 구성 지시문은 apc.user_ % 지시문을 통해 관리됩니다. 다른 하나는 바이트 코드 캐시에만 해당됩니다 (예 : apc.ttl : opcode 캐시의 만료 기간, apc.user_ttl : Magento가 캐시 한 데이터에 대한 만료 기간).

  • 빠른 백엔드로서 APC는 memcached와 정확히 동일한 동작을합니다. 캐시 태그를 관리하지 않으며 Magento의 경우 느린 백엔드 구성 (또는 기본적으로 느린 백엔드 파일 사용)이 필요합니다.

내 경험상 트래픽이 많은 웹 사이트에서 apc를 바이트 코드 최적화 프로그램으로 만 사용하는 경우 apc.shm_size 구성 값에 96 ~ 256Mo가 필요합니다. 또한 apc.num_files_hint를 1000에서 15000으로 늘리십시오. 기본적으로 apc 캐시 바이트 코드는 1000 개의 파일 만 캐시하고 Magento에는 기본적으로 ~ 20,000 개의 PHP 및 PHTML 파일이 포함됩니다 ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). 소스 코드를 사용하여이 값을 사용자 정의하십시오.

APC 또는 memcached를 빠른 백엔드로 사용하는 경우 필요한 메모리에 대한 팁을 제공하기가 어렵습니다. 실제로 인스턴스에 적용된 캐시 정책에 따라 다릅니다.

지금은 캐시 구성이 다음과 같이 작동합니다.

  • 모든 컨텐츠는 memcached와 파일 모두에 저장됩니다
  • 빠른 백엔드는 항상 느린 백엔드 전에 요청됩니다.
  • 빠른 백엔드에서 아무것도 발견되지 않으면 magento는 느린 백엔드에서 찾습니다

왜이 두 레벨 관리인가? memcached 및 기타 빠른 백엔드는 메모리 저장소입니다. 따라서 데이터가 손상되었거나 사라질 수 있습니다.

이 구성 성능을 어떻게 향상시킬 수 있습니까?

두 번째 쓰기 비활성화는 아마도 가장 효율적인 옵션 중 하나 일 것입니다. 이것은 네 번째 기사에서 설명했습니다. 그러나 slow_backend_store_data 소스 코드를 수정하지 않고는 사용할 수 없습니다. 상황에 따라 다음과 같은 이유로이 사용자 지정을 수행하지 않는 것이 좋습니다. 캐시에 저장된 데이터는 절대 제어되지 않습니다. 데이터를 메모리에 저장하고 성능을 얻을 수 있지만 잘못된 내용을 Vistor에게 보낼 수도 있습니다. 따라서 성능 향상을 위해 메모리 액세스, 쓰기 제어 및 slow_backend_store_data 캐싱을 비활성화하는 기능을 보장하는 솔루션을 찾아야합니다. 다음과 같은 방법으로이 상황에 도달 할 수 있습니다.

  • memcached 서버를 redis 서버로 교체하고 (redis는 파일 시스템에서 수행하는 것처럼 읽기 및 쓰기를 제어 할 수 있음) apc 를 바이트 코드 최적화 프로그램으로 계속 사용합니다.

  • * 소스 코드를 사용자 정의하거나 데이터베이스 느린 백엔드로 전환하여 slow_backend_store_data 옵션 *을 사용할 수 있는지 확인 하십시오 (예 : 데이터베이스 서버의로드가 증가하지만 캐시 정책이 올바르게 정의 된 경우에는 그렇지 않아야 함) 문제)

  • * slow_backend_store_data 옵션 비활성화 * :이 구성에서는 더 이상 필요하지 않으며 redis에 의해 수행되는 읽기 및 쓰기 제어가 있습니다.


2

이에 대한 추가 참고 사항으로, Magento와 함께 APC를 사용할 때 (오퍼 코드 캐싱의 경우-기존 Magento 페이지 및 블록 캐싱에 Redis를 사용하는 경우) 통계 설정이 프로덕션에서 0 (1에서 1)인지 확인하는 것이 중요합니다 개발):

apc.stat = 0

apc.stat 설정은 각 요청에서 스크립트를 검사하여 스크립트가 수정되었는지 여부를 확인하는 데 사용됩니다 ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) 따라서 프로덕션 환경에서이 값을 0으로 설정하면 각 요청마다이 검사를 수행하지 않는 APC의 성능 이점이 있습니다.

apc.stat가 0으로 설정되면 파일 변경 사항 (예 : 배포 후)을 가져 오기 위해 웹 서버 프로세스를 다시 시작해야 할 수도 있지만 이는 배포 후 전략의 일부 여야합니다.


1

백엔드 속도를 크게 높이기 위해 가장 좋은 방법은 REDIS를 캐시 핸들러로 설치하는 것 입니다. 또한 이제 Magento 1.8 이상에서 코어로 지원됩니다.

아무것도 비교하지 않습니다 ... 이제 클릭 클릭 clickerdy ​​클릭입니다

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

또한 Redis 세션 확장을 추가하여 세션을 redis 메모리 서버에 추가하는 것도 고려할 수 있습니다 ...

행운을 빕니다!


0

이 local.xml 파일에서 Magento는 마지막 항목을 선택하고 Memcache를 사용합니다. APC와 Memcache가 Magento와 함께 작동하는 방법 사이에 혼란이 있다고 생각합니다.

첫째, APC에는 두 가지 용도가 있습니다.

  • opcode 캐싱-PHP 파일을 opcode로 컴파일하여 스크립트 실행 속도를 약 25 % 단축
  • 키 / 값 저장-Magento는 캐시 시스템으로 사용할 수 있습니다.

반면 Memcache는 키 / 값 저장소 일뿐입니다. Memcache의 가장 큰 장점은 클라이언트-서버 모드에서 작동 할 수 있으므로 여러 프런트 엔드 서버가 동일한 캐시를 사용할 수 있다는 것입니다. 동일한 웹 사이트를 제공하는 여러 서버가있는 경우 필수입니다.

가장 일반적인 설정은 APC를 설치하여 opcode 캐싱 (~ 25 % 더 빠른 스크립트 실행)을 얻고 Memcache를 캐시 서버로 사용하는 것입니다. 나는 또한 APC를 캐시 시스템으로 사용했으며 이론 상으로는 Memcache보다 약간 빠르지 만 차이점을 알 수는 없습니다.


내가 이것을 읽는다면 : 가장 일반적인 설정은 opcode 캐싱을 얻기 위해 APC를 설치하고 (~ 25 % 더 빠른 스크립트 실행을 얻음) Memcache를 캐시 서버로 사용하는 것입니다. 그럼 어떻게 둘 다 같이 사용할 수 있을까요? 이처럼되어 coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

두 가지를 함께 사용하기 위해 APC와는 전혀 관련이 없다고 선언 할 필요가 없습니다.
Ben Lessani-Sonassi

그래서 코드는 모든 것입니까? <cache> <backend> memcached </ backend> 첫 부분 제외
snh_nl

게다가. 나를 위해 백엔드 속도는 항상 (같은 FPC 등 그나마 여기에 적용) 전반적인 속도를 측정하고있다
snh_nl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.