웹 애플리케이션을 확장하는 방법은 무엇입니까?

웹 애플리케이션을 확장하는 방법은 무엇입니까?

저는 주로 웹 애플리케이션 개발자이고 확장성/확장성 기술에 대해 잘 모릅니다. 내 애플리케이션은 Django를 사용하여 Python으로 작성되었습니다. 상당히 표준적인 설정입니다.

저는 현재 웹 서버에 Apache 2.2를 사용하고 데이터베이스 서버에 MySQL을 사용하고 있습니다. 둘 다 동일한 VPS에서 실행됩니다.

지금까지는 기본적으로 프로토타입이었고 특정 시간에 동시 사용자가 15~30명에 불과했습니다. 그래서 문제가 없었지만 이제 더 많은 사용자를 추가하게 되므로 성능 문제가 발생하게 됩니다.

그래서 제 질문은 웹 애플리케이션을 확장하려면 어떻게 해야 합니까?입니다. 나의 현재 계획은 다음과 같습니다.

  1. 이제 하나의 vps 서버(apache + MySQL)만 실행 중입니다.
  2. 다음으로 MySQL만 실행하기 위해 또 다른 vps 서버를 추가할 계획이므로 웹 서버와 DB 서버가 하나씩 있게 됩니다.
  3. 다음으로, 데이터 캐싱을 위해 웹 서버에 Memcache를 추가하여 MySQL의 부하를 어느 정도 완화하겠습니다.
  4. 다음으로 모든 정적 콘텐츠를 제공하는 또 다른 웹 서버입니다.
  5. 다음으로 로드 밸런싱을 위한 VPS 서버(nginx/varnish) 뒤에는 두 개의 웹 서버와 db 서버가 있습니다.

실행 가능한 전략처럼 들리나요? 여기로 안내해 주세요.

답변1

첫 번째 병목 지점이 어디인지 아십니까? 그렇지 않다면 해야 할 일의 순서를 어떻게 정했나요?

즉, 앱에서 심각한 잘못된 작업을 수행하지 않은 경우 가장 먼저 직면하게 될 한계는 db로 인한 디스크 I/O가 될 것이며 귀하의 전략은 아마도 좋은 선택일 것입니다.

DB를 다른 물리적 디스크로 옮기는 것은 많은 도움이 될 것이며 가장 먼저 해야 할 일입니다. 예를 들어, 사용 중인 시스템에 따라 현재 호스트에서 두 번째 디스크를 사용하는 것과 완전히 분리된 서버로 이동하는 것 사이에는 차이가 없거나 큰 차이가 있을 수 있습니다. VPS에서 실행 중입니다. 디스크 I/O 바운드인 경우 두 번째 VPS로 이동하면 동일한 스토리지(동일 디스크 또는 동일한 SAN 등)를 사용하는 경우 아마도 큰 도움이 되지 않을 것입니다. 하지만 이 마지막 것은 vps 제공업체가 해결해야 하는 문제입니다.

답변2

나는 독서를 권하고 싶다확장 가능한 인터넷 아키텍처테오 슐로스나글(Theo Schlossnagle) 지음. 이 책에서는 서버 간 애플리케이션 확장, 단일 장애 지점 방지, 데이터베이스 확장 등에 대한 모든 이론과 실제를 설명합니다.

하지만 귀하의 계획은 확장의 첫 번째 진행처럼 들립니다. 일반적으로 모든 것이 하나의 서버에서 시작된 다음 웹과 데이터베이스를 분할한 다음 역방향 프록시 또는 로드 밸런서를 추가하고 여러 웹 서버를 실행하는 등의 작업을 수행합니다.

답변3

측정하지 않는 것은 개선할 수 없습니다. 먼저 병목 현상이 무엇인지 확인해야 합니다. 지금 atop을 사용할 수 있으며, 아직 설정하지 않은 경우 일종의 모니터링을 설정할 수 있습니다. 모든 것이 잘 실행되고 있다면 JMeter를 사용하여 현실적인 로드를 생성할 수 있습니다.

다음은 Django 앱을 기반으로 구축하기 위한 인프라에 대한 몇 가지 추가 관점입니다.

관련 정보