2010-05-31 2 views
23

많은 양의 트래픽이 발생할 응용 프로그램을 만들 계획입니다. (제발 내가 교통 체증을 일으키지 않겠다고 말하지 마세요, 이것은 내부 네트워크를위한 것입니다. 따라서 교통 체증이있을 것입니다. '너는 그 많은 교통 체증을 피하기 위해 노력하지 마라. 걱정하지 마라.)확장이 필요한 웹 사이트를 만들려면 어떻게해야합니까?

내가 예상하는 트래픽 유형은 사용자가 동적으로 생성 한 여러 가지 (사용자 계정 세부 정보를 기반으로)를 탐색합니다. 해당 사이트에서 사용자는 텍스트 입력을 제출할 수 있습니다. 페이지를로드하고 사용자 입력을 처리하면 데이터베이스가 손상됩니다. 로드는 분명히 읽기가되지만 입력을 처리하려면 두 읽기 모두가 필요합니다. & 씁니다. 입력 내용은 다른 사용자보기에도 영향을 줄 수 있습니다. 이 경우 다른 사용자에게 페이지를 새로 고침해야 함을 알려야합니다.

많은 양의 사용자가 부담을 느끼지 않도록하기 위해 어떤 종류의 작업을 수행해야합니까?

제한 요소는 무엇입니까? 데이터베이스 물건? 프런트 엔드가있는 I/O?

전에 심각한 웹 응용 프로그램을 개발 한 적이 없으며 도움을 찾고 있습니다.

편집 : 나는 그것을 조금 사용했기 때문에 Erlang을 백엔드로 사용할 것을 고려하고 있었고 모든 동시성 작업을 정말 좋아했습니다. 이것이 실용적인 선택이 될 수 있을까요, 아니면 좀 더 전통적으로 시도해야합니까?

+5

http://highscalability.com/을 참조하십시오. - 매우 흥미로운 기사를 정확히보십시오. 특히 실생활의 경우와 설명 (간략 임에도 불구하고)은 낭독하기가 쉽지 않습니다. –

+1

기대하고있는 트래픽 유형을 상세히 설명하십시오. 대용량 파일 업로드/다운로드가 있습니까? 대화식이 될 것인가? 해당 네트워크의 주요 앱 중 하나입니까? 아니면 하루에 몇 번씩 정적 페이지를 클릭하여 볼 수 있습니까? – stagas

+0

ServerFault, methinks에 속해 있습니다. –

답변

17

이것은 매우 중요한 주제이며 시간이 허용하는 한 많은 연구를하고 싶을 것입니다. 고려해야 할 몇 가지 큰 주제가 있습니다.

  1. 세션 상태 저장. 분명히 세션 저장 장치는 메모리 또는 디스크 공간을 차지합니다. 세션 정보를 웹 팜에서 사용할 수있는 방식으로 적절하게 저장하는 전략이 필요합니다.

  2. 캐싱. 강력한 캐싱 전략은로드를 크게 줄일 수 있습니다. 언제, 어디서, 어디서 캐싱해야하는지에 대한 많은 연구를하십시오.

  3. 확장 성 및 부하 테스트. 여분의 생각은 각각의 리소스 페치 작업에 들어가서 필요한만큼 몇 번 완료되었는지 확인해야합니다. 로드 테스팅과 코드 프로파일 링은 훌륭한 툴을 사용할 경우 여기에서 병목 현상을 식별하는 데 도움이 될 수 있습니다.

  4. 데이터베이스 최적화. 분당 수천 (수백만 건)의 작업을 위해 데이터베이스를 올바르게 최적화하는 방법을 알고 있어야합니다. 응용 프로그램이 쓰기가 많은 경우, 쓰기 조작 속도를 높이기 위해 더 이상 색인에 포함 할 필요가없는 이전 데이터를웨어 하우스 화해야 할 수도 있습니다.

  5. 업그레이드 경로. 시간이 지남에 따라 트래픽이 증가하고 있습니까? 필요한 경우, 필요한 경우 서버 및 메모리를 응용 프로그램에 어떻게 추가 할 것인지 이해해야합니다.

많은 배당액을 투자하면 큰 배당금을 지불 할 수 있습니다. 아마존이나 챕터에서 "확장 가능한 웹 응용 프로그램 구축"을 검색하면 테크놀로지 특정 및 불가지론에 관한 많은 텍스트를 찾을 수 있습니다.

+0

감사합니다. 그것은 볼 물건을 제공합니다. – samoz

+0

ASP.Net 또는 ASP.Net MVC를 기술 스택으로 사용하는 경우 MSDN 사이트에는 이러한 기술에 대한 모든 개념을 시작할 수있는 많은 기사가 있습니다. – womp

+0

# 2의 좋은 팁은 가능한 경우 캐싱 프록시를 사용하는 것입니다. 광택 또는 오징어. 방문자 당 페이지를 다시 생성 할 필요가 없으므로 앱 서버의로드가 크게 줄어 듭니다. – Martin

0

단지 필요한 것 이상을 수행하지 마십시오. 그렇게하면 메타 로그 효과가 부족한 대부분의 것들을 처리 할 수 ​​있습니다.

1

여기에 언급 된 다른 모든 것 외에도 트래픽의 타이밍을 살펴야합니다.시간이 지남에 따라 상대적으로 일정합니까? 아니면 짧은 시간 안에 더 많은 양의 트래픽을 얻을 수있는 버스트로 올 것인가?

전체적으로 피크로드를 정상적으로 처리 할 수있는 시스템을 설계하는 것이 좋습니다 (이상적인 성능 수준 일 필요는 없음). 소통량이 매우 폭발적이라면 같은 양의 소통량을 점차적으로 얻는 것보다 규모를 확장하는 데 더 많은 노력을 기울여야합니다.

1

Erlang이가는 한 : 받아 들일 만하게 좋은 언어 (나는 그것에 대해 알고있는 것에 기초 함)처럼 들리지만, 그것은 확실히 당신에게 확장 성을주는 마술 지팡이가 아닙니다. 고려해야 할 여러 요인과 제품이 수십 가지 있습니다. 언어 선택은 그 중 하나지만 아마도 가장 중요한 것 중 하나입니다.

&은 새로운/알 수없는 기술로 옮겨가는 대신 자신에게 맞게 확장되기를 바랍니다.

+0

글쎄, 기본적으로 임베디드 또는 시스템 레벨 C 배경에서 왔기 때문에 어디서나 시작할 수 있습니다. 얼랭 (Erlang)은 함수형 언어이기도하지만 동시에 선전 한 높은 동시성 측면 때문에 좋아했습니다. – samoz

1

백 엔드 저장소, 데이터베이스 처리, 프런트 엔드 동적 콘텐츠 및 캐싱 중 하나가 있습니다. 호스트 서비스 제공 업체와 사용 가능한 네트워크 대역폭을 고려해야합니다.

대역폭 대문자, 요청 당 최대 메모리 할당, 최대 파일 업로드 크기 및 최대 데이터베이스 쿼리에 대해 호스팅 서비스에 문의하십시오. 현재 호스트가 확장 요구 사항과 일치하는 값싼 서비스를 제공하지 않는 경우, 종료되기 전에 다른 호스트로 이동하거나 할당 된 대역폭을 넘기 위해 3 자리 월간 청구서로 오프 가드를 잡습니다.

편집 : 방금 다시 읽고 "내부 네트워크"참조를 발견했습니다. 따라서이 경우에는 네트워크 관리자가 수백 달러짜리 지폐로 집을 지칠 필요는 없지만 여전히 폐쇄 될 수 있습니다. 자신의 사이트가 상호 작용하는 다른 서비스의 네트워크 관리자 및 관리자와 통신 회선을 계속 열어 놓으십시오. 그렇지 않으면 대다수의 상대방을 신속하게 대담하게 만들 수 있습니다. 즉 : 좋은 네트워크 에티켓.

실제로 서버를 소유하고 구축하는 경우 OS, 소프트웨어 스택 및 하드웨어가 모두 안정적인 소프트웨어 및 펌웨어 버전으로 만 최신 상태인지 확인하고로드를 처리하고 원활하게 실행되도록 모니터링하십시오. 항상.

편집 # 2 : 응용 프로그램이 부하를 처리하는 방법을 구체적으로 묻는 것을 알고 있으며 여기에서 주제를 달구어 버릴 수도 있습니다.하지만 부하들과 팀원이 부하를 처리 할 수 ​​있는지 고려해야합니다. 인력의 대역폭도 마찬가지로 중요하며 작업 부하로 인해 낙담하는 것은 이러한 프로젝트가 실패하는 방식입니다. 맥주는 프로그래머와 가장 친한 친구인데, 특히 복잡하고 독창적 인 프로그래밍 작업에 집중할 때 그렇습니다. 그러나 인력이 제대로 관리되지 않거나 인력 자원이 부족한 경우 음주 문제가 심각하게 이어질 수 있습니다. 아침 3시에 누가 그 정전 통지에 응답 할 것입니까? 종교 근본 주의자 나 트롤로부터 누가 모자 메일에 응답 할 것인가, 또는 법령과 특허를 통해 크롤링하여 그 테이크 - 다운 통보가 가짜인지를 검증 할 것인가? 지폐를 낼 수있는 공연이 아니라면 대부분의 사람들은 많은 시간과 열정을 쏟을 수 없습니다. 나는 당신을 전혀 낙담시키려는 것이 아니며, 이미이 문제를 다루었 으면 좋겠다.

+0

조언 해 주셔서 감사합니다. 이것을 인터넷으로 옮기면 (결국이 파일럿이 성공하면 결국 일어날 수 있습니다), 나는 그 사실을 기억할 것입니다. – samoz

관련 문제