2008-10-04 2 views
4

나는 서버로 apache httpd를, 백엔드로 mysql을 사용하는 웹 사이트를 가지고있다. 그것은 요청이 많아서 서버가 충돌하기 때문에 너무나 인기있는 "오늘의 생각"을 발표합니다. 동일한 페이지가 요청되었으므로 (생각은 하루에 한 번만 변경됨), 다른 클라이언트가 동일한 요청을하면 캐싱 서버가 페이지를 반환하도록 캐싱 서버를 주 서버 앞에 놓을 수 있습니까? 데이터베이스에 갈 필요없이?웹 사이트 앞에 캐싱 서버를 둘 수 있습니까?

답변

12

느리게 변경되는 페이지의 경우 캐시가 CPU 사용량을 확실히 줄입니다. 극단적 인 경우, 페이지가 하루에 한 번 바뀌고 완벽하게 예측할 수있는 경우 간단하고 빠른 정적 파일 서버 (lighthttp, nginx 등)와 cron 작업을 사용하여 " 하루 "매일 밤.

실제로 비대화 형 웹 페이지는 데이터베이스 또는 다른 소스에서 html 파일을 주기적으로 재 작성하고 간단하고 빠른 정적 웹 서버를 사용하여 많은 방법으로 수행 할 수 있습니다.

2

물론입니다. 이를 위해 잘 작동하는 많은 제품이 있습니다. 아파치 자체는 이런 식으로 작동하도록 구성 될 수 있습니다. 리눅스 나 유닉스에서 Squid를 사용하는 것이 더 나은 선택입니다.

Windows에서 MS는 항상이 기능을 수행 할 캐시/프록시 제품을 제공하고 있습니다. 현재 ISA Server 2006입니다.이 유형의 응용 프로그램에 대해서는 극적으로 과장되어 있지만.

Squid이 좋습니다.

2

예. 당신은 역방향 프록시 (또는 같은 일에 대해 부정확 한 용어 인 "http 가속기")에 대해 이야기하고 있습니다. 매우 일 수 있으며 매우 많은 높은 처리량 사이트에서이 기술을 사용합니다.

오른쪽으로 이동하는 핵심 요소는 캐싱 관련 HTTP 헤더입니다. 따라서 HTTP RFC (실제로 끝낼 수 있음)를 읽는 것이 좋습니다. 헤더를 올바르게 작성하지 않으면 개인화 된 페이지가 캐싱되어 잘못된 사람들에게 제공되는 경우 보안 효과가 거의 없거나 보안 문제가 발생할 수 있습니다.

또한 최상의 캐싱 효과를 얻으려면 페이지를 여러 부분으로 나누어야 할 수도 있습니다. 예 : 현재 서버 시간을 초 단위로 표시하는 페이지 구석에 시계가 있어야한다고 주장하면 전체 페이지가 1 초 동안 캐시 가능하게됩니다. 그래서 1) 어리석은 시계를 떨어 뜨리거나 2) 클라이언트 측 스크립트에 의해 생성되게하거나 3) 클라이언트 사이드 스크립트가 페이지의 특정 부분을 특수한 URL에서 끌어 와서 항상 작은 변화만을 출력하게하십시오 , 캐싱 할 수없는 HTML 조각.

나는 한때 대형 웹 사이트의 역 프록시로 Squid를 사용했습니다. 요즘 내가 다시 해보려한다면 Varnish을 시험해 볼 것입니다.

0

memcached을 사용해 볼 수도 있습니다. 그것이 우리 회사에서 사용하는 것이므로 LiveJournal도 그것을 사용한다고 생각합니다. 그것은 DB 요청을 캐싱하고 DB 액세스에 심각한 함몰을 만듭니다.

2

나는 가장 간단하고, 견고하며 유지하기 쉬운 Javier의 솔루션을 적극 추천합니다. 올바른 Expires 헤더를 24 시간 앞으로 보내고 ETags를 올바르게 설정하는 것을 잊지 마십시오.

1

당신의 "생각을 하루"페이지가 하루에 한 번을 제외하고 변경하지 않을 경우, 할 어쩌면 간단한 일이

wget을 http://your_site/your_page.php -O의/var/www /에서 your_site_directory/그 하루에 한 번 같이 일을 시작하는 것입니다 your_page.그런 다음

당신이 당신의 아파치 서버와 SQL 서버의 부하를 줄일 수 HTML

(your_page.php이 your_page.html하기에서 페이지 변경 링크) ...

0

나는 could't Javier's suggestion에 더 동의하십시오 (정적 웹 페이지 생성).

정적 파일을 ".php"가 아닌 ".html"로 저장하거나 DB에서 데이터를 가져 오는 데 사용되는 언어가 무엇이든 저장하십시오. 정적 파일을 사용하면 이 많으며 파서 또는 실행 파일을 시작하는 것보다 빠릅니다. 스크립트, CGI 및 다른 모든 것들이 시작되고, 파싱되고, 실행되고, 그 밖의 것이 무엇이든간에 정적 파일 (HTML, GIF, ...)은 네트워크에 연결됩니다 ... 실제보다 더 많은 서버 자원이 필요합니다. 정적 파일.

0

정적 파일의 오버 헤드는 단지 I/O입니다. 메모리에 캐시 된 객체는 훌륭하지만 여전히 객체를 관리하는 오버 헤드가 있으며 과도한 사용으로 인해 까다로운 작업이됩니다. 따라서 정적 파일의 편리함과 아름다움.

또 다른 이점은 웹 서버 스레드의 일부가 아닌 프로세스가 업데이트 및 유지 관리를 수행 할 수 있다는 것입니다. 서비스 잠금을 업데이트하면 웹 서버가 잠기지 않습니다.

관련 문제