2009-06-16 4 views
6

모두가 어떻게 다음 성격의 질문에 접근하는지 궁금합니다.X 사용자/트랜잭션을 지원하는 데 필요한 하드웨어를 추정하는 방법은 무엇입니까?

'응용 프로그램 A (예 : 전자 상거래 사이트)를 만들어야합니다. 기술 B (예 : java)를 사용합니다. C (예 : 200) 동시 사용자 수를 지원해야합니다. 어떤 종류의 하드웨어가 필요합니까? '

하드웨어 사양에는 필요한 CPU 수와 기본 응답을위한 메모리 양이 포함됩니다.

예제를 단순화하기 위해 Java 기술을 제 질문에 사용 하겠지만 실제로 기술 중립적 인 조언이 필요합니다.

이러한 질문에는 많은 추가 요소가 포함된다는 사실을 알고 있습니다. 예를 들어 Wicket vs Struts vs Spring, pure EJB J2EE 아키텍처, 분산 티어 수 (하나의 상자 설정 또는 3 단계 설정).

그러나 주어진 기술에 대한 사전 경험이 없거나 (요구 된 하드웨어가 무엇인지 찾아내는로드 테스트를 수행 할 수있는 기회가 없을 수도 있음), 이러한 질문은 초기 프로젝트 토론 중에 항상 발생합니다 (그리고 대답은 앞으로 나아 가기위한 기초로서 필수적입니다.) 어떻게 대답을 주시겠습니까?

나는 각 사용자 세션이 취할 수있는 메모리의 양을 예측함으로써 메모리 요구 문제를 해결할 생각을했지만 프레임 워크/가상 머신 오버 헤드가 분명히있을 것입니다.

하지만 일반적으로 나는 항상 튀어 오르는듯한이 질문에 대한 좋은 해결책을 추론하는 것처럼 보이지 않습니다. 로드 테스트를 통해 문제를 해결할 수는 있지만 그 시점까지는 프로젝트가 이미 준비되어 있으며 클라이언트가 프로젝트에 커밋하기 전에 답을 얻고 자하는 질문입니다.

지역 사회가이 문제에 대한 좋은 접근 방법을 조언 할 수 있기를 바랍니다.

감사합니다.

답변

3

동시 사용자의 초기로드 테스트를 거치지 않은 사용자 경험에 대한 가정을 실제로해야합니다. 사용자 세션에 대한 몇 가지 가정으로 시작하십시오.

  • 각 사용자가 새 페이지를 명중 또는 5 초마다 (AJAXy 가정)
  • 각 요청의 평균 소요 자원 : 괜찮은 야구장 가정 (이 복잡성 또는 사이트의 단순성에 따라 보유하지 않을 수 있습니다) 될 수있다 처리 할 200ms.
  • 일반적으로 스파이크를 허용하는 용량의 25 % 인 스파이크가 더 커질 수있는 소셜 네트워크 사이트의 경우 평균 사용량을 갖는 것이 좋습니다.

그런 다음 당신은 말할 것입니다 :

200 사용자 (200 밀리의 /의 5 초) => 8 개의 CPU 평균 필요 * 4 (25 % 부하) => 32 개 CPU를.

나는 이것이 특히 언어 중심이라고 생각하지 않습니다. 기억은 비싸지 않고 충분합니다.

1

개인적으로이 문제에 대한 일반적인 해결책이 있다는 것을 알리는 사람은 누구나 거짓말 쟁이라고 생각합니다. 하드웨어 공급 업체라면 특히 그렇습니다.

예상로드와 비슷한로드를 기반으로 추정 할 수 있습니다. 실제로드가 실제로 예상과 같은 "유사한"로드와 유사하지 않기 때문에 나중에 실수로 된 것을 알게됩니다.

바라건대, 당신은 그걸 배우고 다음에 더 좋은 견적을 내리게됩니다.

1

솔직히 샘플로드 테스트를 수행하지 않는 것이 합리적입니다. 하드웨어 (메모리 아키텍처, CPU 수, 디스크 아키텍처), 소프트웨어 (구현 세부 사항, 운영 체제, 가상 시스템 (있는 경우), 데이터베이스 시스템 등), 환경 (네트워크, 냉각) 및 기타.

이것은 기본적으로 성능 테스트의 특수한 응용 프로그램입니다. 주제에 가장 현명한 사람들은 당신이 숫자를 얻을 필요가 있다는 것을 반복적으로 그리고 명백하게 진술했습니다. 그래서 제가 드릴 수있는 최선의 조언은 가능한 초기 단계에서 프로토 타입을 작성해야 할 필요가 있다는 것입니다. 그래야 숫자가 으로 바뀌어 시간이 지남에 따라 변경 될 수 있으므로 모든 체크 포인트에서 프로토 타입 또는 작동 버전을 프로젝트 일정대로 모두 다시 테스트하십시오.

귀하의 초기 추정치는 최종 숫자와 거의 유사하지 않을 수 있지만 수정 일정에 시간이 남아 있지 않다는 것을 깨닫기 위해 최소한 중요한 시점에 필요에 따라 수정할 수 있습니다.

0

하드웨어 요구 사항을 정량화하는 방법을 묻습니다.

그러나 나는 다른 관점에서 접근 할 것입니다. 응용 프로그램을 수평 확장 할 수 있도록 디자인하십시오 (모든 계층에 대해). 거기에서 하드웨어의 반복 # 1을 배포하십시오. 그것에 대한 공개 베타 테스트를 실행하십시오. 실생활 번호를 수집하십시오. 또한 성능 메트릭을 충족하도록 시스템을 재구성하십시오. 반복.

0

필요한 하드웨어는 사용자 수나 트랜잭션로드에 의해 관리되는 것보다 소프트웨어의 복잡성과 품질에 더 많은 영향을받습니다. 달리 주장하는 유일한 사람들은 하드웨어 공급 업체입니다.

관련 문제