Magento Enterprise 전체 페이지 캐시 사전 예열


19

Magento Enterprise에서 전체 페이지 캐시의 성능 이점은 잘 알려져 있습니다. 잘 알려지지 않은 것은이 기능의 이점을 최대한 활용하려면 특히 페이지 수가 많지 않은 대형 제품 세트에서 완전히 채워지고 인기가 높아야한다는 것입니다. 충분히 빨리 시작하십시오.

Magento에는 아침 일찍 사이트를 크롤링하고 FPC를 따뜻하게 해주는 내장 cronjob이 포함되어 있습니다.

이른 아침 작업을 실행하는 데 시간이 오래 걸리고 다른 작업이 실행되지 못하게하는 문제에 대해보고 들었습니다. 내가 가진 몇 가지 아이디어는 다음과 같습니다.

  • 생성 된 사이트 맵 파일의 모든 페이지를 크롤링하는 셸 스크립트를 작성하십시오.
  • 별도의 crontab 항목과 짧은 PHP 스크립트를 사용하여 Magento를 부트 스트랩하고 크롤러 프로세스를 직접 실행하십시오.

이것에 대한 생각이나 경험은 환영합니다!


1
실제로 별도의 파일에서 Enterprise 크롤러를 호출하고 서버 크론 탭을 사용하여 방해가되지 않도록 트리거 할 수 있습니다.
Toon Van Dooren

답변:


16

MageSpeedTest 처럼 파일 과 함께 공성전 을 사용할 수 있습니다 .sitemap.xml

#categories
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 0.5 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' > urls.txt
#products
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 1.0 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' >> urls.txt

그런 다음 실행

siege -i -c 1 -t 7200s -f urls.txt

콘텐츠에서 공급 여기 .


다음을 사용하여 요청 사이에 지연을 추가 할 수도 있습니다.–delay
Ben Lessani-Sonassi

참고 :이 sed 명령은 Darwin에서는 작동하지 않지만 CentOS에서는 작동합니다.
davidalger

1
모든 URL이 "따뜻함"을 보장하는 것은 아닙니다. 공성전은 파일에서 적중 할 URL을 임의로 선택하지만 반드시 모든 URL을 방문하지는 않습니다.
Joe Constant

22

우리는 전혀하지 않습니다. 이제까지. 우리는 이것을 반복해서 말할 것이지만

캐싱! = 성능

FPC를 추가하지 않고도 사이트 빨라야합니다. 콘텐츠가 준비되지 않은 시간이 항상 있습니다 (위의 시나리오).

언로드 된 상점에서 FPC를 사용한 페이지로드 시간은 FPC가 아닌 것보다 훨씬 인상적이어서는 안됩니다. Magento는 < 400ms표준 캐시 (카테고리 / 제품 / 검색 페이지) 에서 페이지로드 시간을 매우 즐겁게 해줍니다. FPC는 < 80ms이 문제를 해결할 것입니다. 그러나 경고가 있습니다.

  1. 무효화 또는 TTL 만료까지 주식 / 가격 정보가 오래되었습니다.
  2. 무효화 또는 TTL 만료까지 새로운 품목 /보다 관련성 높은 검색이 오래되었습니다.

    기타

FPC (또는 니스)에 대한 의존이 나쁜 생각 인 이유

캐시가 수동으로 프라이밍되는 것을 지속적으로 확인하려는 경우 몇 가지 이유가있을 수 있습니다.

  1. 캐시를 프라이밍 할 수있는 충분한 여유가 없습니다 ( 'FPC가 유용한 위치'참조)
  2. 그들없이 당신의 사이트는 너무 느립니다

모든 것을 캐시 할 수는 없습니다

카테고리가 5 개이고 중첩 된 2 개 레벨, 5 개의 필터링 가능한 속성, 5 개의 속성 옵션 및 1000 개의 제품이있는 상점을 이용하는 경우; 그것은 가능한 많은 조합입니다.

선택할 수있는 25 가지 옵션, 한 번에 최대 5 번 선택- 통계학 자는 아니지만 ... (속성 옵션의 수가 완전히 줄어들지 않는다고 가정)

25 possible URLs on the first selection
20 possible URLs on the second selection
15 possible URLs on the third selection
10 possible URLs on the fourth selection
5  possible URLs on the fifth selection

5^5 = 3,125 possible combinations (for top level categories)
5^4 = 625 possible combinations (for 2nd level categories)

알다시피, 위의 시나리오는 3 번의 클릭으로 고객이 제품을 찾을 수있을 정도로 사용 가능한 제품 수가 충분히 줄어 듭니다. 그렇더라도 ...

25 possible URLs on the first selection
10 possible URLs on the second selection
3 possible URLs on the third selection

5^3 = 125 possible URL combinations 

그런 다음 5 개의 카테고리로 625 개의 URL을 곱합니다. 이 단계에서는 작은 카탈로그에 대해 이야기하고 모든 제품 URL을 완전히 무시합니다.

또한 중첩 범주가 is_anchor켜져 있으면 기하 급수적으로 증가 한다는 점을 고려하지 않았습니다 .

따라서 많은 양의 페이지를 크롤링하려면 페이지로드 시간이 좋고 낮기 때문에 빠른 프로세스 (크롤링의 목적을 어 기고 있음)가되기를 바랍니다. TTL이 만료되기 전에 완료 될 충분한 시간.

페이지로드 시간이 0.4 초이고 8 코어 CPU가 있다면 ...

625 * 0.4 = 250 / 8 = 31 seconds

0.5 분, 나쁘지는 않지만 2 초 페이지로드 시간이 있다고 가정 해 봅시다.

625 * 2 = 1250 / 8 = 156 seconds

하지만 가능한 최대 시나리오를 취했다면

3,750 * 2 = 7,500 / 8 = 937 seconds ~ 15 minutes

이것이 15 분 동안 100 % CPU 부하를받는 프로덕션 서버입니다. 원하는 TTL에 비례하여 크롤링 속도를 줄입니다.

따라서 콘텐츠에 3600s TTL이 포함되도록하려면 크롤링 속도가 4 배 느려질 수 있습니다. 크롤링 전용 CPU는 25 %에 불과합니다. 카테고리 콘텐츠를 준비하는 데 도움이되는 많은 리소스입니다.이 단계에서는 제품, 검색어 또는 추가 매장보기를 고려하지 않았습니다.

실제로, catalog_url_rewrites계층 탐색 메뉴에서 매개 변수를 고려하지 않은 표 에서 조합의 단순한 크기를 살펴보면 크롤링해야하는 URL 수에 대한 아이디어를 얻을 수 있습니다.

모든 상점은 확실히 다를 것이지만, 내가 집에들이려고하는 것은 사이트를 크롤링하여 FPC를 프라임하는 것이 실용적이지 않다는 것입니다. 상점이로 빠르게 시작되는지 확인하십시오 .

FPC가 유용한 곳

FPC의 이점은 실제로로드가 많은 상점에서 얻을 수 있습니다. 실제로 트래픽이 많고 캐시는 자연스럽게 지속적으로 시작됩니다.

FPC는 일반적으로 요청되는 콘텐츠의 인프라 오버 헤드를 줄여 Magento 백엔드에 대한 반복 호출을 줄임으로써 작동합니다.

따라서 페이지로드 시간을 줄이려는 것이 아니라 리소스 사용을 줄이려면 트래픽 수준이 매우 높을 때 FPC를 배포하는 것이 좋습니다.

누가 신경 써도 여전히 크롤링하고 싶어

그럼 두 가지 옵션이 있습니다

  1. 템플릿에서 크롤링 (예 : 사이트 맵)
  2. 페이지별로 링크를 추출하고 각각 크롤링

그리고이 두 가지를 모두 수행 할 수있는 많은 유틸리티가 있습니다.

  1. 마법사 성능
  2. HTTrack
  3. 너치
  4. 스파이더
  5. 크롤러

마법사 성능 테스트

Mage-Perftest로 상점을 크롤링 할 수 있습니다. 먼저 다운로드하십시오.

wget http://sys.sonassi.com/mage-perftest          (64bit) OR
wget http://sys.sonassi.com/mage-perftest-i386     (32bit)
chmod +x http://sys.sonassi.com/mage-perftest*

그런 다음 Magento 사이트 맵을 사용하여 크롤링 프로세스를 정의하십시오 (URL이 <loc></loc>태그 로 묶인 경우 URL의 사이트 맵을 작성하여이를 사용자 정의 할 수 있음 ). 다음 명령은 사이트 맵 파일에서 모든 URL을 읽은 다음 1440 분 (1 일) 동안 URL을 크롤링 (PHP 만)합니다. 서버가 20 % CPU를 초과하거나로드 평균이 2 인 경우 크롤링이 일시적으로 중지됩니다.

./mage-perftest -u www.example.com -s www.example.com/sitemap.xml -r auto -b -d 1440 -z -a 20 -l 2  

1 일 동안 크롤링 된 URL이 1000 개인 경우 약 1입니다. 86 초마다 1 회 요청 ~ 0.011 RPS 목표


개막식은 매우 사실입니다. 페이지 캐싱은 성능을 달성하는 방법이 아닙니다. 나는이 사실을 알고. 내가 고객에게 똑같은 것을 몇 번이나 말했는지 모른다. 솔직히 말해서, 이전에 FPC를 프라이밍하는 크롤러가있는 사이트를 설정 한 적이 없으며 관리자가 클라이언트에서 FPC를 활성화 한 위치를 한 번만 사용했습니다. 파일 기반 캐시 태그 때문에 느리게 진행됩니다. 내가 묻는 주요 이유는 Nexcess 백서의 일부 연구를 기반으로 이와 관련된 아이디어를 탐색하기 때문입니다. 미친 듯이 높은 트래픽 사이트의 경우, 아침에 일찍를 세척 후에는 캐시를 프라이밍 중요 할 수
davidalger

1
나는 Nexcess을 존중 - 그러나 그들의 백서 초점을 맞추고 매우 심하게 성능을 달성하기 위해 캐싱에 -보다는 환경을 보장하는 것은 이미 확대됨과 코드가 빠르고 깨끗하고 효율적이다. 우리는 고객에게 바니시를 제공하지만 필요할 때까지 사용을 옹호하지는 않습니다. 그래야 인프라 비용을 절감 할 수 있습니다. 비 전환 / 체크 아웃 트래픽의 ~ 94 %가 CPU주기를 소비하는 경우 캐싱은 훌륭한 인공 벤치 마크 통계를 만들어냅니다. 그러나 TTL이 너무 길거나 (콘텐츠가 충분하지 않은 경우) 프라이밍 할 트래픽이 충분하지 않으면 실제로 아무 의미가 없습니다.
벤 레 사니-Sonassi

1
트래픽이 매우 많은 사이트의 경우 몇 가지가 있으며 인공 크롤링을 통해 캐시를 최신 상태로 유지하는 것은 무의미합니다. 자연 트래픽은 문제가되지 않습니다. 크롤링은 고객이 사용하는 리소스 만 제거합니다.
Ben Lessani-Sonassi

성능 향상을 위해 캐싱을 사용하는 데 중점을 둔 백서가 달라지기를 바랍니다. 그들은 2 + 1 클러스터가 얼마나 많은 처리량을 달성 할 수 있는지 보여주었습니다. 그들은 페이지로드 시간을 건드리지 않았고 트랜잭션 처리량 만 만졌습니다. 그들이 가지고있는 하드웨어는 여러분이 얻을 수있는만큼 최적화되어 있습니다. 그리고 그렇습니다. 캐시 된 콘텐츠에 대한 TTL의 영향을 알고 있습니다. 다시 반복하기 위해, 나는 여기서 성능을 달성하려고하지 않습니다. 우리는 이미 그것을 가지고 있습니다. 이것이 조사하는 것은 이른 아침 캐시 플러시로 인해, 즉 정상적인 트래픽이 픽업되기 전에 처리량의 지연 / 드롭을 우회하는 방법입니다.
davidalger

1
그때 혼란 스러워요. 상점이 이미 빠르지 만 캐시를 지우면 넘어집니다. a) 아침에 캐시를 지우지 말고 밤새도록 캐시를 검색하고 검색 크롤링 로봇 (google / bing 등)이 프라이밍을하도록하거나 b) 올바른 인프라를 확보하십시오 . 점포가
Flag / Slowdown

0

요즘 블로그 게시물에 대한 전체 rant를 저장하지만 그 동안 캐시가 따뜻해 wfpc집니다.

테스트 성능

Magento 사이트의 성능을 테스트 할 수 있습니다

./wfpc -t http://mymagentosite.com/sitemap.xml

Finished testing your Magento site performance
Total download time (in seconds)   : 5.0269110202789
Total download time (formatted)    : 0:0:5.026
Average page time (in milliseconds): 502.69110202789

FPC 온난화

그리고 sitemap.xml의 모든 URL에 도달하는 FPC를 예열 할 수 있습니다.

./wfpc -w http://mymagentosite.com/sitemap.xml

원하는 경우 요청 사이에 지연을 둘 수도 있습니다. 요청 사이에 1 초 지연이 있습니다.

./wfpc -w -d=1 http://mymagentosite.com/sitemap.xml

테스트 모드는 10 개의 URL 만 무작위로 적중하므로 FPC를 예열 한 후에 테스트 모드를 실행하여 FPC의 차이가 얼마나되는지 확인할 수 있습니다!

생각

개인적으로, 따뜻한 것이 합리적이라고 생각합니다. 약 40 페이지의 작은 사이트에서 FPC에 의해 다운로드 시간이 대략 절반으로 줄었습니다. 백엔드로 APCu와 함께 Lesti_FPC를 사용하는 거의 40,000 개의 제품이있는 대규모 사이트에서 캐시에 200MB를 약간 사용하고 있습니다. 솔직히 8GB 프로덕션 서버에는 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.