트래픽이 많은 상황에서 Magento 보호

트래픽이 많은 상황에서 Magento 보호

안녕하세요. 저는 PHP(magento) 스크립트가 포함된 Apache 서버 2.2를 사용하고 있습니다.

일반적으로 PHP 페이지는 1~2초 안에 렌더링됩니다. 이는 괜찮습니다.

때때로 트래픽이 많거나 조잡한 스파이더 봇에서는 모든 Apache-Slot이 차단됩니다.

단일 요청은 매우 느리게 실행되며 mysql이 oom-killer를 호출하여 필요한 Tomcat을 죽일 때까지 점점 더 많은 메모리를 사용합니다.

먼저 mod_evasive를 시도했습니다. 하지만 너무 엄격하게 구성하면 빠르게 탐색할 수 없고, 너무 느슨하게 구성하면 요청이 더 빨리 처리될 수 있습니다.

문제는 php 파일입니다. 이미지 등과 같은 다른 리소스는 슬롯을 방해하지 않습니다.

두 번째로 MaxClients를 낮춰 제한하려고 했습니다. 그러나 이제 하나의 클라이언트가 모든 슬롯을 방해할 수 있습니다.

클라이언트 당 최대 연결을 제한하는 방법이나 IP 당 더 나은 최대 동시 PHP 스크립트를 제한하는 방법에 대한 아이디어가 있습니까?

클라이언트를 선호하지 않고 처리할 수 있는 것보다 더 많은 요청을 방지하도록 다른 Apache 클라이언트는 어떻게 구성되어 있습니까?

답변1

귀하의 사이트를 오리진 풀 CDN(클라우드플레어하나의 옵션으로 떠오르지만 다른 옵션도 있습니다.)

일반적으로 PHP 페이지는 1~2초 안에 렌더링됩니다. 이는 괜찮습니다.

아니요, 그렇지 않습니다.

최대 시간이 걸리지 않도록 코드를 최적화하세요.페이지를 생성하는 데 초가 소요됩니다.

그런 다음 캐시모두것들.

  • 캐시 페이지 요청광택
  • Memcached를 사용한 캐시 데이터베이스 조회.
  • CDN에 이미지를 캐시합니다.
  • APC 또는 eAccelerator(또는 유사한 opcode 캐시)를 사용하여 PHP 레벨 캐시
  • 그 문제에 대해서도 CDN의 전체 페이지를 캐시하십시오.

아직 수행하지 않았다면 데이터베이스 서버를 별도의 서버로 분리하고, 엄청난 양의 메모리와 초고속 디스크를 제공한 다음, 테이블에서 캐시를 캐시하세요. Magento는 조인 등에 관한 한 걸레이므로 데이터베이스 서버가 고통스러울 정도로 빨라야 합니다.

사용자가 귀하의 사이트를 볼 때 콘텐츠가 캐시에서 꺼내지도록어딘가에그리고 생성될 필요도 없습니다.모든시간.


나는 귀하의 사이트에 대해 Yslow를 자유롭게 실행했습니다. 다음은 결과를 요약한 것입니다(물론 이 작업은 직접 수행해야 합니다..).

  1. HTTP 요청 수를 줄이세요. 기본적으로 자바스크립트와 CSS 파일을 하나로 결합하여 여러 요청을 해야 하는 오버헤드를 줄여야 합니다.
  2. CDN(콘텐츠 전송 네트워크)을 사용하세요. 이미 말씀드렸지만 ^^위에서^^그런데 Yslow가 그러더군요.60CDN에 없는 정적 구성 요소. 이 중 1.4MB는 www.brainyoo.de에서 제공됩니다. 나를 생각하게 만드는 것은..
  3. 자산을 쿠키가 없는 여러 도메인으로 이동하세요.60개의 자산이 사이트의 나머지 부분과 동일한 도메인에서 로드되고 있습니다. 즉, 브라우저는 다음 항목을 로드하기 전에 각 항목이 로드될 때까지 기다려야 합니다. 이 문제를 해결하는 일반적인 방법은 쿠키가 없는 별도의 도메인에 정적 자산을 배치하는 것입니다(요청이 더 작고 빠르며 쿠키 정보를 포함하지 않도록).
  4. Javascript를 문서 하단으로 이동합니다. 확장 가능하고 빠른 웹사이트를 위한 모범 사례로 간주됩니다.
  5. Javascript와 CSS를 축소합니다. 진지하게. 거의 메가바이트에 달하는 JS 및 CSS를 전송하고 있는데, 이를 축소하고...
  6. Gzip으로 구성 요소를 압축합니다.gzip으로 압축할 수 있는 일반 텍스트 구성 요소는 39개입니다.
  7. 만료 헤더를 추가합니다. 만료 날짜가 먼 63개의 정적 파일이 있으므로 브라우저에서 효과적으로 캐시되지 않습니다.

총 YSlow 등급 D. 귀하의 문제가 전적으로 서버 측에 있는 것은 아니지만, 조금만 조작하면 YSlow 등급을 높일 수 있는지 궁금해지기 시작했습니다. 그렇게 하면 a) Apache 서버에서 제공되는 트래픽이 줄어듭니다. b) 로드 속도가 더 빠르므로 방문자가 Apache 프로세스를 오랫동안 잠그지 않습니다.

답변2

일반적으로 magento가 느리게 실행되거나 서버가 가끔씩 종료되는 경우 서버는 더 많은 RAM/CPU 전력을 사용하여 더 잘 실행될 것입니다. 마젠토를 원활하게 실행하도록 서버를 조정할 수 있지만 a) 시간이 좀 걸리고 b) 필요한(서버 측) 리소스가 필요합니다.

DB튜닝 얼마나 하셨나요? magento는 PITA이지만 RAM이 충분하면 빠르게 구성할 수 있습니다.

같은 도구를 사용mysql_tuner또는MySQL 튜닝 입문서DB를 조정합니다.

그리고 최대한 많은 캐시를 사용하세요. APC가 지원되는지 기억이 나지 않습니다. 멤캐시가 더 좋습니다.

또한 다양한 이유가 있을 수 있는 매우 나쁜 HD 성능에 대한 힌트인 IOWAIT를 계속 주시해야 합니다.


편집하다:

클라이언트를 선호하지 않고 처리할 수 있는 것보다 더 많은 요청을 방지하도록 다른 Apache 클라이언트는 어떻게 구성되어 있습니까? / 다른 아파치들이 처리할 수 있는 것보다 더 많은 요청을 받았을 때 상황을 어떻게 처리하는지 알고 싶습니다.

일반적으로 예상 트래픽에 따라 설정을 확장합니다. 스파이더와 크롤러가 공격할 때 서버가 다운된다면 성능이 매우 나쁜 스크립트가 있거나 서버가 너무 작은 것입니다.

내 서버에 1000명의 사용자가 있을 것으로 예상되면 5000명의 클라이언트를 처리할 수 있는 서버를 사용합니다(그리고 max_clients에 도달한 경우 error.log를 모니터링합니다).

속도 제한이 가능하지만 mod_evasive와 동일한 경험을 하게 됩니다. DDOS와 같은 용어에서는 정말 도움이 되지만 설정을 조정해야 하는 경우에는 도움이 되지 않습니다.

관련 정보