2010-07-10 5 views
5

저는 잠시 궁금해했습니다. 페이스 북 코드와 같은 웹 사이트는 어떻게 여러 대의 서버를 가질 수 있습니까?멀티 서버 코드 작성

몇 가지 서버가 동일한 코드를 실행하고 더 많은 정보를 얻음에 따라 코드가 어떻게 고려 될 수 있습니까?

아니면 웹 서버가 코드에 관계없이이 문제를 처리합니까?

답변

4

공유 및 네트워킹. 코드는 한 서버 또는 여러 서버에서 동일해야합니다.

Memcache와 같은 메모리, 균형 조정기가있는 메모리 등을 통해 데이터를 공유 할 수 있습니다. Google과 같은 서버를 전문화하면 (일부는 URL 페치, 일부는 데이터 보유, 다른 일부는 크런치 등) 손에 드는 하드웨어를 더 잘 활용할 수 있습니다.

코드는 일반적으로 API를 통해 추상화 된 디스패치 논리를 사용하여 하나의 서버 또는 수백만 개의 서버가있는 경우 동일하게 작동합니다.

IPC (Inter Process Communication)는 네트워크 사용이 가능하며 서비스의 '더 단단한'본딩을 허용합니다. Google은 이것을 도울 수있는 protocol buffer 프로젝트도 있습니다.

기본적으로 서버는 장애 조치/백업 이외의 다른 실질적인 이점을 얻기 위해 공유해야하므로 코드는 공유를 돕기 위해 추상화 수준을 사용해야합니다. 실제 공유는 일반적으로 Round-Robin 또는 Map/Reduce 논리를 사용합니다.

3

기본 아키텍처 패턴은 "shared-nothing 아키텍처"입니다. 아이디어는 배포 할 수있는 방법으로 archtecture의 가장 많이 사용되는 부분을 작성하고 분산 된 동료는 다른 동료에 대해 알 필요가 없으므로 서로 통신 할 필요가 없습니다. 그렇게하면 다른 동료를 추가하여 확장 할 수 있습니다.

일반적으로 공유 구성 요소를 공급하고 일부 지속성 및/또는 상태 동기화에 트래픽 분류 (로드 균형 조정)가 필요합니다.

"클래식"아키텍처는 공통 데이터베이스에 대해 실행되는 여러 "비공유"응용 프로그램 서버에 트래픽을 분산시키는 하나 이상의로드 밸런서입니다. 일반적으로 appication server 하드웨어는 저렴하고 데이터베이스 하드웨어는로드에 따라 하나 또는 두 개의 큰 아이언입니다.

요즘 점점 더 많은 솔루션이 데이터베이스를 확장하여 크기를 조정합니다. 결국에는 여러 개의 db 노드가 있고 각 노드에 데이터의 하위 집합 만 포함되어있는 분산 된 샤드 데이터베이스가 생성됩니다.