2016-11-01 2 views
0

웹 서비스를 설계해야한다고 가정합니다. 간단하게하기 위해 LAMP (Linux-Apache-MySQL-PHP)을 사용한다고 가정합니다.규모에 맞게 서비스 설계. 필요한 서버 수

초당 사용자 요청 수는 정확히 N입니다. 요청은 기본적으로 데이터베이스에 대한 간단한 조작 CRUD이며 파일 업로드 또는 복잡한 계산이 필요하지 않습니다.

각 요청이 M ms를 실행하고 G Gb의 RAM을 갖는 서버에서 K 메가 비트의 메모리를 사용한다고 가정합니다.

필요한 서버는 몇 개입니까? 그냥 N * K/G일까요?

M의 적절한 값은 200ms입니다. K의 합리적인 가치는 무엇입니까?

이 질문에서 CPU 성능을 고려해야합니까?

추가 고려 사항?

답변

1

당신이하고있는 일은 봉투 근사를 뒷받침하는 좋은 방법이지만, 결코 당신의 생각을 당신의 서비스 확장을위한 확실한 가이드로 사용해서는 안됩니다. 만약 (책임을 예측할/O를 가비지 컬렉션, 외부 요소, 사용자 입력 등은 주변 I의 경우) 한 바와 같이

정확한 접근법이 수행하는 어떤 서비스가 일정한 행위의 종류를 나타내는 것 때문이다

확장 및 부하 테스트. 서비스를 작성한 후 서비스 테스트를 시작하고 서비스의 성능 특성을 기록하십시오. 올바르게 작동하는 경우 구성이 최대 인 지점 (CPU, 네트워크 처리량, 메모리 또는 디스크 I/O)에 도달해야합니다. 어느 한도를 초과하지 않고 한도에 도달하면 상위 종속성 (데이터베이스 등) 중 하나입니다.

피크에 도달하면 초당 처리 할 수있는 요청 수를 알려줍니다.

대부분의 경우 최대 성능이 지속되지 않음을 알 수 있습니다. 지속적인로드보다 초당 더 많은 요청을 처리 할 수있는 짧은 시간 동안 설정이 터질 수 있습니다. 단일 서버의 수를 얻을 후

, 당신은 두 가지 방법으로 변화를 시작할 수 있습니다 : 다른 하드웨어 구성 (당신은 메모리 바운드 인 경우 RAM을 추가로

  1. 테스트, 더 나은 CPU를 추가 CPU 바운드 등)

  2. 여러 서버에서 테스트. 서버를 추가하는 시작하고 서비스가 수평

당신이 서버를 추가로 이상적으로 서비스가 선형 적으로 확장해야 크기를 조절하는 방법을 볼 수 있지만 당신은 가능성이 성능 곡선이 직선없는 것을 발견 할 것이다.

숫자를 가져 와서 디자인을 조정하십시오. 헹구기. 반복.

대체 할 수있는 마법 수식이 없습니다.

+0

엔벨로프 근사값의 백분은 정확히 내가 달성하기를 원했던 것입니다. 나는 "정확히 초당 N 명의 사용자 요청"과 같은 것을 결코 볼 수 없다는 것을 이해합니다. 나는 주 변수와 그 근사값을 찾고 싶었다. – user1256821

+0

@ user1256821 그런 다음 K에 대해 적절한 값을 입력하고 다른 값에 대한 일부 기준 값을 사용합니다. 아파치는 메모리 관리 측면에서 매우 끔찍하다. 나의 경험에 의하면 요청 당 최대 30-50MB를 소비 할 수있다. 40MB라고 말하십시오. 사용 가능한 RAM이 4GB 인 경우 약 100 개의 동시 요청을 처리 할 수 ​​있습니다. 대기 시간이 200 밀리 초일 때 하나의 서버에서 초당 약 500 개의 요청을 제공합니다. 이게 니가 찾고 있던거야? –

+0

예, 제가 올바른 방향인지 확인하고 싶었습니다. 고맙습니다. – user1256821