2014-06-11 2 views
1

복잡한 상황이 여기에 있습니다!악의적 인 호스팅이 여러 번 발생하는 고 트래픽

지금 상황 : 우리는 그의 물건 만하고있는 메인 서버를 가지고 있습니다. 데이터가 1 ​​초마다 변경됩니다. 다른 웹 사이트와 공유하려면 웹 위젯 (html 데이터)이 필요합니다. 1 분마다 위젯을 새로 고쳐야합니다. 위젯 데이터가 매 초마다 변경됩니다. 다른 모든 웹 사이트 방문자는 해당 정보를 확인해야합니다. 우리는 그런 높은 트래픽을 처리 할 수 ​​없습니다. 서버는 온라인 24/7 필요하며 그들은 1 분마다 연결하지 않을 것입니다. 나는 한 달에 백만 번의 노출을 말하고 있습니다.

우리가 해결하고있는 해결책 : 몇 가지 호스팅 계획을 짜십시오. 모든 호스팅은 방문자에게 보여줄 HTML 데이터를 저장합니다. 모든 호스팅 계정이 1 분마다 기본 서버에 cronjob을 수행합니다. html을 가져와 다음 cronjob까지 저장할 수 있습니다. 메인 서버에서 다른 곳으로 트래픽을 이동시키는 방법은 무엇입니까? 이제는 웹 사이트 방문자가 호스팅에 저장된 HTML에 연결하는 부분입니다. 코드 다운은 첫 번째 호스팅 서버와 연결됩니다. 응답하지 않으면 두 번째 one.And 루프에 연결하고 일부는 HTML 데이터를 반환합니다. 물론 100 %로드되면 다른 새로운 호스팅을 받게됩니다.

<script> 
server_1 = 'http://hostingserver_one.com/'; 
server_2 = 'http://hostingserver_two.com/'; 

wait_for_response = 5000; 
one_minute = 60 * 1000; 
half_minute = 30 * 1000; 
right_away = 1; 

current_refresh_minute = one_minute; 
current_refresh_server = server_1; 

function ajaxRequestInfo() { 
    $.ajax({ 
     type: 'GET', 
     url: current_refresh_server, 
     timeout: wait_for_response, 
     data: {}, 
     success: function(data) { 
      $(".data_for_refresh").html(data); 
     }, 
     complete: function(data) { 
      window.setTimeout(ajaxRequestInfo, one_minute); 
     }, 
     error: function() { 
      changeRefreshServer(); 
      window.setTimeout(ajaxRequestInfo, right_away); 
     }, 
     async: true 
    }); 
} 

function changeRefreshServer() { 
    if (current_refresh_server == server_1) { 
     current_refresh_server = server_2; 
    } else if (current_refresh_server == server_2) { 
     current_refresh_server = server_3; 
    } else if (current_refresh_server == server_3) { 
     current_refresh_server = server_1; 
    } 
} 

$(document).ready(function() { 
    ajaxRequestInfo(); 
}); 

질문 : 이 가장 좋은 방법은 수행되어야인가요?! 더 좋을 수 없다면. 많은 사람들이 이미 그 상황을 통과했지만 처음입니다.

+0

누구든지!! 여기에 몇 가지 해결책을 제시하십시오. 스케줄에서이 작업을 끝내는 것이 중요합니다. –

+0

아마존 AWS 또는 Azure에서 단순히 CDN을 사용하지 않는 것이 어떻습니까? – Moo

답변

3

html 파일로 약 1 백만 개가 나에게 이상하게 보인다고하면 ofc를보다 정확하게 처리 할 수 ​​있습니다. 당신이 관여 할 필요

두 가지

부하가를 제공 할 수있는 하나 개의 웹 서버보다 더 많은 메모리를 사용 및 균형이다.

귀하의 계정이 부하가 많은 경우 부하가 너무 많아서 단일 서버의 속도가 느려지는 대신 다른 서버로 가야한다는 것을 의미합니다. 는 단일 서버에서 여러 응용 프로그램을 호스팅 할 경우, 다른 한편으로는 나는 이 ProxyPass로 만드는 서버의 표준 워드 프레스를 설치, 서버가 기본적으로

를 제공 할 수있는 더 많은 메모리를 필요로합니다. 그런 다음 사이트를 구성하고 확장 프로그램과 템플릿을 설치했습니다. 나는이 서버에서 SQL DB를 구성했다. 우리의 경우 프록시이기도하지만 서버 나 Xeround와 같은 외부 데이터베이스 서비스에서 격리하는 것이 이상적이다. 내 워드 프레스, 아파치, mysql 및 memcached 구성에서 항상 내부 서버를 지정합니다. iWeb의 모든 서버가 인 경우 스마트 서버입니다. 이렇게하면 공용 네트워크의 트래픽이 제거됩니다. 그것은 설정을 훨씬 안전하게합니다.

난 당신이 더 많은 아이디어 Here

ultraking이를 찾을 수 있습니다 여기를 읽어 S/당신은 당신이에 의해 서버를하려고 여러 HTML 파일이있는 경우, 지금

관여 할 필요 승 서버를 사용하여 사용자의 특정 파일을 찾습니다. 하지만 모든 서버에서 찾을 수는 없습니다. 대신 서버가 그래서 지금 시나리오는 사용자가 될 것이다 정보를 포함하는에 관한 정보가됩니다 한 JSON 객체 을> 웹 사이트 안타 파일> fileter에 대한 >> 사용자의 요청 (각 서버에 대한 정보 객체를 포함) json 객체> uniquer를 누르십시오.

이렇게하면 서버 트래픽이 감소합니다.감사합니다

[편집] 모든 사용자를 처리하기위한 일을 계획 전략에 따라

그것. 전략과 올바른 도구 선택이 벤치 마크에 있지 않은 경우 단일 사용자를 처리 할 수 ​​없습니다.

0

아키텍처가 이상하게 보입니다. 클라이언트 (웹 사이트 방문자)가 서버간에 "로드 균형"을 가져서는 안됩니다. 이것은 그들의 관심사가 아니며 최악의 경우 서버 측에서 훨씬 더 나은 작업을 수행하지 못합니다. 어쨌든 연결을 생성하여 일부로드를 생성하려고하기 때문에 서버 측에서 더 나은 작업을 수행 할 수 없습니다.

(HTML) 컨텐츠를 제공하는 웹 서버 배열 앞에로드 균형 조정을 사용해야합니다.

웹 서버는 공유 캐시를 사용하여 "데이터/메인"서버와 격리시켜야합니다. 예를 들어 Memcached를 참조하십시오.

Stackoverflow 답변에 세부 사항에 도달하기가 어렵습니다. 또한 당신이 인용 한 숫자는 나에게 극적으로 높은 것으로 보이지는 않습니다. 그리고 캐싱이 적절히 설정된 적당한 크기의 서버가 최소한이 값에 쉽게 대처할 수 있어야한다는 느낌을 갖습니다.

+0

문제는 클라이언트가 업무에 많은 자금을 가지고 있지 않다는 것입니다. 우리는 새로운 서버를 얻는 것을 생각하지만 일단 수익을 올리면됩니다. 지금 가장 싼 변종은 로컬 호스팅 계획을 (더 빠른 연결을 위해) 얻고 새로운 서버를 얻을 때까지 사용하는 것입니다. 사용자의 부하 평형에 어리석은 짓을하지만 우리는 하드웨어와 연결이 전혀 다릅니다. 사용자 휴식 시간을 건너 뛰는 것은 그리 큰 일이 아닙니다. 아이디어는 현재 어떤 식 으로든 작동하는 것입니다. –

+0

나는 여기서 돈에 대한 논쟁을 잘 모르겠다. OVH라고하면 몇 분 동안 도메인 이름을 구입하면 무료로 DNS Round-Robin을 얻을 수 있습니다. 무료로드 균형 조정. 또한 그대로로드에서 작동하지 않습니다. 모든 요청은 server1로 이동합니다. 곧 server1로 이동합니다. 곧 과부하가 걸리고 시간이 초과되어 server2로 이동합니다. 제한 시간이 너무 낮게 설정되면 요청이 완료되지 않습니다. 너무 높게 설정하면 클라이언트 측에서 1 분이 넘을 것입니다. –

0

한 달에 백만 명이 나쁘지 않습니다. 클라이언트와 직접 연결하여 데이터를 가져 오더라도 처리 할 수 ​​있습니다. 외부 위젯을 호스트하고 자바 스크립트 xmlHttpRequest를 사용하여 주 서버에서 작은 텍스트 파일을 다운로드 한 다음 사용자 친화적 인 디자인으로 씹으십시오. 비교해 보면 내 서버는 매월 6 백만 GET 히트를 기록합니다. 각각의 평균 크기는 15kB입니다. 그것은 당신이 필요로하는 것보다 훨씬 더 많습니다. 놀랍습니다. 서버의이 "짐승"은 내 테이블 아래에있는 SOHO DD-WRT 라우터입니다. :)

편집 : 당신은 여전히 ​​on-the-fly gzip을 사용하여 관리 할 수 ​​있습니다. 그게 당신이 할 것을 제안하는 100 바이트 이하의 출력에 의미가있는 것은 아닙니다.

0

1 백만 번의 노출은 많은 트래픽처럼 들릴 수 있지만 실제로 대부분의 웹 서버는 번 정상적으로 상황에서 이와 같은 부하를 처리 할 수 ​​있습니다. 공유 서버 또는 VPS를 사용하는 경우 1 백만 명이 너무 많이로드 될 수 있음을 이해할 수 있다면이 경우 자신의 VPS 사양을 늘리거나 전용 호스팅을 조사해야합니다. 느려지는 코드/데이터베이스 등의 스케일링 문제가있을 수도 있습니다.

당신의 접근 방식에는 아무런 문제가 없지만 더 나은 설정으로 더 잘 해결할 수 있습니다. 두 서버 경로를 가고 싶다면 Moo가 AWS와 같은 탄력적 인 리소스로 클라우드에서로드 밸런싱과 호스팅을 조사해야합니다. 올바른 서버에 트래픽을 보내기 위해 클라이언트 쪽 자바 스크립트 코드에 의존하는 대신 예를 들어 Azure.

관련 문제