웹 사이트를 제공하기 위해 여러 서버를 사용할 때의 속도 단점은 무엇입니까?

웹 사이트를 제공하기 위해 여러 서버를 사용할 때의 속도 단점은 무엇입니까?

이러한 질문에 대답하기 어렵다는 것을 알고 있습니다. :) 하지만 서비스를 여러 서버로 분리하는 것이 미치는 영향에 대한 아이디어를 얻고 싶습니다.

특히 저는 미디어 서버(정적 파일을 제공하는 아파치), 앱 서버(PHP 파일을 처리하는 아파치), 마스터 DB 서버 및 슬레이브 DB 서버를 갖춘 웹사이트를 설정하고 있습니다.

미디어 서버와 앱 서버 모두에서 공유 풀로 memcached를 실행하려고 했는데 그렇게 하는 데 시간과 리소스 측면에서 비용이 많이 드는지 궁금합니다. 분명히 memcached 호출이 (앱 서버에서) 요청될 때마다 미디어 서버에 tcp 연결을 설정하고 결과가 어디에 있는지 알아낸 다음 반환해야 합니다.

이와 같은 소규모 웹사이트 설정의 경우 서버 간에 memcached를 풀링하지 않고 앱 서버에서 램을 늘리는 것이 더 낫습니까? 아니면 그 차이가 너무 작아서 걱정할 가치가 없나요?

예제로 memcached를 사용했지만 동일한 시나리오가 다른 서비스(예: db)에 적용될 수 있으므로 답변이 상당히 일반적으로 유지되는 것이 좋습니다.

답변1

작은 웹사이트라면 이 수준의 최적화는 과잉이라고 생각합니다.

하지만 확실히 알아낼 수 있는 한 가지 방법이 있습니다.테스트해 보세요.

우리는 사용했습니다WCAT과거에는 이런 질문에 답하기 위해 노력했습니다. 다양한 부하에서 사이트가 어떻게 작동하는지 확인하는 데 유용한 도구입니다.JMeter이와 같은 작업을 위한 또 다른 훌륭한 도구입니다.

예를 들어 WCAT를 사용하여 웹 앱 VM(이 경우 Fogbugz)과 별도로 DB VM을 호스팅하기 위해 별도의 Hyper-V 서버를 확보하기로 결정했습니다. 테스트 결과, 동시 사용자 수가 적은 경우에도 DB VM을 앱 VM과 동일한 시스템에 두면 애플리케이션을 사용할 수 없게 되는 것으로 나타났습니다(CPU가 병목 현상임).

답변2

더 나은 답변을 얻으려면 몇 가지 질문에 대한 답변이 필요합니다.

  • 단일 웹사이트인가요?
  • 집약적인 리소스(과중한 서버 측 프로그래밍, 스트리밍 비디오 등)를 사용하고 있습니까?
  • 비디오, DB, php/.net만 사용하고 계십니까?
  • 서버 사양은 얼마나 됩니까?
  • 하드 드라이브의 속도는 얼마이며 RAID 구성에 있습니까?
  • 프로세서는 몇 개입니까?
  • RAM은 얼마나 되나요?
  • 100MB 또는 1000GB NIC와 스위치를 실행하고 있습니까?
  • 업스트림 속도는 얼마입니까?
  • 귀하의 OS는 간소화되고 최적화되어 있습니까?

답변3

정보가 거의 충분하지 않아 정확할 가능성이 있는 답변을 제공하며 실제로 일부 테스트/벤치마크를 실행하는 것이 올바른 답변을 얻고 있는지 확인할 수 있는 유일한 방법입니다.

귀하가 설명한 바에 따르면 풀링을 사용하면 개별 요청의 대기 시간이 늘어나지만 문제가 발생하기 전에 처리할 수 있는 총 로드도 늘어난다는 것이 최선의 추측입니다.

그러나 이것이 개별 요청의 대기 시간을 증가시킬 수 있다고 의심된다는 것은 네트워크 설정에 따라 1밀리초에서 수십 밀리초 사이의 시간을 의미합니다. 귀하의 사이트가 충분히 바쁜 경우에는 두 배의 캐시로 더 적은 수의 DB 호출을 수행하는 속도 이점이 훨씬 더 큽니다. 미디어 서버와 앱 서버의 하드웨어가 거의 동일한 경우 앱 서버의 CPU 사용량이 많고 미디어 서버의 CPU가 상당히 유휴 상태일 가능성이 높습니다. 앱 서버가 아닌 미디어 서버.

최적화를 확인하는 유일한 방법은 테스트하는 것입니다. 테스트, 벤치마크, 프로필 등. 테스트하지 않으면 성능이 향상되는지 악화되는지 결코 알 수 없습니다. 현실적인 사용자 조합으로 엔드투엔드 테스트(즉, 실제 웹 클라이언트가 파일에 대해 모든 요청을 하는 시뮬레이션된 웹 클라이언트)를 실행합니다(그래서 캐시 적중과 누락의 올바른 혼합을 얻습니다). 로드되고 "우리는 방금 슬래시 도트를 얻었습니다" 로드됩니다. 쉽게 반복할 수 있도록 테스트를 자동화하세요. 두 서버/모든 서버, 한 서버에서만, 다른 서버에서만 memcached로 테스트하고, 한 서버에 다른 서버보다 RAM이 더 많은 등...

관련 정보