Kiến trúc Facebook


152

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 & cách họ giải quyết chúng. Những gì họ sử dụng & lý do họ sử dụng. Làm thế nào để họ quy mô & các quyết định thiết kế cho những gì họ làm vv Chính là nền tảng để học hỏi. Hiểu biết về các trang web xử lý lưu lượng truy cập khổng lồ này cung cấp nhiều gợi ý cho 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 đang chia sẻ những gì tôi tìm thấy.

  1. Facebook Science & Social Graph (Video)
  2. Scale at Facebook
  3. Facebook Chat Architecture
  4. Facebook Blog
  5. Facebook Cassandra Architecture and Design
  6. Facebook Engineering Notes
  7. Quora - Facebook Architecture
  8. Facebook for 600M users
  9. Hadoop & its usage at Facebook
  10. Erlang at Facebook: Chat Architecture
  11. Facebook Performance Caching
  12. Facebook Connect Architecture

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

P.S. - 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 một ai đó.

+2

2. Quy mô tại Facebook (Video) - http: // www .infoq.com/presentation/Quy mô-tại-Facebook 3. Trò chuyện trên Facebook - ht tp: //www.infoq.com/news/2008/05/facebookchatarchitecture 20 aug. 102010-08-20 18:52:52

+2

Ngoài ra http://highscalability.com/ có vẻ 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 có ý tưởng bao nhiêu điều này là đúng và bao nhiêu đầu cơ, nhưng nó ra khỏi đó & chỉ là một cái gì đó để munch trên ... 20 aug. 102010-08-20 18:54:27

+1

[facebook kỹ thuật blog] (http://www.facebook.com/notes.php?id= 9445547199) đôi khi có những hiểu biết sâu sắc về kiến ​​trúc và thách thức mở rộng quy mô của họ. 03 nov. 102010-11-03 15:50:14

  0

Vì đây không phải là câu hỏi thực sự, bạn được khuyến khích chuyển thông tin sang [FB tag wiki] (http://stackoverflow.com/edit-tag-wiki/2218) để bảo toàn thông tin trong trường hợp câu hỏi này được đã xóa. Cảm ơn. 17 mar. 132013-03-17 15:08:43

  0

@Gordon cách thêm thẻ FB Wiki? Không phải thẻ 'Facebook' đã có ở đó chưa? Thats không đủ? 21 mar. 132013-03-21 18:04:21

  0

Có, đã có một thẻ wiki. Nhưng nếu câu hỏi này bị xóa, tất cả các liên kết trên trang này sẽ biến mất, vì vậy, hãy cân nhắc chuyển chúng sang http://stackoverflow.com/edit-tag-wiki/2218 21 mar. 132013-03-21 18:33:09

31

Vâng Facebook đã trải qua nhiều thay đổi và ban đầu nó không được thiết kế để có hiệu quả. Nó được thiết kế để làm 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ó thể 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. Hãy xem nó thường xuyên thay đổi như thế nào và số tiền đó không hoạt động đúng cách, hay không.

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

Nhưng nếu bạn hỏi tôi đó là một nhiệm vụ rất tham vọng và có lẽ thời gian lãng phí. Hiphop chỉ hỗ trợ rất nhiều, nó không thể chuyển đổi mọi thứ thành C++. Vậy điều này cho chúng ta biết điều gì? Vâng, nó cho chúng ta biết rằng Facebook KHÔNG tận dụng triệt để ngôn ngữ PHP. Nó không sử dụng 5.3 mới nhất và tôi sẵn sàng đặt cược vẫn còn rất nhiều đó là PHP 4 tương thích. Nếu không, 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 để JAVA qua những thứ như Resin/Quercus. Một điều nữa 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 cũng sẽ không thể chuyển đổi mã đó thành C++ hoặc Java được nữa. Tuy nhiên ... Chúng ta hãy xem các mô-đun PHP. Chúng được biên dịch bằng C++. Vì vậy, nếu bạn có thể xây dựng các mô-đun PHP làm việc (như phân tích cú pháp XML, vv) thì bạn về cơ bản (trừ đi một số tương tác) làm việc ở cùng một tốc độ.Tất nhiên bạn không thể chỉ tạo ra một mô-đun PHP cho mọi nhu cầu có thể và toàn bộ ứng dụng của bạn bởi vì bạn sẽ phải biên dịch lại và sẽ khó mã hơn nhiều, v.v.

Tuy nhiên ... Có một số PHP tiện dụng các mô-đun có thể giúp các mối quan tâm về tốc độ. Mặc dù vào cuối ngày, chúng tôi có điều tuyệt vời này được gọi là "đám mây" và với nó, chúng tôi có thể mở rộng các ứng dụng của chúng tôi (bao gồm 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ỉ giảm giá của nó (một lần nữa) nói về.

Vì vậy, miễn là bạn mã ứng dụng PHP của bạn xung quanh ý tưởng rằng nó sẽ cần đến một quy mô ngày ... Sau đó, tôi nghĩ rằng bạn đang tốt và tôi không thực sự chắc chắn tôi thậm chí sẽ nhìn vào Facebook và những gì họ đã làm bởi vì khi họ đã làm nó, nó là một thế giới hoàn toàn khác và bây giờ cố gắng giữ cơ sở hạ tầng đó và duy trì nó ... Vâng, bạn 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 rất muốn giới thiệu xem xét các khuôn khổ 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. Bạn có nhiều khả năng phân phát nội dung từ cơ sở dữ liệu, vì vậy hãy xem MongoDB và các loại cơ sở dữ liệu khác có lược đồ ít hơn và định hướng tài liệu. Chúng nhanh hơn rất nhiều và tốt hơn cho loại trang web/ứng dụng "phổ biến nhất".

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 công nghệ này. Đối với thành công như Facebook, tôi thành thật sẽ không nhìn vào chúng cho "làm thế nào" để 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ó (rất) những người tài năng làm việc ở đó đang giải quyết (vấn đề) của 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à rằng nó không 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ọ, bạn có thể 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 này chỉ vì mục đích tò mò. Đôi khi bạn nhìn vào một phần của công nghệ và nói "hey! Đó là mát mẻ" ... 26 nov. 102010-11-26 15:50:43

  0

Ngẫu nhiên xem xét lại câu trả lời của tôi ở đây hai điều. # 1, tôi tin C và không C++ kỹ thuật của tôi xấu ... Nhưng quan trọng hơn # 2, Phalcon là một khuôn khổ PHP mới hơn mà chuyển đổi rất nhiều xuống để mở rộng PHP cho tốc độ. Mặc dù nhiều mã của riêng bạn sẽ không chạy trong C của khóa học và bất kỳ thư viện nào khác mà bạn sử dụng cũng sẽ không thể. Tuy nhiên, đó là một ý tưởng thông minh giống như HipHop để ép ra một số hiệu suất phụ. 12 mar. 142014-03-12 21:26:17

  0

... và ở đây chúng tôi đi một lần nữa với ace lên tay áo của họ. Nhìn lại năm sau, chúng tôi có ngôn ngữ Hack này (sinh ra từ các công cụ HipHop với IDE riêng của nó không kém). Nó có phát triển tốt hơn không? Chúng ta sẽ thấy. Nó có thể giúp bạn được 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. Nó chỉ mất khoảng 4 năm =) Mặc dù cá nhân, tôi sẽ không quá nhanh để uống kool-viện trợ. 11 apr. 142014-04-11 16:04:09

+1

Nhìn vào câu trả lời ngay bây giờ, tôi ngạc nhiên trước 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 mới nhất của PHP, Facebook còn phát triển HHVM thậm chí còn nhanh hơn. 30 oct. 142014-10-30 20:24:46

  0

Vâng, đôi khi tôi nhận được thông báo đưa tôi trở lại điều này. Thật tuyệt vời khi thấy mọi thứ đã thay đổi như thế nào 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ộ JS tuyệt vời 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 rất nhiều tiền và nhân viên ... Tại sao không tái đầu tư vào R & D tại một thời điểm nào đó, phải không? 27 oct. 152015-10-27 21:09:02


6

"Biết về các trang web mà xử lý giao thông lớn như vậy cho rất nhiều gợi ý cho các kiến ​​trúc sư vv để giữ trong tâm trí những thứ nhất định trong khi thiết kế trang web mới"

Tôi nghĩ có lẽ bạn có thể học hỏi 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, có vẻ như với tôi rằng bạn nên không lưu ý 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ý? Tỷ lệ cược là bạn sẽ không bao giờ phải, dù bạn có tài năng như thế nào. Bản thân Facebook không được thiết kế ngay từ đầu cho khả năng mở rộng lớn như vậy, mà 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 "Inside a C# Application" về sự phát triển của IDE SharpDevelop. Nó được in ra, nhưng nó có sẵn cho trực tuyến miễn phí. 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ề các IDE hữu ích cho một lập trình viên.

+1

yea, có lẽ không nhiều người ở tất cả cần phải đối phó với một lưu lượng truy cập lớn như vậy. nhưng nó luôn luôn tốt để hiểu khả năng mở rộng và làm thế nào một công ty lớn như Facebook giao dịch với một lưu lượng truy cập lớn như vậy. Có thể có một số thành tích thiết kế tốt có thể học được từ :) 10 jan. 132013-01-10 09:56:08

  0

@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ế. Việc thiết kế cho khả năng mở rộng từ ngày 1 làm cho việc thay đổi chương trình trở nên khó khăn hơn. Trong hầu hết các trường hợp, 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 trên một phần của hệ thống. 10 jan. 132013-01-10 15:19:28

  0

tôi thấy quan điểm của bạn. đồng ý :) 11 jan. 132013-01-11 19:40:07


14

Facebook đang sử dụng LAMP structure. 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 ĐÈN Facebook sử dụng một số công nghệ, để hỗ trợ số lượng lớn các yêu cầu, như

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

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

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

  4. HipHop for PHP - Đây là máy biến mã nguồn cho mã tập lệnh PHP và được tạo để lưu tài nguyên máy chủ. HipHop chuyển đổi mã nguồn PHP thành C++ tối ưu. Sau khi thực hiện điều này, nó sử dụng g ++ để biên dịch nó thành mã máy.

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

  1. How Does Facebook Work?
  2. Data Management, Facebook-style
  3. Facebook database design?
  4. Facebook wall's database structure
  5. Facebook "like" data structure