페이스 북 아키텍처
Facebook의 아키텍처, 문제 및 해결 방법에 대한 기사 / 정보를 요구하고 있습니다. 그들이 무엇을 사용하고 왜 사용하는지. 그들이 어떻게 확장하고 무엇을하는지에 대한 설계 결정은 무엇인가. 배우는 주요 토대. 이러한 대규모 트래픽을 처리하는 사이트를 알면 건축가 등이 새로운 사이트를 디자인하는 동안 특정 사항을 명심할 수있는 많은 포인터를 제공합니다. 내가 찾은 것을 공유하고 있습니다.
- Facebook 과학 및 소셜 그래프 (비디오)
- Facebook에서 확장
- 페이스 북 채팅 아키텍처
- 페이스 북 블로그
- Facebook Cassandra 아키텍처 및 디자인
- 페이스 북 엔지니어링 노트
- Quora-Facebook 아키텍처
- 600M 사용자를위한 Facebook
- 하둡 및 Facebook에서의 사용법
- Facebook의 Erlang : 채팅 아키텍처
- 페이스 북 성능 캐싱
- 페이스 북 연결 아키텍처
링크가 2 개 더 있지만이 사이트의 제한으로 인해 게시 할 수 없습니다. 또한 더 좋은 것이 있으면 공유하십시오 (Facebook에만 관련되어 있지 않아도 됨).
추신- 나는이 연구를 공유 할 좋은 장소를 찾을 수 없었기 때문에이 이니셔티브. 이것이 누군가를 돕기를 바랍니다.
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은 LAMP 구조를 사용하고 있습니다. Facebook의 백엔드 서비스는 C ++, Java, Python 및 Erlang을 포함한 다양한 프로그래밍 언어로 작성되며 요구 사항에 따라 사용됩니다. LAMP Facebook에서는 다음과 같은 많은 요청을 지원하기 위해 일부 기술을 사용합니다.
Memcache -RAM에 데이터와 객체를 캐싱하여 동적 데이터베이스 기반 웹 사이트 (예 : Facebook)를 가속화하여 읽기 시간을 단축하는 데 사용되는 메모리 캐싱 시스템입니다. Memcache는 Facebook의 기본 캐싱 형태이며 데이터베이스로드를 완화하는 데 도움이됩니다. 캐싱 시스템을 사용하면 Facebook이 데이터를 호출하는 속도만큼 빠릅니다.
Thrift (프로토콜) -확장 가능한 언어 간 서비스 개발을위한 간단한 원격 프로 시저 호출 프레임 워크입니다. Thrift는 C ++, PHP, Python, Perl, Java, Ruby, Erlang 등을 지원합니다.
Cassandra (데이터베이스) -많은 서버에 분산 된 대량의 데이터를 처리하도록 설계된 데이터베이스 관리 시스템입니다.
HipHop for PHP -PHP 스크립트 코드 용 소스 코드 변환기이며 서버 리소스를 절약하기 위해 만들어졌습니다. HipHop은 PHP 소스 코드를 최적화 된 C ++로 변환합니다. 이 작업을 수행 한 후 g ++를 사용하여 머신 코드로 컴파일합니다.
더 자세히 살펴보면이 질문에 대한 답이 더 길어집니다. 다음 게시물에서 더 많은 것을 이해할 수 있습니다.
"대규모의 트래픽을 처리하는 사이트를 알면 건축가 등이 새로운 사이트를 디자인 할 때 특정 정보를 염두에 둘 수있는 많은 정보를 제공합니다."
성공적인 대규모 소프트웨어 시스템의 디자인에서와 마찬가지로 Facebook의 디자인에서 많은 것을 배울 수 있다고 생각합니다. 그러나, 당신이해야한다고 날 것으로 보인다 없습니다 새로운 시스템을 설계 할 때 염두에 페이스 북의 현재 디자인을 유지.
Facebook이 처리해야하는 트래픽을 처리 할 수있는 이유는 무엇입니까? 확률은 프로그래머가 아무리 재능이 있더라도 결코 할 필요가 없다는 것입니다. Facebook 자체는 그러한 확장 성을 위해 처음부터 설계되지 않았으며, 아마도 그로부터 배우는 가장 중요한 교훈 일 것입니다.
If you want to learn about a non-trivial software system I can recommend the book "Dissecting a C# Application" about the development of the SharpDevelop IDE. It is out of print, but it is available for free online. The book gives you a glimpse into a real application and provides insights about IDEs which are useful for a programmer.
참고URL : https://stackoverflow.com/questions/3533948/facebook-architecture
'Programing' 카테고리의 다른 글
소규모 개발 그룹 (1-2 프로그래머)에게 버전 관리가 필요합니까? (0) | 2020.05.29 |
---|---|
Bogosort (일명 Monkey Sort)보다 나쁜 정렬 알고리즘이 있습니까? (0) | 2020.05.29 |
JavaScript 클로저가 가비지 수집되는 방법 (0) | 2020.05.29 |
오픈 소스 프로젝트를 호스팅 할 수있는 곳 : CodePlex, Google Code, SourceForge? (0) | 2020.05.29 |
이클립스 용 git 플러그인은 얼마나 안정적입니까? (0) | 2020.05.29 |