Kiến trúc Facebook [đã đóng]


169

Tôi đã tìm kiếm các bài viết / thông tin về kiến ​​trúc tại Facebook, những thách thức và cách họ giải quyết chúng. Những gì họ sử dụng và tại sao họ sử dụng. Làm thế nào để họ mở rộng quy mô & các quyết định thiết kế cho những gì họ làm, vv Cơ sở chính để học hỏi. Biết về các trang web xử lý lưu lượng truy cập lớn như vậy cung cấp rất nhiều gợi ý cho các kiến ​​trúc sư, vv để ghi nhớ những thứ nhất định trong khi thiết kế trang web mới. Tôi đang chia sẻ những gì tôi tìm thấy.

  1. Đồ thị khoa học & xã hội Facebook (Video)
  2. Chia tỷ lệ tại Facebook
  3. Kiến trúc trò chuyện trên Facebook
  4. Blog Facebook
  5. Thiết kế và kiến ​​trúc Facebook Cassandra
  6. Ghi chú kỹ thuật của Facebook
  7. Quora - Kiến trúc Facebook
  8. Facebook cho 600 triệu người dùng
  9. Hadoop & cách sử dụng tại Facebook
  10. Erlang tại Facebook: Kiến trúc trò chuyện
  11. Bộ nhớ đệm hiệu suất Facebook
  12. Kiến trúc kết nối Facebook

Tôi có thêm 2 liên kết nhưng không thể đăng do hạn chế tại trang web này. Ngoài ra, vui lòng chia sẻ nếu bất cứ ai có bất cứ điều gì tốt hơn (không cần chỉ liên quan đến Facebook).

Tái bút - Tôi không thể tìm thấy những nơi tốt để chia sẻ nghiên cứu này, do đó sáng kiến ​​này. Hy vọng điều này sẽ giúp được ai đó.



2
Ngoài ra highscalability.com dường như là một nơi tuyệt vời để tìm hiểu về kiến ​​trúc cho rất nhiều trang web phổ biến. Không biết bao nhiêu trong số này là sự thật & bao nhiêu suy đoán, nhưng nó ở ngoài đó & chỉ là thứ gì đó để nhai lại ...
Srikar Appalaraju

1
Các blog của facebook kỹ thuật thỉnh thoảng có những hiểu biết quan trọng vào kiến trúc và mở rộng quy mô thử thách của họ.
Colin Pickard

Vì đây về mặt kỹ thuật không phải là một câu hỏi thực sự, bạn nên chuyển thông tin sang wiki thẻ FB để lưu giữ thông tin trong trường hợp câu hỏi này bị xóa. Cảm ơn.
Gordon

@Gordon làm thế nào để thêm thẻ FB Wiki? Không phải thẻ 'Facebook' đã ở đó? Đó là không đủ?
Srikar Appalaraju

Câu trả lời:


33

Vâng, Facebook đã trải qua NHIỀU thay đổi và ban đầu nó không được thiết kế để hoạt động hiệu quả. Nó được thiết kế để thực hiện công việc của nó. Tôi hoàn toàn không biết mã trông như thế nào và có lẽ bạn sẽ không tìm thấy nhiều thông tin về nó (vì lý do bảo mật và bản quyền rõ ràng), nhưng hãy xem API. Nhìn vào mức độ thường xuyên thay đổi và bao nhiêu trong số đó không hoạt động đúng, nữa hoặc tất cả.

Tôi nghĩ rằng át chủ bài lớn nhất của họ là Hiphop. http://developers.facebook.com/blog/post3538 Bạn có thể tự mình sử dụng HipHop: https://github.com/facebook/hiphop-php/wiki

Nhưng nếu bạn hỏi tôi, đó là một nhiệm vụ rất tham vọng và có thể lãng phí thời gian. Hiphop chỉ hỗ trợ rất nhiều, đơn giản là nó không thể chuyển đổi mọi thứ thành C ++. Vậy điều này nói gì với chúng ta? Chà, nó cho chúng ta biết rằng Facebook KHÔNG hoàn toàn tận dụng lợi thế của ngôn ngữ PHP. Nó không sử dụng phiên bản 5.3 mới nhất và tôi sẵn sàng đặt cược rằng vẫn còn rất nhiều tương thích với PHP 4. Mặt khác, họ không thể sử dụng HipHop. HipHop là một IDEA TỐT và cần phát triển và mở rộng, nhưng ở trạng thái hiện tại, nó không thực sự hữu ích cho nhiều người đang xây dựng các ứng dụng PHP MỚI.

Ngoài ra còn có PHP đến JAVA thông qua những thứ như Nhựa / Quercus. Một lần nữa, nó không hỗ trợ mọi thứ ...

Một điều cần lưu ý là nếu bạn sử dụng bất kỳ mô-đun PHP không chuẩn nào, bạn sẽ không thể chuyển đổi mã đó sang C ++ hoặc Java. Tuy nhiên ... Chúng ta hãy xem các mô-đun PHP. Chúng được biên dịch trong C ++. Vì vậy, nếu bạn có thể xây dựng các mô-đun PHP thực hiện mọi việc (như phân tích cú pháp XML, v.v.) thì về cơ bản (trừ một số tương tác) hoạt động với cùng tốc độ. Tất nhiên, bạn không thể tạo một mô-đun PHP cho mọi nhu cầu có thể và toàn bộ ứng dụng của mình vì bạn sẽ phải biên dịch lại và việc viết mã sẽ khó khăn hơn nhiều, v.v.

Tuy nhiên ... Có một số mô-đun PHP tiện dụng có thể giúp giải quyết vấn đề tốc độ. Mặc dù vào cuối ngày, chúng ta có một thứ tuyệt vời được gọi là "đám mây" và với nó, chúng ta có thể mở rộng các ứng dụng của mình (bao gồm cả PHP) để nó không còn quan trọng nữa. Phần cứng đang trở nên rẻ hơn và rẻ hơn. Amazon chỉ hạ giá của nó (một lần nữa) nói về.

Vì vậy, miễn là bạn viết mã cho ứng dụng PHP của mình xung quanh ý tưởng rằng nó sẽ cần đến quy mô một ngày ... Sau đó, tôi nghĩ rằng bạn vẫn ổn và tôi không thực sự chắc chắn rằng tôi thậm chí đã xem Facebook và những gì họ đã làm bởi vì khi nào họ đã làm điều đó, đó là một thế giới hoàn toàn khác và hiện đang cố gắng giữ vững cơ sở hạ tầng đó và duy trì nó ... Chà, bạn có được những thứ như HipHop.

Bây giờ HipHop sẽ giúp bạn như thế nào? Nó sẽ không. Nó không thể. Bạn đang bắt đầu mới, bạn có thể sử dụng PHP 5.3. Tôi thực sự khuyên bạn nên xem xét các khung công tác PHP 5.3 và tất cả các lợi ích mới mà PHP 5.3 mang lại cho bảng cùng với các thư viện SPL và cũng nghĩ về cơ sở dữ liệu của bạn. Rất có thể bạn đang phục vụ nội dung từ cơ sở dữ liệu, vì vậy hãy kiểm tra MongoDB và các loại cơ sở dữ liệu khác không có lược đồ và hướng đến tài liệu. Chúng nhanh hơn và tốt hơn nhiều đối với loại trang web / ứng dụng "phổ biến" nhất.

Hãy nhìn vào các công ty MỚI như Foursquare và Smugmug và một số công ty khác đang sử dụng công nghệ MỚI và CÁCH họ đang sử dụng nó. Để thành công như Facebook, tôi thực sự sẽ không nhìn vào họ về "cách" để xây dựng một trang web / ứng dụng hiệu quả. Tôi không nói rằng họ không có những người rất (rất) tài năng làm việc ở đó đang giải quyết vấn đề (họ) một cách sáng tạo ... Tôi cũng không nói rằng Facebook không phải là một ý tưởng tuyệt vời nói chung và không phải vậy thành công và bạn không nên lấy ý tưởng từ nó .... Tôi chỉ nói rằng nếu bạn có thể xem toàn bộ mã nguồn của họ, có lẽ bạn sẽ không được hưởng lợi từ nó.


1
đồng ý với hầu hết những gì bạn nói Những liên kết chỉ là vì lợi ích tò mò. Đôi khi bạn nhìn vào một phần của công nghệ và nói "hey! Thật tuyệt" ...
Srikar Appalaraju

Ngẫu nhiên xem lại câu trả lời của tôi ở đây hai điều. # 1, tôi tin rằng C chứ không phải C ++ về kỹ thuật của tôi tệ ... Nhưng quan trọng hơn là # 2, Phalcon là một khung công tác PHP mới hơn giúp chuyển đổi rất nhiều sang phần mở rộng PHP để tăng tốc. Mặc dù phần lớn mã của riêng bạn sẽ không chạy trong C và tất cả các thư viện khác mà bạn sử dụng có thể sẽ không có. Tuy nhiên, đó là một ý tưởng thông minh giống như HipHop để đạt được hiệu suất cao hơn.
Tom

... Và ở đây chúng ta lại đi với cái tay áo đó. Nhìn lại những năm sau chúng ta có ngôn ngữ Hack này (được sinh ra từ công cụ HipHop với IDE riêng không kém). Nó đã phát triển để trở thành một cái gì đó tốt hơn? Chúng ta sẽ thấy. Nó có thể giúp bạn không? Có thể, nhưng bây giờ có vẻ như bạn cũng sẽ có thể xây dựng giống như Facebook. Chỉ mất khoảng 4 năm =) Mặc dù về mặt cá nhân, tôi sẽ không quá nhanh để uống chất hỗ trợ kool.
Tom

1
Nhìn vào câu trả lời bây giờ, tôi ngạc nhiên về cách mọi thứ diễn ra trong thế giới công nghệ. HipHop không chỉ hỗ trợ các phiên bản PHP mới nhất, Facebook còn phát triển HHVM thậm chí còn nhanh hơn.
Gopi Krishna

Phải, đôi khi tôi nhận được thông báo đưa tôi trở lại vấn đề này. Thật tuyệt vời khi thấy mọi thứ đã thay đổi và HipHop đã phát triển thành HHVM như thế nào (và có khả năng Facebook đang tự sáng tạo lại dưới vỏ bọc - hãy nhìn vào tất cả những tiến bộ tuyệt vời của JS mà họ đang làm). Nó có ý nghĩa với tôi. Nếu bạn có một công ty cực kỳ thành công với hàng tấn tiền và nhân viên ... Tại sao không tái đầu tư vào R & D vào một lúc nào đó, phải không?
Tom

18

Facebook đang sử dụng cấu trúc LAMP . Các dịch vụ back-end của Facebook được viết bằng nhiều ngôn ngữ lập trình khác nhau bao gồm C ++, Java, Python và Erlang và chúng được sử dụng theo yêu cầu. Với LAMP, Facebook sử dụng một số công nghệ, để hỗ trợ số lượng lớn yêu cầu, như

  1. Memcache - Đây là một hệ thống lưu trữ bộ nhớ được sử dụng để tăng tốc các trang web điều khiển cơ sở dữ liệu động (như Facebook) bằng cách lưu trữ dữ liệu và các đối tượng trong RAM để giảm thời gian đọc. Memcache là hình thức lưu trữ chính của Facebook và giúp giảm tải cơ sở dữ liệu. Có một hệ thống bộ nhớ đệm cho phép Facebook nhanh như thu hồi dữ liệu của bạn.

  2. Thrift (giao thức) - Đây là một khung gọi thủ tục từ xa nhẹ để phát triển dịch vụ đa ngôn ngữ có thể mở rộng. Thrift hỗ trợ C ++, PHP, Python, Perl, Java, Ruby, Erlang và các công cụ khác.

  3. Cassandra (cơ sở dữ liệu) - Đây là một hệ thống quản lý cơ sở dữ liệu được thiết kế để xử lý một lượng lớn dữ liệu trải rộng trên nhiều máy chủ.

  4. HipHop cho PHP - Nó là một biến áp mã nguồn cho mã script PHP và được tạo để tiết kiệm tài nguyên máy chủ. HipHop biến mã nguồn PHP thành C ++ được tối ưu hóa. Sau khi làm điều này, nó sử dụng g ++ để biên dịch nó thành mã máy.

Nếu chúng ta đi vào chi tiết hơn, sau đó trả lời cho câu hỏi này lâu hơn. Chúng tôi có thể hiểu thêm từ các bài viết sau:

  1. Facebook hoạt động như thế nào?
  2. Quản lý dữ liệu, kiểu Facebook
  3. Thiết kế cơ sở dữ liệu Facebook?
  4. Cấu trúc cơ sở dữ liệu của tường Facebook
  5. Cấu trúc dữ liệu "thích" của Facebook

7

"Biết về các trang web xử lý lưu lượng truy cập lớn như vậy mang lại rất nhiều gợi ý cho các kiến ​​trúc sư, v.v. để ghi nhớ một số nội dung nhất định trong khi thiết kế trang web mới"

Tôi nghĩ rằng bạn có thể học được rất nhiều từ thiết kế của Facebook, giống như bạn có thể từ thiết kế của bất kỳ hệ thống phần mềm lớn thành công nào. Tuy nhiên, dường như với tôi rằng bạn không nên ghi nhớ thiết kế hiện tại của Facebook khi thiết kế các hệ thống mới.

Tại sao bạn muốn có thể xử lý lưu lượng truy cập mà Facebook phải xử lý? Điều lạ lùng là bạn sẽ không bao giờ phải làm thế, bất kể bạn có thể là một lập trình viên tài năng đến mức nào. Bản thân Facebook đã không được thiết kế từ đầu cho khả năng mở rộng lớn như vậy, đây có lẽ là bài học quan trọng nhất để học hỏi từ nó.

Nếu bạn muốn tìm hiểu về một hệ thống phần mềm không tầm thường, tôi có thể giới thiệu cuốn sách "Phân tích ứng dụng C #" về sự phát triển của IDE SharpDevelop. Nó đã được in, nhưng nó có sẵn miễn phí trực tuyến . Cuốn sách cung cấp cho bạn một cái nhìn thoáng qua về một ứng dụng thực tế và cung cấp những hiểu biết về IDE rất hữu ích cho một lập trình viên.


1
vâng, có lẽ không nhiều người cần phải đối phó với một lưu lượng lớn như vậy. nhưng thật tốt khi hiểu được khả năng mở rộng và cách một công ty tuyệt vời như Facebook đối phó với lưu lượng truy cập lớn như vậy. Có thể có một số giá trị thiết kế tốt có thể được học từ :)
nghìn tỷ đồng

@nanshi: Tôi đồng ý rằng nó rất hữu ích để học hỏi. Quan điểm của tôi là bạn nên ghi nhớ những gì bạn đang thiết kế. Thiết kế cho khả năng mở rộng từ ngày 1 làm cho việc thay đổi những gì chương trình làm khó hơn. Trong hầu hết các tình huống, sự đơn giản là quan trọng hơn. Ngoài ra, Facebook được duy trì bởi nhiều người. Mỗi người trong số họ chỉ phải là một chuyên gia về một phần của hệ thống.
Sương mù Jørgen

tôi thấy điểm của bạn. đồng ý :)
nghìn tỷ đồng
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.