드루팔 부트 스트랩 캐싱


10

누군가 Drupal에서 부트 스트랩 프로세스를 "캐시"하려고했는지 궁금합니다.

일반적으로 Drupal은 각 요청마다 7 개의 부트 스트랩 단계를 실행하지만 배포 된 프로덕션 시스템에서이 중 일부 또는 전부를 "제거"할 수 있습니까?

내가 생각한 가능한 제안은

  1. 부트 스트랩 상태를 직렬화하여 memcache에 고정
  2. 스크립트는 특정 정보를 파일에 하드 코딩하는 bootstrap.inc에 대한 패치를 생성 할 수 있습니다.
  3. David Strauss 가 libevent에서 부트 스트랩 된 Drupal을 계속 실행하려고 했다고 생각 합니다.
  4. 다른 광기?

어떤 시도가 있으며 어떤 것이 신뢰할만한 것으로 알려져 있습니까?


이것은 어떻게 든 Drupal 컴파일에 관한 내 질문과 관련이 있습니다. drupal.stackexchange.com/q/11738/2916
Refineo

답변:


12

PHP는 아무 것도 공유하지 않는 아키텍처입니다. 그것은 장점과 단점이 있습니다.

한 가지 단점은 이와 같은 것을하기가 쉽지 않다는 것입니다. 어딘가에 저장할 수있는 상태가별로 없습니다.

나는 몇 가지 빠른 테스트를했고 로그인 할 때 boostrap은 총 시간의 약 17 %를 차지하고 그 중 50 % 이상이 실제로 모든 .module 및 .inc 파일을로드하는 것 같습니다. 그것은 당신이 memcache에 저장할 수있는 것이 아닙니다. 또한 memcache 또는 데이터베이스 캐시를 사용하면별로 중요하지 않습니다.

페이지 캐시를 활성화 할 때 몇 가지 결과를 얻으려고했지만 Xhprof는 신뢰할 수있는 결과를 반환하지 않는 것 같습니다. 모든 것이 단순히 너무 빠르다. 그러나 그럼에도 불구하고 가장 큰 부분은 init / exit 훅을 실행하고 파일을로드하는 것입니다. 흥미로운 문제가 있습니다. 사용자 모듈이 .module 파일의 엔터티 컨트롤러로 인해 레지스트리를 트리거하기 때문에 캐시 된 페이지 응답이 심각하게 느려지는 것처럼 보입니다.

즉, David Strauss는 코펜하겐에서 부트 스트랩 후 메모리 스냅 샷을 생성 한 다음 페이지가 제공되면 다시 돌아 오는 실험적 작업을 보여주었습니다. 그는 Drupal 6을 사용했습니다. 위의 숫자를 살펴본 후 Drupal 7 에서이 작업을 수행하면 성능이 약간 더 작아 질 것이라고 생각합니다. 이것의 한 가지 이유는 데이터베이스 연결이 느리게로드되고 (예를 들어 첫 번째 쿼리를 실행하기 전에 Memcache를 사용할 때 부트 스트랩에 상당히 많이 도달 할 수 있음) 캐시 된 것이 많이 있기 때문입니다.

무엇 정말 드루팔 7 나쁜 것은이 거대한 배열과 무한 재귀 및 루프와 레이어를 렌더링입니다. 그것은 Drupal 7에 들어간 모든 성능 작업을 거의 취소합니다. Twig가 핵심으로 만들면 Drupal 8에서 어떻게 보이는지 봅시다.

마지막으로 언급 된 장점에 대해. 하나의 큰 장점은 메모리 리크는 각각의 요청 후에 모든 것이 해제되기 때문에 관련이 없다는 것입니다. 메모리 사용량이 지속적으로 증가하고 정기적으로 다시 시작 해야하는 많은 Java 응용 프로그램을 보았습니다.


4
나는 그래서 사이트 @Berdir에 당신을 좋아하는데)
Letharion

Alex Bronstein은 스프린트 중에 APC에서도 tpl.php 파일을 포함하는 것이 다소 느리다고 언급했지만 통계가 필요하지만 Twig는 클래스로 컴파일되므로 노드 + 많은 주석과 같은 페이지에서 승리합니다. 우리는 볼 것이다.

캐시 된 페이지에 대해 많은 재 작성 규칙을 생성하고 .htaccess에 넣고 html 페이지와 함께 PHP를 완전히 우회하는 시스템을 만들 수 있다고 생각합니다. IIS, nginx, 로그인 한 사용자, ...
Bart

1
@Bart : 부스트를 재발 명 했습니다 : drupal.org/project/boost :)
Berdir

5

아니, https://code.launchpad.net/~fourkitchens/pressflow/6-evented 에서 kargo-event (현재 Kellner라고 함)를 실험하는 것은 David Strauss였습니다 .

Drupal 7 에는 이미 캐시 된 많은 부트 스트랩 cache_bootstrap이 있습니다. 빈이 있습니다. memcached에 붙일 수 있습니다.

Damup과 dhthwy는 http://drupal.org/project/drupal_php_ext 에서 PHP 확장을 만들었습니다. 많은 / 많은 Drupal 코드를 C로 옮기면 코드 로딩을 ​​줄일 수 있습니다 . 또는 힙합을하십시오. 힙합 및 Drupal 7의 현재 상태를 모르겠습니다.

그러나 하루가 끝나면 Drupal 7 (및 모든 contrib!)과 힙합 작업을하는 데 필요한 엔지니어링 비용을 잘 살펴보고 몇 대의 서버를 임대하는 것과 비교해야합니다. 서버의 5 %를 구할 수 있고 서버가 10 만 대라면 저장할 수 있다면 Facebook입니까? 최적화에주의하고 경제적입니다.


감사합니다. 질문을 업데이트하고 이름을 삭제했습니다. :) 많은 경우 성능을 처리하는 훨씬 더 효율적인 방법이 있다는 것을 알고, 나는 대부분 호기심이 많았습니다.
Letharion

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