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


113

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

관련 :

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

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

답변:


127

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

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

간단한 한 페이지 정적 웹 사이트는 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 서버에 직접 연결 하십시오 .


1
이는로드 테스트에는 우수하지만 용량 계획에 대해서는 거의 언급하지 않습니다. 초기에 고안된 Google의 확장 가능한 아키텍처 또는 더 적고 값 비싼 박스를 사용하는 대안에 대해 쓸 수있는 사람.
rleir

10

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

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

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

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


8

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

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

부담없이...

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

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


5

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 서버를 조정 하려면 시간이 걸리고 제대로 작동하려면 경험이 필요합니다.


1
상단에만 기반을 둔 메모리 사용량에 약간의 결함이 있습니다. fe stackoverflow.com/questions/7880784 / ... 추가로 메모리 사용량에 대해 상단 대신 Python 스크립트 "ps_mem.py"를 사용하거나 직접 첨부 된 값을 사용할 수도 있습니다. / proc
Dennis Nolte

1
"답변에없는 아파치 설정을 절대 사용해서는 안된다"는 메모로 인해 전체 답이 가치가있다. 우리는 이것을 충분히 강조 할 수 없습니다.
ezra-s 2012

0

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

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