워드 프레스는 얼마나 잘 확장됩니까?


34

새로운 WordPress와 새로운 기능을 통해 WordPress는 단순한 블로그 엔진 이상의 기능을 제공합니다. 그러나 하루 10k-> 100k 사용자가 WordPress 스케일을 얼마나 잘 사용하고 있습니까?

많은 사용자들에게 있어서는 캐시 전략을 잘 세우는 것이 중요하지만, WordPress가 얼마나 잘 개발할 수 있도록 개발 되었는가를 쉽게하고 필요한 컨트롤을 제공합니다. Fx는 페이지의 일부를 캐시하고 사용자 정의 된 부분 만 렌더링하고 마스터 / 슬레이브 DB 설정 등을 지원할 수 있습니까?

답변:


37

분명 아무것도 스케일뿐만 아니라 빠른 웹 서버에서 제공하는 정적 파일을 로드하고, 그것뿐만 아니라 수행하지 않습니다 워드 프레스하거나로드 할 알아낼 것이며 CMS. 문제 중 하나는 URL 요청 당 필요한 데이터베이스 쿼리의 수이며, 2 년 전 Drupal과 독점적으로 작업 한 경험이 있으며 WordPress에서 2 년 이상은 해당 부서에서 WordPress가 훨씬 더 우수하다는 것입니다.

즉, 어떤 권력을 가진 어떤 것도 "즉시" 확장 할 수 없다 . 그것에 대해 전부 당신의 확장 성 요구가 증가 당신이 무엇을 할 수 있는지?

"많은 트래픽" 의 저급 에는 훌륭한 캐싱 플러그인저렴한 CDN 과의 통합이 있으며 IT 예산이없고 예산이 적은 예산으로도 훌륭한 작업을 수행 할 수 있습니다. 검토 할 다른 질문과 답변은 다음과 같습니다.

성능 병목 현상을 식별하기 위한 프로파일 링 옵션이 있습니다 .

병목 현상이 확인되면 Transients API 와 같은 작업을 통해 현지화 된 최적화 를 수행 할 수 있습니다 . 이 Q & A는 Transients API를 사용하여 최적화 할 수있는 예제를 제공하고 다음을 보여줍니다.

큰 총꺼내고 싶다면 Memcached , HyperDB , Nginx 등을 구성 하여 속도를 높일 수 있습니다 (후자는 WordPress에서 놀라운 확장 성을 얻는 방법으로 실제로 진화하고있는 것처럼 보입니다).

그리고 마지막 으로 WP Engine , ZippyKid 등과 같은 성능을 전문으로하는 새로운 WordPress 중심 웹 호스트가 있습니다.

그래서 좋은 소식은 매우 잘 비늘의 모든이다 ; 트래픽이 크게 증가함에 따라 기술 복잡성 및 비용이 증가함에 따라 자유롭고 쉬운 것부터 시작합니다. WordPress로 작게 시작하면 좋을 것입니다. 트래픽이 증가하고 합리적으로 수익을 창출하는 경우 필요할 때 확장 할 수있는 비용 효과가 있습니다.

최소한 IMO. :)


이러한 철저한 대응에 감사드립니다. WordPress API가 어떻게 작동하여 페이지의 일부를 캐싱하는지 궁금합니다. 따라서 로그인 한 사용자의 경우 전체 페이지가 아닌 사용자 특정 부분 만 생성하거나 트래픽이 많은 사이트에 Edge Side Includes를 사용해야합니다.
googletorp

마이크, 당신은 짐승입니다! 이 사이트의 모든 곳에서 귀하의 답변을 발견하게되었으며 모두 훌륭합니다!
dgw

@googletorp : 분명히 할 수 있습니다. 수공예 코드가 필요합니다. 프레임 워크를 쉽게 개발할 수 있는지 확인하고 싶지만 현재는 강력하고 기능이 풍부한 사용자 지정 포스트 필드를 구현하는 데 중점을두고 있습니다. 아마 언젠가 :) @ Voyagerfan5761 : 감사합니다. :)
MikeSchinkel

kiragiannis.com/cloud-computing/… 대화에 메트릭스를 가져올 수 있습니다.
Geo

4
  1. 공유 호스팅을 많이 기대하지 마십시오. 공유 호스트에있을 때 WordPress가 느려지는 것을 비난하지 마십시오. 공유 호스트는 1000 개의 계정을 하나의 서버에 넣을 수 있습니다. 하루 종일 $ 10의 계정을 최적화하는 데 하루 종일 사용할 수 있으며 중요하지 않습니다. "구름"이라고해서 100 ~ 1000 명의 사람들과 하나의 서버를 공유하지 않는다는 의미는 아닙니다.

  2. 지금은 캐시 플러그인이 필요하지 않다고 생각합니다. WP 소스 코드를 보면 이미 코어에 구운 고급 캐싱이 있습니다. 캐시 캐시 캐시 캐시는 조심스럽지 만 역효과를 낳을 수 있습니다.

  3. 속도를 늦추는 가장 중요한 것은 MySQL 쿼리 속도가 느리고 WordPress가 기본적으로 문제를 일으키지 않아야한다는 것입니다. 그러나 댓글이 50,000 개 이상이므로 댓글 쿼리를 "제한"해야했습니다. (이것은 아직 수정 되었습니까?) 또한 비정형적인 작업 (예 : 1000 개의 범주?)을 수행하는 경우에도 문제가 될 수 있습니다.

  4. 나는 NginX와 함께 Linode 512를 사용하고 "top"은 PHP와 NginX가 요청 당 1/100 초 이내에 작업을 수행하는 것을 보여줍니다. 거의 모든 CPU 시간은 MySQL과 연결되어 있습니다. 한 달에 $ 20 Linode로 1 백만 페이지를 제공 할 수 있지만 일단 플러그인과 사진을 추가하기 시작하면 "1GB"Linode가 필요하다고 생각합니다. 내 관점에서 볼 때, 그것은 매우 선형 적입니다. 페이지 뷰가 두 배이면 Linode의 크기를 두 배로 늘리십시오.

면책 조항 : 나는 Linode에서 일하지 않습니다.


PHP로 페이지의 일부를 캐시하고 싶기 때문에 업데이트 (~ 2 년 후) 놀랍도록 빠른 간단한 솔루션이 있습니다. 1/100 초 안에 페이지 당 여러 개의 개별 부품 / 부분을 캐싱하고 있습니다. 램 디스크가 이것을 더 빨리 만들 수있는 것처럼 보이지만 내 필요에 따라 매우 빠릅니다.

$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file);  // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {

    // heavy lifting starts
    $output = 'Heavy!';
    // heavy lifting ends

    if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache    
    echo $output;

} else { 

    // load from cache
    $output = file_get_contents($cache_file); 
    echo $output;        
} 

0

궁극적으로 WordPress 속도를 늦추는 세 가지가 있으며 다음과 같이 요약됩니다.

  • 호스팅 스택-최신 소프트웨어를 갖춘 좋은 호스트가 필요합니다. PHP 7, Nginx, Varnish, Redis, fail2ban 및 PerconaDB는 모두 좋은 선택입니다
  • 테이블 스캔 없음-많은 플러그인은 테이블 스캔이 무엇인지 모르는 아마추어 코더가 작성합니다. 테이블 스캔을 피하려면 두 가지가 필요합니다. 사용 가능한 인덱스와 인덱스를 사용할 수있는 방식으로 작성된 쿼리
  • PHP 루프 안에 SQL 쿼리가 거의 또는 전혀 없습니다. 일부 플러그인 코드는 소규모 사이트에서만 테스트되었으며 어떤 이유로 든 데이터베이스의 모든 제품을 반복하고 각 제품 / 포스트에 대해 새로운 SQL 호출을 수행합니다. 페이지 당 100 개 미만의 SQL 쿼리를 원하는 것이 이상적입니다. 그러나 실제로는 그렇지 않으며 100 개 미만인 경우 캐시되지 않은 약 200ms의 TTFB를 얻게됩니다.

위의 내용을 모두 갖추면 바니시, CDN, 페이지 캐싱 등 캐싱을 추가 할 수 있습니다.

수평 확장이 필요한 경우 데이터베이스에 PerconaDB XtraDB를 사용하고 파일에 Unison을 사용하여 클러스터를 생성 할 수 있습니다. 이렇게하면 wp-admin 및 cron 러너로 하나의 노드를,로드 밸런서 뒤에서 웹 트래픽을 제공하는 다른 노드를 가질 수 있습니다.

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