하루에 250,000번의 적중을 허용하는 PHP/Apache2/MySQL용 서버 구성이요?

하루에 250,000번의 적중을 허용하는 PHP/Apache2/MySQL용 서버 구성이요?

누구든지 구성을 추천할 수 있습니까? 아니면 이 웹 설정에 대한 전체 사례 연구를 알려줄 수 있습니까?

기본적으로 우리는 하루에 약 100,000번의 조회수를 기록하는 PHP 사이트를 가지고 있습니다. CPU 용량에 도달하여 VPS에서 이 로드를 제공하려고 할 때 이미 연결 시간 초과 등이 발생합니다. 하루에 약 250,000회 조회까지 확장할 수 있는 사양을 지정하고 싶습니다.

현재 서버는 다음과 같습니다.

  • 단일 코어 1Ghz 버스트 가능 VPS(2.6Ghz 듀얼 코어 Xeon에서)
  • 2GB 버스트 가능 RAM(역시 버스트 가능 여부가 매우 모호함)
  • PHP 프로세스당 32MB, 표현식 엔진 실행(내가 아는 한) 또는 이와 유사한 무거운 것
  • 이미지 집약적인 그래픽 페이지
  • 제3자 서버에 대한 xmlrpc와 같은 일부 페이지에서 가끔 비하인드 스토리 작업이 수행됩니다.
  • modphp가 포함된 일반 아파치(따라서 이미지와 같은 정적 파일에도 전체 PHP 프로세스가 필요합니다. 지금은 변경할 수 없습니다)

지금까지 CPU가 주요 병목 현상인 것으로 보이며 일부 Apache 프로세스는 요청 중에 약 30%의 CPU를 사용합니다. 일부 다른 아파치 프로세스는 단 1%의 CPU만으로도 훨씬 좋아 보입니다. 나는 이것이 정적 파일에 대한 요청이라고 가정합니다.

그래서. 우리는 VPS에서 벗어나 버스트가 아닌(측정 가능하고 보장된) 성능을 갖춘 일종의 전용 또는 가상 전용 상자로 이동하고 싶습니다. 현재 트래픽을 처리할 수 있어야 하며 앞으로는 적어도 두 배 이상 증가할 수 있어야 합니다.

나에게 알려줄 수 있는 권장 사항이나 연구 결과가 있습니까?

Apache 프로세스당 메모리, 동적 요청 비율, PHP 코드가 무거운 CMS인지 가벼운 hello-world인지 등과 같은 매개변수를 기반으로 추정된 서버 사양을 제공할 수 있는 도구가 있습니까?

답변1

애플리케이션의 복잡성에 따라 성능이 항상 엄청나게 달라지기 때문에 이 문제에 대한 유용한 사례 연구가 있는지 의심됩니다. 적합성에 가까워지는 유일한 방법은 측정하고 추정하는 것입니다.

OS에 대해서는 언급하지 않았지만 스레드, CPU 로드, 메모리 통계, 디스크 및 네트워크 데이터 등을 캡처하는 일련의 성능 모니터를 설정했습니다. 또한 처리 중인 적중 횟수도 캡처하도록 했습니다. 여기에서 실제 확인된 로드를 기반으로 이러한 모든 구성 요소에 대한 최소, 평균 및 최대 리소스 사용량을 결정할 수 있어야 합니다. 일단 이러한 통계(mhz/10k-users, mem/10k-users 등)가 있으면 다음을 수행할 수 있어야 합니다. 필요한 성능을 신속하게 추정할 수 있습니다. 최대 예상 부하에 있는 경우에도 약 20%의 추가 헤드룸을 계획해야 합니다.

스프레드시트 작업이 많다는 것은 알지만 이것이 자신감을 가질 수 있는 유일한 방법입니다. 문제에는 항상 '문제에 엄청난 양의 하드웨어를 던지는' 방법도 있지만 비용이 많이 듭니다 :)

행운을 빌어요. 나중에 이해하는 데 도움이 필요하면 일부 데이터를 가지고 다시 오세요.

답변2

Apache 앞에 프록시 모드로 nginx를 추가하고 Apache를 건드리지 않고 실제로 정적 데이터 서버로 설정하면 됩니다. 당신은 즉각적인 속도 향상을 당할 것입니다.

그런 다음 apache2를 4-16명의 자녀가 있는 사전 포크 모드로 전환합니다.

외부 연결과 같은 백그라운드 작업은 정말 아프기 때문에 이러한 작업을 비동기식으로 만들기 위해 해당 코드를 다시 작성하겠습니다.

마지막으로, 마스터 노드(즉, 모든 VPS를 보유한 서버)의 대역폭이 부족할 수 있습니다. 마스터 노드에 1Gbit 연결이 있는지 호스팅 회사에 문의하고, 100Mbit에 불과하다면 호스팅을 변경하는 것이 좋습니다.

관련 정보