it-swarm-ko.tech

스케일링 및 튜닝 성능에 대한 실제 경험

내가 일하고있는 웹 사이트는 출시 후 곧 큰 타격률 을 가질 것으로 추정됩니다 . 클라이언트는 하루에 약 2500 건의 적중 가능성에 대해 이야기하고 있습니다.

이 적중률이 실제 클라이언트 낙관적 일 수 있으며 가능한 최대 서버를 얻는 것 외에는 Drupal이 큰 적중률을 지원하도록 구성되어야하는 가장 좋은 방법은 무엇입니까?.

drupal.org Infrastructure , Drupal performance blog , Scaling Drupal에 대한 모범 사례 및 기타 여러 페이지의 스케일링을 읽었지만 찾고있는 것은이 작업의 실제 경험, 작동하는 것, 작동하지 않는 것, 예상되는 것입니다.

52
Richard Harrison

Markdorison의 답변은 기본적 으로이 문제를 공격하는 데 허용되는 방법입니다. 조금 더 가져 가겠습니다.

D6의 경우 Pressflow 또는 D7의 경우 Drupal, Memcached 및 Varnish 모두 잘 작동하면- VCL 파일 시작 지점을 만들 수있는 무료 파일이 있지만 항상 재생해야합니다.

니스가 최적으로 작동하게하려면 기본값 -s file/path/to/file이 아니라 -s malloc xG로 시작하십시오. 또한 Varnish를 사용하면 가능한 한 Varnish가 정적 항목을 캐시합니다.

웹 서버가 둘 이상인 경우 VCL의 Varnish로 전송 된 헤더에서 ETag를 제거하십시오. 또한 Expires를 제거하고 헤더의 Age 및 Max-age에 의존하므로 브라우저를 사이트로 다시 가져옵니다.

버전 1.5 (2011 년 3 월 3 일 현재)는 Drupal.org의 여전히 가장 빠른 Memcached 모듈 버전입니다. 일반적으로 서버 당 단일 저장소를 사용하여 배포하여 대규모로 여러 저장소에 연결하기위한 TCP 트래픽을 줄입니다)

"성능"의 캐싱을 외부로 구성하고 올바른 헤더를 Varnish와 같은 캐싱 프록시로 보낼 최대 보존 기간을 설정하십시오.

니스에서 특정 페이지를 제대로 캐시 할 수없는 경우 요청을 검사하는 방법을 자세히 설명하는 웹의 블로그 게시물을 확인하십시오. 다음은 내가 쓴 글의 예입니다. Bnish 및 중지 Drupal 익명 사용자 페이지 뷰를 캐싱하는 Pressflow)

MySQL에 대해 InnoDB (또는 XtraDB와 같은 다른 공급자의 다른 이름 중 하나)를 선택하고 모든 테이블을 여기로 이동해야합니다. 그런 다음이 블로그 게시물에서 기본적인 튜닝 조언을 확인하십시오 http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

큰 버퍼 풀을 갖는 것이 기본적으로 중요합니다. 사이트를로드 테스트 할 때 느린 쿼리 로그를 켭니다. 처음에는 50msec보다 오래 걸리는 쿼리를 캡처 한 다음 쿼리를 조정하고 대부분의 쿼리가 인덱스를 사용하여 실행되고 상당히 빠르게 실행될 때까지 느린 로그 캡처 시간을 반복적으로 줄이려고합니다.

다른 기본 사항에는 PHP의 경우 APC 이 포함됩니다. mod_php 대신 빠른 CGI를 원한다면 좋은 래퍼 스크립트를 구성하여 PHP 인스턴스에서 APC 캐시를 공유하도록 시간을 보내십시오. 또한 APC 캐시가 메모리 맵 파일에 있는지 확인하여 PHP에서 마지막 비트를 압축하십시오.

45
Stewart Robinson

Pressflow (Drupal 6을 사용하는 경우), Memcache , Varnish 및 일부 형식으로 시작하는 것이 좋습니다. Akamai와 같은 CDN (Content Distribution Network)의 결과 최종 사용자가 실제로 Origin 서버를 방문한 사용자는 적어야합니다.

익명이 아닌 사용자를 위해 캐시 할 수없는 페이지의 일부 (해당 사용자에 해당하는 것, "환영 인 userX"등)가있는 경우 비동기와 같은 이러한 페이지 조각을 채우는 옵션을 탐색 할 수 있습니다. 콜백 또는 엣지 사이드 포함.

캐시되지 않은 사이트 버전을 볼 수 있어야하는 더 작은 내부 사용자 그룹 (예 : 편집자 그룹)이있는 경우 캐시되지 않은 버전의 사이트를 다른 URL (VPN 뒤에서 보호)에 노출하는 것이 좋습니다 또는 가능하다면 이에 상응하는 것).

22
markdorison

하루에 2,500 만 건이 발생합니다. "적중"이란 "게재 된 페이지 수"를 의미하면 하루에 2 억 1 천 2 백만 페이지입니다. 당신이 하루에 2 억 1 천 6 백만 페이지를 가지고 있지 않습니다. 나는이 고객들을 사랑합니다 ...

즉, 원시 트래픽 데이터는 아무 말도하지 않습니다. 익명의 트래픽이지만 트래픽에 로그인 한 경우이 스레드의 조언이 Varnish/CDN에 대해 적절하지만 트래픽에 로그인 한 경우 문제가 있습니다. 그러나 문제를 해결하기 위해 불경건 한 시간과 노력을 쏟기 전에 have 문제를 확인하십시오. 초당 2,500 개의 명중, 빙은 그것보다 적습니다.

15
user49
  • 서버 측

    • 익명 사용자를위한 페이지 캐싱을위한 니스를 설치하십시오.
    • 영구 캐시 시스템 (Memcached, APC, Memcache)을 설치하십시오.
    • 정적 파일 (JavaScript, CSS, 이미지)을 제공하려면 Akamai와 같은 CDN을 사용하십시오.
  • 코드 측

    • Pressflow를 사용하면 니스가 익명 사용자에게 캐시 된 페이지를 제공 할 수 있습니다.
    • Drupal의 감시 테이블을 청소하십시오. 워치 독 오류가 기록 될 때마다 웹 서버 및 데이터베이스 서버의 CPU 리소스가 사용됩니다. 또한로드 시간이 크게 증가합니다.
    • 느린 쿼리 로그가 깨끗해질 때까지 정적 및 영구 캐시 전략을 구현합니다.
    • 모든 비용으로 중첩 된 foreach 루프 내에서 발생하는 PHP 오류를 피하십시오.
    • 사용하지 않는 모듈을 제거하십시오.
    • Drupal 코어 블록 및 뷰에 대한 캐싱을 설정하십시오.
  • 데이터베이스

    • 빠른 검색을 위해 테이블이 올바르게 색인화되어 있는지 확인하십시오.
    • 불필요한 레코드를 저장하지 마십시오. 100 개의 노드 데이터베이스는 항상 3 백만 개의 노드 데이터베이스보다 빠르게 액세스됩니다.
6
amateur barista

또한 일주일 동안 트래픽이 급증하도록 Grammys.com 웹 사이트를 설정하는 방법에 대한이 Lullabot 팟 캐스트를 들었습니다. 꽤 교육적인 설명이었습니다.

http://www.lullabot.com/podcasts/podcast-92-grammycom

5
Randy Burgess

트래픽이 많은 웹 사이트의 경우 여러 서버와로드 밸런서를 사용하거나 단순히 CDN을 사용해야합니다. 또한 웹 서버의로드를 최소화하기 위해 가능한 한 많이 캐시하는 것이 중요합니다.

Content Delivery Network ( CDN )를 사용하면 여러 도메인 (도메인 샤딩)에 리소스를 분산시켜 웹 서버의 부하를 줄일 수 있습니다.

CDN을 사용하면 분산 캐싱 및 원격 가속을 지원하고 여러 엔드 포인트로 인해 DDoS 공격 을 완화 할 수 있습니다. 캐시 된 콘텐츠는 악용하기가 더 어렵 기 때문에 보안에 도움이됩니다.

공급자 예 : Fastly , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon.

다음은 몇 가지 제안입니다.

  • CDN을 사용하는 경우 정적 구성 요소를 캐시하려면 쿠키리스 도메인 을 사용하십시오 (예 : sstatic.net ). 일부 프록시는 쿠키로 요청 된 구성 요소의 캐시를 거부 할 수 있습니다.
  • 캐시를 지운 후 캐시를 예열하십시오 (wget, Cache Warmer , Drush ECL 사용).
  • 성능 모니터링을 사용하십시오 (예 : New Relic 또는 Yottaa Drupal과 통합되어 있음).
  • 웹 사이트 (예 : Nagios)에 모니터링 도구를 사용하십시오.
  • Varnish 및 Varnish HTTP Accelerator Integration 모듈 을 설치 한 다음 configure it 을 설치하십시오.
  • Varnish + Authcache :이 Authcache의 VCL 예 Varnish 구성 파일을 확인하십시오.
  • 니스 앞에 Pound 또는 NGINX 를 고려하십시오. 파운드가 왜 바니쉬 앞에서 대단한가 .
  • NGINX는 리버스 프록시 및로드 밸런서로 작동 할 수 있으므로 파운드 및 광택을 대체 할 수 있습니다.
  • "커뮤니티"오픈 소스 버전에서 사용할 수없는 기능을 활용하려면 상용 버전의 Varnish 또는 NGINX를 고려하십시오.
  • 니스와 파운드를 대체하기 위해 하드웨어로드 밸런서/캐싱을 고려하십시오 (예 : BIG-IP F5 ).
  • 웹 응용 프로그램의 TTFB ,로드 및 스트레스 테스트에 ab, JMeter와 같은 도구를 사용하십시오.

따라서 사용자 관점의 웹 아키텍처는 다음과 같습니다.

  1. 사용자 (로컬 브라우저 캐싱).
  2. NGINX 또는 Pound + Varnish (로드 밸런서, HTTP 가속기의 역방향 프록시).
  3. 아파치 (웹 서버).
  4. PHP-FPM (PHP FastCGI 프로세스 관리자).
  5. MariaDB (데이터베이스).

Drupal 최적화 제안에 대해 다음을 확인하십시오. Drupal 성능을 어떻게 개선합니까?

3
kenorb

트래픽 수준에 대한 공정한 아이디어가 있다면 패턴을 예측하기가 매우 어렵습니다. 솔루션을로드 테스트하십시오. 다양한 옵션의 호스트가 있으며 실시간 트래픽이 생길 때까지 예측할 수는 없지만, 가능한 한 많이로드 테스트를 수행하면 설정에서 트래픽을 처리 할 수 ​​있다는 상당한 수준의 확신을 갖게됩니다.

먼저 테스트하지 않으면 세계의 모든 튜닝이 도움이되지 않습니다.

이것은 경제학자가 그것을 어떻게했는지에 대해 DC SF)에서 발표 한 것입니다. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online- 사용하여 분쇄기

3
Jeremy French

또한 DNS 기반 또는 소프트웨어/하드웨어로드 밸런싱 솔루션을 활용하여 여러 서버에로드를 재분배하는 것도 검사 할 수 있습니다. 이것은 또한 내결함성에서도 구울 수 있습니다.

0
James Stallings

다음 두 가지 확장을 활성화하십시오.

  • 젠드 OP 캐시
  • 윈 캐시

당신의 성과는 더 잘 작동합니다.

Microsoft Azure에서 twig Zend OPcache 및 Wincache를 찾으려면 먼저 'D:\home\site\'아래에 폴더 이름 'ini'을 만드십시오. '.user.ini'및 'settings.ini'파일 2 개 생성

각 파일에 다음 구성을 추가하십시오.

. user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

또한 keyPHP_INI_SCAN_DIRvalued:\home\site\ini를 사용하여 웹 설정에 앱 설정을 추가하십시오.

PHP_INI_SYSTEM 변경 후 웹 앱을 다시 시작하십시오. 나뭇 가지 구성에 대한 자세한 내용을 보려면 Microsoft documentation 를 확인하십시오.

위 설정 후 3 초 이내에 my Drupal (Drupal 8.3) 사이트로드).

0
npcoder