페이스 북 아키텍처 [폐쇄]


169

Facebook의 아키텍처, 문제 및 해결 방법에 대한 기사 / 정보를 요구하고 있습니다. 그들이 무엇을 사용하고 왜 사용하는지. 그들이 어떻게 확장하고 무엇을하는지에 대한 설계 결정은 무엇인가. 배우는 주요 토대. 이러한 대규모 트래픽을 처리하는 사이트를 알면 건축가 등이 새로운 사이트를 디자인하는 동안 특정 사항을 명심할 수있는 많은 포인터를 제공합니다. 내가 찾은 것을 공유하고 있습니다.

  1. Facebook 과학 및 소셜 그래프 (비디오)
  2. Facebook에서 확장
  3. 페이스 북 채팅 아키텍처
  4. 페이스 북 블로그
  5. Facebook Cassandra 아키텍처 및 디자인
  6. 페이스 북 엔지니어링 노트
  7. Quora-Facebook 아키텍처
  8. 600M 사용자를위한 Facebook
  9. 하둡 및 Facebook에서의 사용법
  10. Facebook의 Erlang : 채팅 아키텍처
  11. 페이스 북 성능 캐싱
  12. 페이스 북 연결 아키텍처

링크가 2 개 더 있지만이 사이트의 제한으로 인해 게시 할 수 없습니다. 또한 더 좋은 것이 있으면 공유하십시오 (Facebook에만 관련되어 있지 않아도 됨).

추신- 나는이 연구를 공유 할 좋은 장소를 찾을 수 없었기 때문에이 이니셔티브. 이것이 누군가를 돕기를 바랍니다.


2
2. 페이스 북에서의 확장 (비디오) -infoq.com/presentations/Scale-at-Facebook 3. 페이스 북 채팅 -infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju

2
또한 highscalability.com 은 많은 인기 사이트의 아키텍처에 대해 배울 수있는 좋은 장소 인 것 같습니다. 이것이 얼마나 진실인지, 얼마나 투기
적인지 모르지만

1
페이스 북의 엔지니어링 블로그는 때때로 자신의 건축과 스케일링 문제에 대한 중요한 통찰력을 가지고있다.
콜린 피커드

이것은 기술적으로 실제적인 질문이 아니므 로이 질문이 삭제 될 경우 정보를 FB 태그 위키 로 이동하여 정보 를 보존하는 것이 좋습니다 . 감사.
Gordon

@ 고든 FB 위키 태그를 추가하는 방법? 'Facebook'태그가 이미 없습니까? 충분하지 않습니까?
Srikar Appalaraju

답변:


33

Facebook은 많은 변화를 겪었으며 원래는 효율적으로 설계되지 않았습니다. 그것은 일을하도록 설계되었습니다. 나는 코드가 어떻게 생겼는지 전혀 모른다. 아마도 명백한 보안 및 저작권상의 이유로 코드에 대한 많은 정보를 찾지는 못하지만 API를 살펴보십시오. 얼마나 자주 변경되고 얼마나 자주 제대로 작동하지 않는지 살펴보십시오.

소매의 가장 큰 에이스는 힙합이라고 생각합니다. http://developers.facebook.com/blog/post/358 HipHop을 직접 사용할 수 있습니다 : https://github.com/facebook/hiphop-php/wiki

그러나 당신이 나에게 묻는다면 그것은 매우 야심적이고 아마도 시간을 낭비하는 일입니다. 힙합은 너무 만 지원하므로 모든 것을 C ++로 변환 할 수는 없습니다. 이것이 무엇을 말해줍니까? 글쎄, 그것은 페이스 북이 PHP 언어를 완전히 이용하고 있지 않다는 것을 말해 준다. 최신 5.3을 사용하지 않고 PHP 4와 호환되는 것이 많이있을 것입니다. 그렇지 않으면 HipHop을 사용할 수 없었습니다. HipHop은 좋은 아이디어이며 성장하고 확장해야하지만 현재 상태에서는 새로운 PHP 앱을 만드는 많은 사람들에게 실제로 유용하지 않습니다.

Resin / Quercus와 같은 것들을 통해 PHP에 JAVA가 있습니다. 다시 말하지만, 모든 것을 지원하지는 않습니다 ...

비표준 PHP 모듈을 사용하면 해당 코드를 C ++ 또는 Java로 변환 할 수 없습니다. 그러나 ... PHP 모듈을 살펴 보자. 그것들은 C ++로 컴파일됩니다. 따라서 XML 구문 분석과 같은 작업을 수행하는 PHP 모듈을 빌드 할 수 있다면 기본적으로 동일한 속도로 작동합니다 (일부 상호 작용 제외). 물론 재 컴파일해야하고 코딩하기가 훨씬 어려울 수 있기 때문에 가능한 모든 필요와 전체 앱에 대해 PHP 모듈을 만들 수는 없습니다.

그러나 ... 속도 문제를 도울 수있는 편리한 PHP 모듈이 있습니다. 하루가 끝나면 "클라우드"로 알려진이 멋진 기능을 사용할 수 있지만 더 이상 중요하지 않은 애플리케이션 (PHP 포함)을 확장 할 수 있습니다. 하드웨어가 점점 더 저렴 해지고 있습니다. 아마존은 가격을 다시 떨어 뜨렸다.

따라서 하루 규모로 확장해야한다는 아이디어를 중심으로 PHP 앱을 코딩하는 한 ... 당신이 괜찮다고 생각하고 페이스 북과 그들이 언제했는지에 대해 확신하지 못합니다. 그들은 완전히 다른 세상이었고 이제는 그 인프라를 유지하고 유지하려고 노력하고 있습니다 ... 음, 당신은 HipHop과 같은 것을 얻습니다.

이제 HipHop이 어떻게 도와 드릴까요? 그렇지 않습니다. 할 수 없습니다. PHP 5.3을 사용할 수 있습니다. PHP 5.3 프레임 워크와 PHP 5.3이 SPL 라이브러리와 함께 테이블에 제공하는 모든 새로운 이점을 살펴보고 데이터베이스도 생각하는 것이 좋습니다. 데이터베이스에서 콘텐츠를 제공하는 경우가 많으므로 MongoDB 및 스키마가없고 문서 지향적 인 다른 유형의 데이터베이스를 확인하십시오. 가장 "일반적인"유형의 웹 사이트 / 앱에 대해 훨씬 빠르고 좋습니다.

Foursquare 및 Smugmug와 같은 새로운 회사와 새로운 기술을 사용하는 다른 회사 및 사용 방법을 살펴보십시오. Facebook만큼 성공을 거두기 위해 효율적인 웹 사이트 / 앱을 구축하는 방법에 대해서는 솔직히 살펴 보지 않았습니다. 나는 그들에게 문제를 창의적으로 해결하는 (매우) 재능있는 사람들이 없다고 말하는 것이 아닙니다 ... 또한 페이스 북은 일반적으로 좋은 생각이 아니며 그렇지 않다고 말하는 것도 아닙니다. 성공하고 아이디어를 얻지 말아야합니다 .... 그냥 전체 소스 코드를 볼 수 있다면 이점을 얻지 못할 것입니다.


1
당신이 말한 대부분의 내용에 동의했습니다. 이러한 링크는 호기심을위한 것입니다. 때때로 당신은 기술 조각을보고 "이봐 요! 멋지다"고 말합니다.
Srikar Appalaraju

여기에 두 가지를 무작위로 다시 방문하십시오. # 1, 나는 C가 아니라 C ++가 내 기술적 나쁜 것이라고 믿는다. 그러나 더 중요한 것은 # 2, Phalcon은 속도를 위해 PHP 확장으로 많이 변환하는 새로운 PHP 프레임 워크입니다. 물론 많은 코드가 C에서 실행되지는 않지만 사용하는 다른 라이브러리는 그렇지 않을 것입니다. 그러나 약간의 추가 성능을 짜내는 것은 HipHop과 같은 영리한 아이디어입니다.
Tom

... 그리고 우리는 다시 에이스와 함께 소매로 올라갑니다. 몇 년 후, 우리는이 핵 언어를 가지고 있습니다 (HipHop에서 자체 IDE를 사용하여 탄생했습니다). 더 나은 것으로 성장 했습니까? 우리는 볼 수 있습니다. 도움이 될까요? 어쩌면 이제는 당신도 페이스 북처럼 만들 수있을 것 같습니다. 비록 4 년 밖에 걸리지 않았다 =) 개인적으로, 나는 쿨 에이드를 마시는 것이 그렇게 빠르지는 않을 것이다.
Tom

1
지금 답을 보면 기술 세계에서 상황이 어떻게 나타나는지 놀랐습니다. HipHop은 최신 버전의 PHP를 지원했을뿐만 아니라 HHVM도 개발했습니다.
Gopi Krishna

그렇습니다. 때때로 알림 메시지가 표시됩니다. 상황이 어떻게 바뀌 었는지, HipHop이 HHVM으로 어떻게 발전했는지를 보는 것은 정말 대단합니다 (Facebook이 어떻게 덮개 아래에서 자신을 재발견하는지)-놀라운 JS 발전을 모두보십시오. 이해가 되네요. 엄청난 돈과 직원을 보유한 대기업으로 성공한 경우 ... 어떻게 R & D에 재투자하지 않는가?
Tom

18

Facebook은 LAMP 구조를 사용하고 있습니다. Facebook의 백엔드 서비스는 C ++, Java, Python 및 Erlang을 포함한 다양한 프로그래밍 언어로 작성되며 요구 사항에 따라 사용됩니다. LAMP Facebook에서는 다음과 같은 많은 요청을 지원하기 위해 일부 기술을 사용합니다.

  1. Memcache -RAM에 데이터와 개체를 캐싱하여 동적 데이터베이스 기반 웹 사이트 (예 : Facebook)를 가속화하여 읽기 시간을 단축하는 데 사용되는 메모리 캐싱 시스템입니다. Memcache는 Facebook의 기본 캐싱 형태이며 데이터베이스로드를 완화하는 데 도움이됩니다. 캐싱 시스템을 사용하면 Facebook이 데이터를 호출하는 속도만큼 빠릅니다.

  2. Thrift (프로토콜) -확장 가능한 언어 간 서비스 개발을위한 경량 원격 프로 시저 호출 프레임 워크입니다. Thrift는 C ++, PHP, Python, Perl, Java, Ruby, Erlang 등을 지원합니다.

  3. Cassandra (데이터베이스) -많은 서버에 분산 된 대량의 데이터를 처리하도록 설계된 데이터베이스 관리 시스템입니다.

  4. PHP 용 HipHop -PHP 스크립트 코드 용 소스 코드 변환기이며 서버 리소스를 절약하기 위해 만들어졌습니다. HipHop은 PHP 소스 코드를 최적화 된 C ++로 변환합니다. 이 작업을 수행 한 후 g ++를 사용하여 머신 코드로 컴파일합니다.

더 자세히 살펴보면이 질문에 대한 답이 더 길어집니다. 다음 게시물에서 더 많은 것을 이해할 수 있습니다.

  1. Facebook은 어떻게 작동합니까?
  2. 데이터 관리, Facebook 스타일
  3. 페이스 북 데이터베이스 디자인?
  4. 페이스 북 월의 데이터베이스 구조
  5. 페이스 북 "like"데이터 구조

7

"대규모의 트래픽을 처리하는 사이트를 알면 건축가 등이 새로운 사이트를 디자인 할 때 특정 정보를 염두에 둘 수있는 많은 정보를 제공합니다."

성공적인 대규모 소프트웨어 시스템의 설계에서와 마찬가지로 Facebook의 설계에서 많은 것을 배울 수 있다고 생각합니다. 그러나, 당신이해야한다고 날 것으로 보인다 없습니다 새로운 시스템을 설계 할 때 염두에 페이스 북의 현재 디자인을 유지.

Facebook이 처리해야하는 트래픽을 처리 할 수있는 이유는 무엇입니까? 확률은 프로그래머가 아무리 재능이 있더라도 결코 할 필요가 없다는 것입니다. Facebook 자체는 그러한 확장 성을 위해 처음부터 설계되지 않았으며, 아마도 그로부터 배우는 가장 중요한 교훈 일 것입니다.

사소한 소프트웨어 시스템에 대해 배우고 싶다면 SharpDevelop IDE 개발에 관한 "C # 애플리케이션 해부"책을 추천 할 수 있습니다. 인쇄되지 않았지만 온라인에서 무료사용할 수 있습니다 . 이 책은 실제 응용 프로그램을 엿볼 수있게 해주 며 프로그래머에게 유용한 IDE에 대한 통찰력을 제공합니다.


1
그렇습니다. 아마도 많은 사람들이 그렇게 많은 트래픽을 처리해야 할 필요는 없습니다. 그러나 확장 성을 이해하고 Facebook과 같은 훌륭한 회사가 이러한 많은 트래픽을 처리하는 방법을 이해하는 것이 좋습니다. 좋은 디자인의 장점은 :)에서 배울 수있다 할 수있다

@nanshi : 배우는 것이 유용하다는 데 동의합니다. 내 요점은 당신이 디자인하고있는 것을 명심해야한다는 것이다. 첫날부터 확장 성을 설계하면 프로그램의 기능을 변경하기가 더 어려워집니다. 대부분의 경우 단순성이 더 중요합니다. 또한 Facebook은 많은 사람들이 관리합니다. 이러한 사람들은 모두 시스템의 일부에 대한 전문가 여야합니다.
Jørgen Fogh 2016 년

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