웹 사이트에 대한로드 테스트 및 용량 계획을 어떻게 수행합니까? 이것은 웹 사이트의 용량

이것은 웹 사이트의 용량 계획에 대한 정식 질문 입니다.

관련 :

웹 사이트 및 웹 응용 프로그램에 권장되는 용량 계획 도구 및 방법에는 어떤 것이 있습니까?

웹 서버, 프레임 워크 등에 대한 다양한 도구와 기술은 물론 일반적인 웹 서버에 적용되는 모범 사례를 자유롭게 설명하십시오.



답변

짧은 대답은 : 당신 외에는 아무도이 질문에 대답 할 수 없습니다.

긴 대답은 특정 워크로드를 벤치마킹하는 것은 “얼마나 긴 문자열입니까?”

간단한 한 페이지 정적 웹 사이트는 Pentium Pro 150에서 호스팅 될 수 있으며 매일 수천 번의 노출을 제공합니다.

이 질문에 대답하기 위해 취해야 할 기본 접근 방식은 시도 하고 어떤 일이 일어나는지 보는 것입니다. 시스템의 인위적인 위치를 인공적으로 압박하는 데 사용할 수있는 도구가 많이 있습니다.

이에 대한 간략한 개요는 다음과 같습니다.

  • 시나리오를 제자리에 놓으십시오
  • 모니터링 추가
  • 트래픽 추가
  • 결과 평가
  • 결과에 따라 치료
  • 린스, 합리적으로 행복해질 때까지 반복

시나리오를 제자리에 놓으십시오

기본적으로로드를 테스트하려면 테스트 할 것이 필요합니다. 테스트 할 환경을 설정하십시오. 가능한 경우 프로덕션 하드웨어에 상당히 가까운 추측이어야합니다. 그렇지 않으면 데이터를 추정 할 수 있습니다.

서버, 계정, 웹 사이트, 대역폭 등을 설정하십시오. VM에서이 작업을 수행하더라도 결과를 조정할 준비가되어있는 한 괜찮습니다.

그래서 중형 가상 머신 (코어 2 개, 512MB RAM, 4GB HDD)을 설정하고 VM의 Red Hat Linuxhaproxy 내부에 내가 좋아하는로드 밸런서를 설치 합니다.

또한로드 밸런서 뒤에 스트레스 테스트에 사용할 두 개의 웹 서버가로드 밸런서 뒤에 있습니다. 이 두 웹 서버는 실제 시스템과 동일하게 설정됩니다.

모니터링 추가

모니터링 할 메트릭이 필요하므로 웹 서버에 전송되는 요청 수와 사용자가 2 초 이상 응답 시간을 받기 전에 초당 요청 수를 측정 할 것입니다.

또한 haproxy로드 밸런서가 연결을 처리 할 수 ​​있도록 인스턴스의 RAM, CPU 및 디스크 사용량을 모니터링 합니다.

이 작업을 수행하는 방법은 플랫폼에 따라 다르며이 답변의 범위를 벗어납니다. 웹 서버 로그 파일을 검토하거나 성능 카운터를 시작하거나 스트레스 테스트 도구의보고 기능에 의존해야합니다.

항상 모니터링하고 싶은 몇 가지 사항 :

  • CPU 사용량
  • RAM 사용량
  • 디스크 사용량
  • 디스크 대기 시간
  • 네트워크 활용

테스트 할 대상에 따라 SQL 교착 상태, 탐색 시간 등을 선택하도록 선택할 수도 있습니다.

트래픽 추가

이곳은 재미있는 일입니다. 이제 테스트로드를 시뮬레이션해야합니다. 있습니다 도구의 많은 구성 옵션을 사용하여이 작업을 수행 할 수 있습니다 :

숫자 나 숫자를 선택하십시오. 시스템이 1 분에 10,000 번의 적중으로 응답하는 방식을 보겠다고 가정 해 봅시다. 이 단계를 여러 번 반복하여이 숫자를 위 또는 아래로 조정하여 시스템이 어떻게 반응하는지 확인하기 때문에 어떤 숫자를 선택하든 중요하지 않습니다.

이상적으로는 단일 클라이언트가 요청의 병목 현상이되지 않도록 여러로드 테스트 클라이언트 / 노드에 10,000 개의 요청을 배포해야합니다. 예를 들어, JMeter의 원격 테스트 는 제어 Jmeter 시스템에서 여러 클라이언트를 시작할 수있는 중앙 인터페이스를 제공합니다.

매직 이동 버튼을 누르고 웹 서버가 녹아 다운되는 것을보십시오.

결과 평가

이제 2 단계에서 수집 한 메트릭으로 되돌아 가야합니다. 10,000 개의 동시 연결로 haproxy상자가 거의 땀을 흘리지 않지만 두 대의 웹 서버를 사용한 응답 시간은 5 초 동안 터치합니다. 시원하지 않습니다. 응답 시간이 2 초를 목표로합니다. 따라서 몇 가지 사항을 변경해야합니다.

치료

이제 웹 사이트 속도를 두 배 이상 높여야합니다. 따라서 수평 확장 또는 수평 확장이 필요하다는 것을 알고 있습니다.

확장하려면 더 큰 웹 서버, 더 많은 RAM, 더 빠른 디스크를 확보하십시오.

수평 확장하려면 더 많은 서버를 확보하십시오.

이 결정을하려면 2 단계의 메트릭과 테스트를 사용하십시오. 예를 들어, 테스트 중 디스크 대기 시간이 엄청나다는 것을 알게되면 확장하고 더 빠른 하드 드라이브를 확보해야합니다.

테스트 중에 프로세서가 100 %에 도달 한 것으로 보이면 웹 서버를 추가하여 기존 서버의 부담을 줄이기 위해 확장해야 할 수도 있습니다.

일반적인 옳고 그름의 대답은 없으며 자신에게 맞는 것만 있습니다. 스케일 업을 시도하고 작동하지 않으면 대신 스케일 아웃하십시오. 아니면, 그것은 당신과 상자 밖에서 어떤 생각에 달려 있습니다.

우리가 확장 할 것이라고 가정 해 봅시다. 그래서 두 개의 웹 서버 (VM)를 복제하기로 결정했으며 이제 네 개의 웹 서버가 있습니다.

헹구고 반복

3 단계부터 다시 시작하십시오. 예를 들어 웹 서버를 두 배로 늘 렸지만 응답 시간이 2 초 이상인 경우와 같이 예상대로 진행되지 않는 경우 다른 병목 현상을 살펴보십시오. 예를 들어, 웹 서버를 두 배로 늘 렸지만 여전히 crappy 데이터베이스 서버가 있습니다. 또는 더 많은 VM을 복제했지만 동일한 물리적 호스트에 있기 때문에 서버 리소스에 대한 경합이 더 높아졌습니다.

그런 다음이 절차를 사용하여 시스템의 다른 부분을 테스트 할 수 있습니다. 로드 밸런서를 치는 대신 웹 벤치마킹 또는 SQL 벤치마킹 도구를 사용하여 SQL 서버에 직접 연결 하십시오 .


답변

용량 계획은 측정 (이 경우 응답 시간과 부하)으로 시작합니다. 선형 함수가 아닌로드에 따라 프로그램이 느려지는 정도를 알면 응답 시간 목표를 선택한 다음 주어진 양의로드에 대해 해당 목표를 충족시키는 데 어떤 자원이 필요한지 발견 할 수 있습니다.

성능 측정은 항상 시간 단위로 수행 됩니다.

  • 그들은 사용자가 관심을 갖는 것입니다
  • 그들은 확대 및 축소가 가능합니다

% CPU 및 IOPS와 같은 것은 시스템마다 다르므로 시스템을 계획하고 사전 프로덕션에서 측정 한 경우에만 관심 대상인 시간에 대한 “대리”역할을하기 위해 시스템을 사용합니다.


답변

용량 계획은 까다로운 짐승입니다. 그것은 예술만큼 과학적입니다 (어두운 것이 분명하다면).

가장 좋은 경우는 잘 판단에 참고가되는 정보 제공 할 것입니다 행운이 현실이 당신의 가정을 충족함으로써 당신을 선호 / 행운을. 당신의 능력이 필요로하는 가정이 현실과 일치한다면, 당신은 신비한 요기처럼 보입니다. 불행히도, 당신의 가정이 현실을 넘어 서면, 당신은 지나친 지출을 한 것으로 보입니다. 더 불행하게도, 귀하의 가정이 최종 현실보다 낮거나 (또는 ​​그렇지 않으면 틀린 경우) 필요한 용량이 부족하고, 신음 인프라의 장애를 완화하기 위해 혼란을 겪게되어 역량이 부족한 것처럼 보입니다.

부담없이…

불행히도, 용량 계획의 어두운 기술은 단일 서버 결함 답변으로 합리적으로 추출 될 수있는 것 이상입니다. 실제로, 그것은 책의 가치가있는 주제입니다.

다행히, 이런 책이있다 : ” 용량 계획의 예술


답변

Mark Henderson의 게시물을 확장하기 위해 Apache 전용으로 작성하고 있습니다. 그가 한 말을 되풀이해서 “짧은 대답은 : 당신 외에는 아무도이 질문에 대답 할 수 없습니다.” 이 답변의 텍스트는 Drupal 웹 사이트의 성능에 대한 비슷한 질문에 대한 나의 답변에서 크게 차용 되었습니다 .

Mod_Prefork를 사용하여 Apache 구성

아파치 는 아마도 가장 인기있는 웹 서버 중 하나 일 것입니다. 오픈 소스이며 여전히 활발하게 유지됩니다. Linux 및 Windows 운영 체제 모두에서 실행할 수 있지만 Linux / Unix 세계에서 더 널리 사용됩니다.

즉시 사용 가능한 Apache 구성을 사용 해서는 안됩니다 . 항상 사이트에 맞게 Apache를 조정해야합니다. CentOS 의 기본 Apache 구성 파일은에 있으며 /etc/httpd/conf/httpd.confUbuntu 시스템의 기본 Apache 구성 파일은 일반적으로에 있습니다 /etc/apache2/apache2.conf. 추가 설정 파일은 가상 호스트 와 같은 것들에 사용됩니다 .

많은 소프트웨어와 마찬가지로 Apache는 특정 웹 사이트의 요구에 따라 유연하고 사용자 정의되도록 제작되었습니다. 네트워크 포트에 바인딩하고 요청을 수락 및 처리하기 위해 Apache를 구성 할 수있는 다양한 다중 처리 모듈 이 있습니다.

CentOS 및 Ubuntu 서버와 함께 제공되는 기본 Apache 설치에서는 대부분 MPM ” mod_prefork “가 사용됩니다. mod_prefork를 사용한다고 가정합니다 (확실하지 않은 경우 더 가능성이 높지만 결정할 수 있습니다). 구성 방법의 기본 사항은 다음과 같습니다.

  • Apache가 사용할 수있는 최대 메모리 양을 파악하십시오.
  • 웹 사이트를 많이 테스트하고 각 Apache 프로세스가 사용하는 메모리 양을 결정하십시오 (맨 위 사용).
  • 가장 많은 메모리를 사용하는 Apache 프로세스를 맨 위에 가져 와서 적절한 측정을 위해 조금 추가 한 다음 첫 번째 숫자 (Apache에서 사용할 최대 메모리 양)를이 새 숫자로 나눕니다.
  • 당신이 얻는 숫자는 MaxClients& ServerLimit변수 이어야 합니다.

이것은 확실히 최종 답변이 아닙니다. Apache 서버를 조정 하려면 시간이 걸리고 제대로 작동하려면 경험이 필요합니다.


답변

또한 병목 현상, 단일 장애 지점 및 라이센스 제한 사항을 식별하기 위해 응용 프로그램을 설계 / 빌드 한 설계자 및 엔지니어에게 문의하는 것이 좋습니다.


답변