Làm thế nào các trang web lớn mở rộng quy mô và tối ưu hóa lưu lượng truy cập lớn?


7

Làm thế nào để các trang web như Facebook và Twitter tối ưu hóa trang web của họ cho lưu lượng truy cập lớn. Ngoài việc chi nhiều tiền cho việc có được các máy chủ tốt nhất, những gì có thể được tối ưu hóa trong mã của bạn để đáp ứng lưu lượng lớn?

Tôi đã đọc về việc lưu các trang của bạn vào HTML tĩnh, nhưng điều đó không thực tế đối với các trang mạng xã hội nơi các trang được cập nhật liên tục.

Câu trả lời:


10

Các trang web lớn như Google, Facebook và Twitter không nhất thiết phải có máy chủ 'tốt nhất' ở chỗ họ không chạy một số lượng nhỏ máy chủ công suất cao, họ chạy một số lượng lớn máy chủ nhỏ hơn và rẻ hơn. Họ hy vọng phần cứng sẽ chết và được thay thế và mã cho phép điều đó.

Một số điều điển hình trong các trang web quy mô lớn:

  • Họ không sử dụng cơ sở dữ liệu SQL như myQuery. Thay vào đó, họ lưu trữ khóa-giá trị như HBase hoặc Cassandra. myQuery và các DB SQL khác quá chậm khi số lượng yêu cầu rất lớn.
  • Họ lưu trữ càng nhiều càng tốt. Bộ nhớ đệm HTML như bạn nói. Dữ liệu của người dùng được lưu trữ trong bộ nhớ bằng cách sử dụng những thứ như memcached.
  • Một số trang web, như Reddit, các trang bộ đệm trước khi người dùng thậm chí yêu cầu nó.
  • Tính toán trước càng nhiều càng tốt, các trang web có xu hướng tìm ra những thứ như số lượng bạn bè của bạn (hoặc bất cứ điều gì) và bộ nhớ cache cũng vậy - một chút càng tốt được thực hiện một cách linh hoạt.

http://highscalability.com/ là một trang web tuyệt vời để tìm hiểu thêm về điều này.


Tôi đã bình chọn cho bạn vì tất cả các tuyên bố của bạn hầu hết đều đúng với các ứng dụng lớn nhất, như Google, Amazon và các trang web có quy mô tương tự khác. Tuy nhiên, cần lưu ý rằng có những ngoại lệ đối với hầu hết các quy tắc. Ví dụ: YouTube vẫn sử dụng MySQL, cũng như Digg, Flickr và được cho là AdWords (chủ yếu là họ bắt đầu với MySQL, sau đó bỏ nó để tìm giải pháp "thương mại" và sau đó quay lại khi nó không hoạt động).
Lèse majesté

Ngoài ra, ngay cả khi các loại trang web hàng đầu này đều sử dụng NoQuery DB, đây là những trường hợp cực đoan. Có nhiều định nghĩa / mức độ mở rộng khác nhau. Và đối với hầu hết các ứng dụng quy mô lớn, quy mô doanh nghiệp ngoài kia, việc tranh cãi liệu NoQuery có tốt hơn cơ sở dữ liệu quan hệ truyền thống hay không. Các điểm khác của bạn là tại chỗ cho tất cả các ứng dụng yêu cầu khả năng mở rộng.
Lèse majesté

1
@Lese - hoàn toàn đồng ý nhưng OP đã đề cập đến Facebook và Twitter
Steve Claridge

3

Giảm tải lưu lượng cơ sở dữ liệu thông qua shending có lẽ là một trong những cách tốt nhất để mở rộng trang web có lưu lượng truy cập cao.

Giảm thời gian tải trang bằng cách nén các tệp tài nguyên bằng gzip và kết hợp nhiều tệp tài nguyên thành một để giảm lượng yêu cầu mà trình duyệt cần thực hiện cũng là một tối ưu hóa xứng đáng.


Nếu bạn đang xem xét shending, bạn nên đọc bài viết này trước: mysqlperformanceblog.com/2009/08/06/why-you-dont-want-to-shard
Lèse majesté

3

Tôi nghĩ rằng tôi đã đề cập đến HipHop cho PHP , biến PHP thành C ++ và được phát triển bởi Facebook . Tôi tin rằng Facebook đã làm một số việc trên APC .


Chỉ trong trường hợp HipHop không biến PHP thành C ++, nó kết nối hai ngôn ngữ theo cách logic của Facebook đằng sau trang web được thực hiện trong C ++ (nhanh hơn nhiều và thân thiện với việc sử dụng CPU) nhưng "đầu vào logic đó" là được thực hiện bởi PHP.
Trufa

1
Có thật không? Để trích dẫn trang web HipHop: HipHop chuyển đổi mã nguồn PHP của bạn thành C ++ được tối ưu hóa cao và sau đó biên dịch nó với g ++ để xây dựng các tệp nhị phân . Tôi hiểu rằng nó chỉ có thể xử lý một tập hợp con của PHP vì các bit động hơn (nghĩ eval) không dễ dịch ...
Andy
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.