Tại sao các trang web lớn sử dụng nhiều máy chủ thay vì một máy chủ có thông số kỹ thuật tốt hơn?


42

Tôi đọc rằng Stack Overflow sử dụng 10 máy chủ trở lên để phục vụ trang web Stack Overflow. Các máy chủ khác nhau có các chức năng khác nhau như proxy ngược, máy chủ cơ sở dữ liệu hoặc máy chủ HTTP.

Tôi đã thấy một máy chủ độc lập mạnh mẽ với các thông số kỹ thuật sau:

  • 2 x Xeon E5-2630v2 @ 2,60 GHz, tổng số 12 lõi, 24 luồng; 30 MB
  • Trung tâm ECC 64 GB. lên tới 768 GB DDR3 ở 1600 MHz
  • Dòng 4 x 120 GB Intel 520/530 (IOPS ngẫu nhiên 80k, ~ 550 MB / s)
  • HP iLo4 Advanced với cổng quản lý Ethernet chuyên dụng.

Tại sao không sử dụng một máy chủ duy nhất có thông số kỹ thuật cao hơn như RAM 768 GB, 20 TB + HDD, 4+ x Xeon? Những lợi ích của việc sử dụng nhiều máy chủ hoặc những hạn chế của việc sử dụng một máy chủ có đặc điểm kỹ thuật cao là gì?


4
SE không chỉ có hơn 10 máy chủ, họ còn có một thiết lập trùng lặp trong một trung tâm dữ liệu khác để chuyển đổi dự phòng. Và, máy chủ chưa được phát minh có thể xử lý tất cả lưu lượng truy cập của Facebook hoặc Google.
Michael Hampton

8
Điều gì xảy ra khi bạn cần khởi động lại siêu máy chủ đó?
Liath

Dự phòng ... :)
William Edwards


1
@SSpoke: bạn không bị giới hạn một kết nối trên mỗi cổng. Tất cả vấn đề là sự kết hợp của (địa chỉ src, cổng src, địa chỉ dst, cổng dst) là duy nhất.
David

Câu trả lời:


58

Một máy chủ mạnh mẽ duy nhất chỉ có thể được nâng cấp cho đến nay. Khi bạn có sẵn máy chủ mạnh nhất, trang web của bạn không thể phát triển thêm mà không chia tách giữa các máy chủ hoặc làm cho nó hiệu quả hơn.

Ngoài ra còn có yếu tố chi phí. Một máy chủ siêu mạnh có thể có giá gấp mười lần hai máy chủ mạnh gấp rưỡi. Bạn muốn có thể mua phần cứng của mình ở mức giá rẻ nhất và không bị khóa ở mức giá cao hơn vì đó là điều duy nhất sẽ hoạt động.

Thời gian hoạt động và độ tin cậy cũng đi vào chơi. Với hai hoặc nhiều máy chủ, một máy chủ có thể bị lỗi hoặc bị ngắt kết nối để bảo trì và trang web có thể hoạt động. Bạn không thể làm điều đó với một máy chủ duy nhất.

Hầu hết các trang web lớn sử dụng cân bằng tải và nhiều máy chủ. Tôi đã từng làm việc cho TripAdvisor. Họ đã xuất bản một bài viết tuyệt vời về kiến ​​trúc TripAdvisor và cách họ làm cho nó có khả năng mở rộng cao với nhiều máy chủ.

thể chạy một dịch vụ nâng cao trên một máy chủ. Một ví dụ mà tôi biết là Mailinator. Tác giả đã xuất bản một bài viết về kiến ​​trúc của Mailinator . Ông tập trung vào việc làm cho mã của mình hiệu quả hơn thay vì mua máy chủ mới. Điều này kết thúc là một hạn chế chỉ ra cách thức hoạt động của dịch vụ. Nó giữ thư chỉ một vài giờ trước khi máy duy nhất xóa nó để nhường chỗ cho nhiều hơn.

Nâng cấp một máy chủ duy nhất được gọi là mở rộng theo chiều dọc . Thêm nhiều máy chủ được gọi là mở rộng theo chiều ngang . Để biết thêm thông tin về chủ đề này, đây là một số bài viết so sánh hai:


9
Nếu bạn có nhiều máy chủ (nhiều hơn một vài) và một số cpu chết, bạn có các máy chủ khác để giữ mọi thứ hoạt động. Nếu bạn có 1 máy chủ và hoàn thành việc đó, bạn đã hoàn thành.
Martijn

2
Một điểm khác mà mọi người quên là không nhất thiết phải chạy một máy chủ ở công suất tối đa hoặc gần nó. Chúng tôi đã đánh giá các máy chủ của mình tại một viễn thông toàn cầu (sẽ vẫn không tên) ở mức tối đa khoảng một nửa công suất như một quy tắc chung (không có logic thực sự đằng sau nó - chỉ xem các số liệu). Bạn bắt đầu gặp rắc rối với hàng đợi tính toán, hệ thống con IO, địa chỉ bộ nhớ và hoán đổi, v.v. tại một số điểm bất kể dung lượng phần cứng đơn giản là vì sự cân bằng giữa các hệ thống phụ có thể gặp xung đột tùy thuộc vào hệ điều hành. Có một số hệ thống mạnh mẽ cho phép nhiều hơn.
Closnoc

@closetnoc Tôi nghĩ cách tốt nhất để mô tả nó là bạn đang cố gắng tránh tắc nghẽn. Về mặt lý thuyết, một hệ thống cân bằng có thể chạy với 100% công suất mà không có tác dụng phụ xấu, nhưng bất cứ điều gì hệ thống phải chờ đợi (thời gian CPU, I / O, chuyển xe buýt, v.v.) sẽ gây ra vấn đề về hiệu năng. Bằng cách chạy các hệ thống của bạn với công suất tối đa một nửa, bạn đã tìm thấy một điểm tốt nơi bạn không gặp phải các nút thắt như vậy.
Thebluefish

@Thebluefish Có và không. Tôi là một anh chàng hệ thống nội bộ cũ. Hầu hết các hệ thống đều có nút cổ chai trong HĐH và phần cứng bên trong không thể khắc phục bằng các cuộc đột kích, bộ nhớ, CPU nhanh hơn, v.v., cũng có những giới hạn trong HĐH. Windows khá tốt vì nó dựa trên VMS, nhưng vẫn có những giới hạn không thể điều chỉnh như VMS. Linux rõ ràng là tốt hơn. Một số máy chủ được thiết kế với ít hạn chế về phần cứng như HP, đó là những gì chúng tôi đã sử dụng. Nhưng ngay cả khi đó, không bao giờ nên chạy một hàng tính toán ở mức 100% công suất vì sự gia tăng các ngắt và hoán đổi CPU.
Closnoc

2
Một lợi thế khác để mở rộng theo chiều ngang: chỉ có rất nhiều điện, băng thông, làm mát, v.v. mà bạn có thể đã hướng đến một máy chủ duy nhất. Netflix có thể có một hộp với sức mạnh xử lý vô hạn và bộ nhớ, nhưng nó sẽ không tốt nếu không có một ống đủ béo để đưa lưu lượng truy cập của họ ra ngoài.
Chris Hayes

32

Từ Chuẩn Đô đốc Grace Hopper:

Về việc xây dựng các máy tính lớn hơn: "Trong những ngày tiên phong, họ đã sử dụng bò để kéo nặng và khi một con bò không thể nhúc nhích khúc gỗ, họ đã không cố gắng phát triển một con bò lớn hơn. Chúng ta không nên thử máy tính lớn hơn, nhưng đối với nhiều hệ thống máy tính hơn. "

nguồn


1
Tôi đã gặp Grace Hopper một vài lần trong sự nghiệp đầu tiên của tôi và dành thời gian với cô ấy. Cô ấy thực sự là một cái gì đó! Một con mèo ngầu! Chúng tôi đều yêu cô ấy. Cô ấy rất tốt bụng và hào phóng với thời gian và ân sủng của mình (ý định chơi chữ). Kudos đã trích dẫn cô ấy! Một phiếu bầu cho cách trở lại. Cảm ơn!
Closnoc

5
Mặc dù đây là một trích dẫn có liên quan, nhưng điều này không trả lời câu hỏi. Ý kiến ​​không căn cứ của một người không nên có giá trị ở đây.
TankorSmash

7
@NoahSpurrier Bởi vì nó không thực sự trả lời bất kỳ phần nào của câu hỏi? Đó chỉ là một trích dẫn tạo ra sự tương tự không có căn cứ và không giải thích lý do tại sao chúng ta nên quay cho nhiều máy chủ hơn.
Chris Hayes

2
Tôi sẽ nói rằng đó là một câu trả lời hữu ích, nhưng không nên được chấp nhận là câu trả lời vì nó không nêu chi tiết lý do cụ thể. Tuy nhiên, nó nêu rõ lý do cong quá mức cho hiệu trưởng của việc tách tải.
Ian T. Nhỏ

1
@Bobson Tôi hoàn toàn không tranh cãi rằng cô ấy là một người chơi quan trọng, tôi chỉ nói rằng tôi muốn xem một câu trả lời với một số nội dung, thay vì một hoặc hai câu nghe có vẻ hay.
TankorSmash

10

Stephen giải thích sự cân nhắc chính cần thực hiện khi quyết định kiến ​​trúc hệ thống: sự đánh đổi theo tỷ lệ dọc và ngang. Tôi sẽ thêm một vài cân nhắc khác:

  • Tách biệt các mối quan tâm: bạn đề cập đến nhiều hệ thống hoàn toàn khác nhau: proxy ngược, DB, máy chủ nội dung, v.v. Từ quan điểm bảo trì và bảo mật, rõ ràng có lợi cho việc giữ các trách nhiệm này trải rộng trên các hệ thống khác nhau để chúng có thể chạy một hệ điều hành khác (phiên bản) nếu cần, có thể được cập nhật riêng và không ảnh hưởng đến các dịch vụ khác khi bị xâm phạm.
  • Phân phối nội dung: đây là mục tiêu cuối cùng của một máy chủ web và nó cho vay chính nó cho một mô hình phân phối. Các hệ thống có thể được nhân đôi và trải ra theo địa lý để độ trễ của các kết nối đường dài được giảm thiểu. Nó cũng cho phép dự phòng . Các trang web lớn sử dụng bộ cân bằng tải (một bộ máy chủ khác!) Để cho phép chuyển đổi dự phòng tự động để luôn duy trì dịch vụ.

Thực sự có một lớp máy chủ đưa tỷ lệ dọc lên một cấp độ khác: máy tính lớn. Chúng có nhiều ưu điểm (tốc độ, độ tin cậy) và nhược điểm (chi phí) nhưng nhìn chung chúng thường được sử dụng khi khối lượng dữ liệu khổng lồ phải xử lý thông qua xử lý Đầu vào-đầu ra trong xử lý giao dịch (nghĩ mua thẻ tín dụng, ngân hàng , dữ liệu bầu cử và điều tra dân số). Ví dụ, các ngân hàng phục vụ các trang web từ các máy chủ web được chia tỷ lệ theo chiều dọc trong khi back-end sẽ kết thúc xử lý các giao dịch thông qua máy tính lớn.

Điều thú vị là các công ty như Paypal và Visa đã chuyển từ máy tính lớn sang các hệ thống phân cụm gồm hàng ngàn hệ thống theo chiều ngang. Trong thế giới kỹ thuật số đang phát triển nhanh chóng, ngay cả các máy tính lớn cũng chạm trần theo tỷ lệ ngang:

Với tất cả các yêu cầu về tính khả dụng và hiệu suất, chúng tôi không thể tiếp tục xử lý thanh toán trên các máy tính lớn,

Nguồn: Adam Banks, trong ComputerWorldUK


8
  • Giới hạn kích thước. Chúng tôi muốn giả vờ rằng một hộp duy nhất có nhiều bộ xử lý, chip bộ nhớ và đĩa là đồng nhất. Điều này không hoàn toàn đúng, nhưng nó đủ đúng nếu số của bạn không quá lớn. Có các giới hạn kỹ thuật về nhiệt, năng lượng, độ gần, vv có nghĩa là sẽ luôn có một giới hạn thực tế về mức độ lớn của một máy chủ.

  • Khả năng mở rộng - có một sự khác biệt lớn giữa một hệ thống máy chủ, sử dụng bộ nhớ dùng chung cho IPC và hệ thống nhiều máy chủ sử dụng kết nối mạng hoặc phân cụm. Tuy nhiên, sự khác biệt giữa hai máy chủ và 200 nhỏ hơn đáng kể - nếu bạn đã xây dựng một hệ thống chia tỷ lệ, bạn có thể mở rộng quy mô lớn hơn trước khi có sự cố ... và nếu bạn có, thì thực sự không cần một máy chủ lớn ở nơi đầu tiên

  • Khả năng phục hồi - Một máy chủ là nơi mà một quản trị viên có thể 'oops'. Hoặc có một vấn đề vật lý có nghĩa là dịch vụ cho toàn bộ mẩu thiếc bị gián đoạn. (Rò rỉ nước, một người nào đó đâm vào giá đỡ và lật đổ nó, kiểu đó). Nhiều máy chủ có thể được phân phối trong một trung tâm dữ liệu hoặc tốt hơn là được phân phối theo địa lý. Và nếu bạn đã phân phối ứng dụng của mình, việc chia tỷ lệ trên các máy có kích thước 'trung bình' hầu như luôn rẻ hơn so với cùng số lượng CPU / bộ nhớ / IO trên một số lượng nhỏ hơn các máy lớn hơn.

  • Cập nhật - Nếu tôi vá một máy chủ, điều này có thể làm cho dịch vụ không ổn định, yêu cầu khởi động lại hoặc yêu cầu một số thời gian chết. Nếu tôi có 4 máy chủ chạy cùng một thứ, tôi có thể rút một máy ra khỏi dịch vụ một lúc để làm việc này. Và để nó ra khỏi dịch vụ nếu chu trình vá / cập nhật bị lỗi.


7

Hãy giải quyết vấn đề ở quy mô nhỏ. Một văn phòng nhỏ với một máy chủ chạy thư, ActiveDirectory, chia sẻ tệp và trang web cho công ty.

Tin tặc tấn công nó và bạn phải khởi động lại vì IIS bị rối. Hoặc Exchange cần cập nhật và khởi động lại. Hoặc Active Directory bị hỏng.

Bất kỳ vấn đề "một dịch vụ nào bị cô lập" bị cô lập này đều ảnh hưởng đến toàn bộ máy chủ, do đó, bất kỳ điều gì chia sẻ trên máy chủ đó sẽ ảnh hưởng đến họ do phải khởi động lại hoặc bất cứ điều gì khác.

Khi một anh chàng IT thực sự xuất hiện và thấy máy chủ đó, anh ta sẽ khuyên bạn nên chia chúng thành các máy chủ riêng biệt (và có một máy chủ điều khiển miền sao lưu).

Đó là câu ngạn ngữ cũ của "đừng bỏ tất cả trứng vào một giỏ"

Bây giờ triết lý đó được áp dụng cho các máy chủ web. Nếu tôi chỉ có một máy chủ web duy nhất và tôi xuất bản ứng dụng web của mình (MyFaceLink.com mới) và nó thực sự phổ biến, tôi đã gặp rắc rối mới. Tôi không thể đưa trang web xuống để bảo trì trong khi người dùng đang ở trên đó. Và nếu nó gặp sự cố hoặc tôi có quá nhiều người dùng, tôi sẽ bị lừa. Ngay cả máy chủ đơn lớn nhất thế giới cũng sẽ bị choáng ngợp bởi 1 tỷ lượt chuyển đổi FB sắp tới.

Vì vậy, cân bằng tải phát huy tác dụng, với cùng lý do "trứng trong giỏ". Trải rộng trang web trên 3 máy chủ và nếu một máy chủ ngừng hoạt động, 2 máy chủ còn lại sẽ xử lý dung lượng. Nếu tôi cần làm các bản vá, tôi chỉ làm một lúc, và không ai để ý.

Đơn giản nhất, đó không phải là về giá của máy chủ lớn hay liệu nó có thực sự xử lý được tải hay không (mặc dù có thể). Đó là về điểm thất bại duy nhất. Khi doanh nghiệp đủ bận rộn và xảy ra 24x7 thay vì 5 người dùng làm việc 8-5, thời gian chết không được chấp nhận. Mất điện theo lịch trình là khó khăn hơn để lên lịch. Vì vậy, bạn trải tải.


+1 để đặt tên cho điểm duy nhất của vấn đề thất bại .
David Cary

1

Nếu một người cố gắng để một máy thực hiện công việc của hai người, một số bộ phận của máy sẽ cần phải lớn hơn nhưng chạy ở cùng tốc độ, một số có thể giữ nguyên kích thước nhưng sẽ cần chạy nhanh hơn và một số sẽ cần phải lớn hơn nhanh hơn. Mức độ hợp lý khi kết hợp vai trò của các máy nhỏ hơn thành một máy lớn hơn hoặc phân chia vai trò của các máy lớn hơn thành các máy nhỏ hơn, phụ thuộc phần lớn vào loại tỷ lệ nào sẽ áp dụng cho các bộ phận đắt nhất của máy. Nếu khối lượng công việc của quá nhiều máy móc được kết hợp thành một khối khổng lồ, thì chi phí sẽ bị chi phối bởi những thứ cần phải lớn hơn nhanh hơn để xử lý khối lượng công việc tăng lên. Ngay cả khi chi phí của những thứ đó là tuyến tính liên quan đến tốc độ và kích thước, thì việc nhân đôi khối lượng công việc sẽ nhiều hơn gấp đôi chi phí của một cỗ máy để xử lý nó. Thực tế là tốc độ tăng vượt quá một điểm nhất định sẽ làm tăng chi phí lớn hơn tuyến tính (nhiều) so với tuyến tính.

Thực sự không có một điểm cố định trong đó thực tiễn bắt buộc phân ngành lao động; tùy thuộc vào loại công việc cần thực hiện, một máy kết hợp khối lượng công việc của hai người có thể nhận được với bộ nhớ ít hơn hai lần hoặc chạy với tốc độ thấp hơn hai lần. Mặt khác, máy càng được giao nhiều nhiệm vụ, thì mức độ yêu cầu bộ nhớ và tốc độ bắt đầu mở rộng tuyến tính theo khối lượng công việc càng lớn. Càng đi xa hơn, chi phí tương đối càng tăng cho mỗi lần nhân đôi khối lượng công việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.