더 큰 사이트에서 더 나은 사양으로 하나의 서버 대신 여러 서버를 사용하는 이유는 무엇입니까?


42

Stack Overflow는 Stack Overflow 사이트를 제공하기 위해 10 대 이상의 서버를 사용한다는 것을 읽었습니다. 서버마다 리버스 프록시, 데이터베이스 서버 또는 HTTP 서버와 같은 기능이 다릅니다.

다음 사양의 강력한 독립형 단일 서버를 보았습니다.

  • 2.60GHz에서 2 개의 Xeon E5-2630v2, 총 12 코어, 24 스레드; 30MB
  • 64GB ECC 등록 1600MHz에서 최대 768GB DDR3
  • 4 개의 120GB Intel 520/530 시리즈 (80k 랜덤 IOPS, ~ 550MB / s)
  • 전용 이더넷 관리 포트가있는 HP iLo4 Advanced.

768GB RAM, 20TB + HDD, 4+ x Xeon과 같은 더 높은 사양의 단일 서버를 사용하지 않겠습니까? 많은 서버를 사용하거나 단일 고사양 서버를 사용할 경우의 이점은 무엇입니까?


4
SE에는 10 개 이상의 서버가있을뿐 아니라 다른 데이터 센터에 페일 오버를위한 중복 설정이 있습니다. 그리고 페이스 북이나 구글의 모든 트래픽을 처리 할 수있는 서버는 아직 발명되지 않았다.
Michael Hampton 1

8
해당 슈퍼 서버를 재부팅해야 할 경우 어떻게됩니까?
Liath

중복 ... :)
윌리엄 에드워즈

1
평 행성 ...
가벼움과 모니카

1
@SSpoke : 포트 당 하나의 연결로 제한되지 않습니다. 중요한 것은 (src 주소, src 포트, dst 주소, dst 포트)의 조합이 고유하다는 것입니다.
David

답변:


58

강력한 단일 서버는 지금까지만 업그레이드 할 수 있습니다. 사용 가능한 가장 강력한 서버가 있으면 서버를 서버간에 분할하거나 더 효율적으로 만들지 않으면 사이트를 더 확장 할 수 없습니다.

비용 요소도 있습니다. 매우 강력한 단일 서버는 절반의 강력한 서버 두 배보다 10 배의 비용이들 수 있습니다. 가장 저렴한 가격으로 하드웨어를 구입할 수 있기를 원합니다. 단 하나의 제품이 작동하기 때문에 더 높은 가격에 고정되어 있지는 않습니다.

가동 시간과 안정성도 중요합니다. 둘 이상의 서버를 사용하면 유지 관리를 위해 하나의 서버가 실패하거나 오프라인 상태가되어 사이트를 유지할 수 있습니다. 단일 서버로는 그렇게 할 수 없습니다.

대부분의 대규모 웹 사이트는로드 밸런서와 여러 서버를 사용합니다. 나는 트립 어드바이저에서 일했다. 그들은 트립 어드바이저 아키텍처에 대한 훌륭한 기사 와 여러 서버에서 확장 성을 높이는 방법을 발표했습니다.

이다 가능한 단일 서버에서 고급 서비스를 실행합니다. 내가 아는 한 가지 예는 Mailinator입니다. 저자 는 Mailinator 아키텍처에 관한 기사를 발표 했다 . 그는 새 서버를 구입하는 대신 코드를보다 효율적으로 만드는 데 중점을 둡니다. 이것은 그의 서비스 작동 방식을 규정하는 한계가된다. 단일 시스템이 메일을 삭제하여 추가 공간을 확보하기 몇 시간 전에 메일을 보관합니다.

단일 서버 업그레이드를 수직 확장 이라고 합니다. 더 많은 서버를 추가하는 것을 수평 확장 이라고 합니다. 이 주제에 대한 자세한 내용은 다음 두 가지를 비교하는 기사입니다.


9
여러 대의 서버가 있고 (몇 대 이상) 일부 CPU가 죽으면 다른 서버가 모든 것을 계속 실행할 수 있습니다. 서버가 1 대이고 중단되면 완료된 것입니다.
Martijn

2
사람들이 잊어 버린 또 다른 점은 서버를 최대 용량 또는 그 근처에서 실행하는 것이 반드시 좋은 것은 아니라는 것입니다. 우리는 글로벌 통신에서 서버를 측정했습니다 (이름없는 상태로 유지). 일반적으로 용량의 최대 약 절반으로 측정합니다. 물론 OS에 따라 하위 시스템 간의 균형이 충돌 할 수 있기 때문에 하드웨어 용량에 관계없이 컴퓨팅 대기열, IO 하위 시스템, 메모리 주소 지정 및 스와핑 등의 문제가 발생하기 시작합니다. 더 많은 것을 허용하는 강력한 시스템이 있습니다.
closetnoc

@closetnoc 나는 그것을 설명하는 가장 좋은 방법은 병목 현상을 피하려고한다는 것입니다. 적절하게 균형 잡힌 시스템은 이론적으로 부작용없이 100 % 용량으로 실행될 수 있지만 시스템이 대기해야하는 모든 것 (CPU 시간, I / O, 버스 전송 등)은 성능 문제를 유발합니다. 시스템을 최대 용량의 절반으로 실행하면 이러한 병목 현상이 발생하지 않는 좋은 지점을 찾을 수 있습니다.
Thebluefish

@Thebluefish 예, 아니오. 나는 오래된 시스템 내부자입니다. 대부분의 시스템에는 OS와 내부 하드웨어에 병목 현상이 발생하여 빠른 RAID, 메모리, CPU 등으로 구성 할 수 없습니다. 또한 OS 내에 제한이 있습니다. Windows는 VMS를 기반으로했기 때문에 꽤 좋았지 만 여전히 VMS처럼 조정할 수없는 한계가있었습니다. 리눅스가 더 좋습니다. 일부 서버는 HP와 같이 하드웨어 제한이 거의 없도록 설계되었습니다. 그러나 인터럽트와 CPU 스왑이 증가하기 때문에 컴퓨팅 큐를 100 % 용량으로 실행하는 것은 좋은 생각이 아닙니다.
closetnoc

2
수평 확장의 또 다른 이점 : 단일 서버로 보낼 수있는 전력, 대역폭, 냉각 등이 너무 많습니다. Netflix는 무한한 처리 능력과 메모리를 갖춘 박스를 가질 수 있지만, 트래픽이 충분할만큼 충분한 파이프가 없으면 아무 효과가 없습니다.
Chris Hayes

32

후방 제독 그레이스 호퍼에서 :

더 큰 컴퓨터를 구축 할 때 : "개척 초기에 그들은 큰 당기기를 위해 황소를 사용했으며, 한 황소가 통나무를 막을 수 없었을 때 그들은 더 큰 황소를 키우려고하지 않았습니다. 그러나 더 많은 컴퓨터 시스템을 위해 "

출처


1
나는 초기 경력에서 그레이스 호퍼를 몇 번 만났고 그녀와 시간을 보냈습니다. 그녀는 정말 뭔가였다! 멋진 고양이! 우리는 모두 그녀를 사랑했습니다. 그녀는 그녀의 시간과 은혜로 말미암아 친절하고 관대했습니다. 그녀를 인용 해 주셔서 감사합니다! 뒤로 가기위한 하나의 투표. 감사!
closetnoc

5
이것은 관련 인용문이지만 질문에 대답하지 않습니다. 한 사람의 근거없는 의견은 여기서 가치가 없어야합니다.
TankorSmash

7
@NoahSpurrier 실제로 질문의 어느 부분에도 대답하지 않기 때문에? 이것은 근거없는 비유를 만드는 인용문 일 뿐이며 더 많은 서버를 쏠 이유 를 설명하지는 않습니다 .
Chris Hayes

2
나는 그것이 유용한 답변이라고 말하고 싶지만 구체적인 이유를 상세히 설명하지 않기 때문에 대답으로 받아 들여서는 안됩니다. 그러나 부하 분할 원리에 대한 초과 보관 이유를 명확하게 설명합니다.
Ian T. Small

1
@Bobson 나는 그녀가 중요한 선수라고 주장하는 것이 아닙니다. 단순하게 들리는 문장이나 두 문장 대신에 일부 내용으로 답을보고 싶다고 말하고 있습니다.
TankorSmash

10

Stephen은 시스템 아키텍처를 결정할 때 고려해야 할 주요 고려 사항, 즉 수직 및 수평 확장의 균형을 설명합니다. 몇 가지 다른 고려 사항을 추가하겠습니다.

  • 우려의 분리 : 리버스 프록시, DB, 컨텐츠 서버 등 근본적으로 다른 여러 시스템을 언급합니다. 유지 관리 및 보안 관점에서 이러한 책임을 다른 시스템에 분산하여 다른 OS (버전)를 실행할 수 있도록하는 것이 유리합니다. 필요한 경우 별도로 업데이트 할 수 있으며 손상된 경우 다른 서비스에 영향을 미치지 않습니다.
  • 컨텐츠 전달 : 이는 웹 서버의 궁극적 인 목표이며 분산 된 모델에 적합합니다. 장거리 연결 의 대기 시간 이 최소화 되도록 시스템을 복제하고 지리적으로 분산시킬 수 있습니다 . 또한 중복성을 허용합니다 . 대규모 웹 사이트는로드 밸런서를 사용하여 (아직 다른 서버 세트!) 자동 장애 조치 를 통해 서비스를 항상 유지할 수 있습니다.

실제로 수직 확장을 다른 수준 인 메인 프레임으로하는 ​​전체 서버 클래스가 있습니다. 그것들은 다양한 장점 (속도, 신뢰성) 및 단점 (비용)을 갖지만 대체로 우리가 거래 처리 (신용 카드 구매, 은행 거래를 생각할 때)에서 대량의 데이터가 입력-출력 처리를 통해 처리되어야 할 때 일반적으로 사용됩니다 , 선거 및 인구 조사 데이터). 예를 들어 은행은 수직으로 확장 된 웹 서버의 사이트에 서비스를 제공하는 반면 백엔드는 메인 프레임을 통해 트랜잭션을 처리하게됩니다.

흥미롭게도 Paypal 및 Visa와 같은 회사는 메인 프레임에서 수천 개의 수평 확장 시스템으로 구성된 클러스터형 시스템으로 이동하고 있습니다. 급격히 진화하는 디지털 세계에서 메인 프레임조차도 수평 스케일링 한도에 도달하고 있습니다.

“모든 가용성 및 성능 요구 사항으로 인해 메인 프레임에서 지불을 처리 할 수 ​​없었습니다.

출처 : AdamWorlds, ComputerWorldUK


8
  • 크기 제한. 우리는 여러 개의 프로세서, 메모리 칩 및 디스크가있는 단일 박스가 균일하다고 가정합니다. 이것은 전적으로 사실이 아니지만 숫자가 너무 커지지 않으면 충분합니다. 열, 에너지, 근접성 등에 대한 기술적 제한이 있으므로 단일 서버의 크기에 대한 실질적인 제한이 항상 있어야합니다.

  • 확장 성-IPC 용 공유 메모리를 사용하는 단일 서버 시스템과 네트워킹 또는 클러스터링을 사용하는 다중 서버 시스템 간에는 큰 차이가 있습니다. 그러나 두 서버와 200의 차이는 훨씬 작습니다. 확장 가능한 시스템을 구축 한 경우 문제가 발생하기 전에 훨씬 더 크게 확장 할 수 있습니다. 그렇다면 실제로 단일 서버가 필요하지 않습니다 처음에.

  • 탄력성-하나의 서버는 한 명의 관리자가 'oops'할 수있는 장소입니다. 또는 전체 주석 조각에 대한 서비스가 중단되었음을 의미하는 물리적 문제가 있습니다. (데이터 센터 누수, 누군가가 랙에 충돌하여 넘어지는 경우). 여러 서버를 데이터 센터 내에 분산하거나 지리적으로 더 잘 분산시킬 수 있습니다. 이미 앱을 배포하고 있다면 '중형'크기의 컴퓨터에서 확장하는 것이 소수의 더 큰 컴퓨터에서 같은 양의 CPU / 메모리 / IO보다 거의 항상 저렴합니다.

  • 업데이트-서버를 패치하면 서비스가 불안정 해 지거나 재부팅이 필요하거나 작동 중지 시간이 필요할 수 있습니다. 같은 것을 실행하는 4 대의 서버가있는 경우이를 위해 잠시 동안 서비스를 중단 할 수 있습니다. 패치 / 업데이트주기가 잘못되면 서비스를 중단하십시오.


7

소규모로 문제를 해결합시다. 메일, ActiveDirectory, 파일 공유 및 회사 웹 사이트를 실행하는 하나의 서버가있는 소규모 사무실.

해커가 공격을 당했으며 IIS가 엉망이기 때문에 재부팅해야합니다. 또는 Exchange에 업데이트와 재부팅이 필요합니다. 또는 Active Directory가 손상되었습니다.

이러한 격리 된 "하나의 서비스가 다운되었습니다"문제는 전체 서버에 영향을 미치므로 해당 서버에서 공유하는 모든 항목은 재부팅하거나 다른 사항으로 인해 서버에 영향을 미칩니다.

실제 IT 담당자가 나타나서 해당 서버를 확인한 후 해당 서버를 별도의 서버로 분할하고 백업 도메인 컨트롤러 서버를 사용하는 것이 좋습니다.

"모든 계란을 한 바구니에 넣지 마십시오"라는 오래된 속담입니다.

이제 그 철학은 웹 서버에 적용됩니다. 웹 서버가 하나만 있고 웹 응용 프로그램 (새 MyFaceLink.com)을 게시했는데 정말 인기가 있다면 새로운 문제가 발생합니다. 사용자가 사이트에있는 동안 유지 관리를 위해 사이트를 중단 할 수 없습니다. 충돌이 발생하거나 사용자가 너무 많으면 문제가 발생합니다. 세계 최대 규모의 단일 서버조차도 10 억 FB 변환에 압도 될 것입니다.

따라서 동일한 "바구니에 담긴"이유 때문에로드 밸런싱이 작동합니다. 서버를 3 대의 서버에 분산시키고 서버가 다운되면 나머지 2 대가 용량을 처리합니다. 패치를 수행해야하는 경우 한 번에 하나씩 만 수행하면 아무도 알 수 없습니다.

가장 간단한 것은 메가 서버의 가격이나 실제로 부하를 처리 할 수 ​​있는지 여부입니다. 단일 실패 지점에 관한 것입니다. 비즈니스가 충분히 바빠서 8-5 일하는 5 명의 사용자 대신 24x7 일이 발생하면 가동 중지 시간이 허용되지 않습니다. 예정된 중단은 스케줄하기가 더 어렵습니다. 따라서 하중을 분산시킵니다.


이름 지정에 대한 +1 실패의 단일 지점 문제.
David Cary

1

한 대의 기계가 두 대의 작업을 수행하도록 시도하면 기계의 일부 부분은 더 커야하지만 동일한 속도로 실행되어야하고, 일부는 같은 크기를 유지할 수 있지만 더 빠르게 실행되어야하며 일부는 더 커야합니다. 그리고 더 빠릅니다. 작은 기계의 역할을 더 큰 기계로 결합하거나 더 큰 기계의 역할을 더 작은 기계로 분할하는 것이 의미가있는 정도는 기계의 가장 비싼 부분에 어떤 종류의 스케일링이 적용되는지에 달려 있습니다. 너무 많은 기계의 워크로드가 하나의 거대한 거상으로 결합하는 경우, 비용은 커질 필요가 가지에 의해 지배 될 것입니다 증가 된 작업 부하를보다 빠르게 처리합니다. 이러한 비용이 속도 및 크기와 관련하여 선형 적 이었더라도 작업량을 두 배로 늘리면 기계 처리 비용이 두 배 이상 증가합니다. 속도가 특정 지점을 넘어서 증가한다는 사실은 선형 비용보다 (훨씬) 더 큰 비용 증가로 인해 효과를 확대합니다.

실용성이 노동의 세분화를 강요하는 고정 된 지점은 실제로 없다. 수행 할 작업 유형에 따라 두 개의 워크로드를 결합한 시스템은 두 배 미만의 메모리를 사용하거나 두 배 미만의 속도로 실행할 수 있습니다. 반면에 컴퓨터에 더 많은 작업을 수행할수록 메모리 및 속도 요구 사항이 작업 부하에 따라 선형으로 확장되기 시작하는 정도가 커집니다. 그 이상으로 진행할수록 각 두 배의 워크로드에 대한 상대 비용이 증가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.