• Страница 1 из 1
  • 1
Архитектура больших проектов: Facebook
Написал 14.08.2015 в 00:21 1Offline (Ур. 6)
Архитектура больших проектов: Facebook

На том уровне, на котором работает Facebook,традиционные подходы к организации работы вебсайтов не работают вообще или, как минимум, не обеспечивают должной производительности. Огромная посещаемость проекта бросила вызов инженерам Facebook необходимостью поддерживать работоспособность сайта при почти полумиллиарде активных пользователей. Эта
статья описывает программное обеспечение и техники, благодаря которым это стало возможно.

Задачи:

·            Сайт Facebook имеет около 570 миллиардов просмотров в месяц (по информацииот Google Ad Planner)

·            На Facebook загружено больше фотографий, чем на все другие сервисыдля обмена изображениями вместе взятые (включая сайты вроде Flickr)

·            Каждый месяц на серверы Facebook загружается более трех миллиардовфотографий

·            Серверы Facebook отдают на просмотр около 1.2 миллиона фотографийв секунду (без учета фотографий, отдаваемых сетью доставки контента Facebook)

·            Каждый месяц пользователи обмениваются более чем 25 миллиардамиединицами информации (обновления статуса, комментарий и т.д.)

·            На май месяц 2010 г. проект Facebook имел более 30.000 серверов онлайн

Программное обеспечение Facebook
В некотором роде Facebook все еще работает на LAMPстеке, но размеры проекта потребовали введения в строй многих других элементов и сервисов. А также изменения работы существующих.

Например:

·            Facebook по-прежнему использует PHP, но перед исполнением скриптыкомпилируются в родной код процессора, ускоряя таким образом работу

·            Серверы Facebook работают на Linux, но код Linux был оптимизирован(в основном в его сетевой части)

·            Facebook использует MySQL, но в основном как хранилищеключ-значение. Все соединения данных и бизнес-логика вынесена на уровень скриптов, поскольку так гораздо проще выполнять оптимизацию (по другую сторону
уровня Memcached)

В проекте есть системы, написанные с нуля.Например, Haystack — высокомасштабируемое хранилище объектов, которое
используется для хранения фотографий. Scribe — пример другой системы, которая обеспечивает ведение протоколов в масштабе Facebook.

Итак, обо всем по порядку.

Memcached
Memcached — один из самых широкоизвестных проектовв Интернете. Его распределенная система кеширования информации используется как кеширующий слой между веб-серверами и MySQL (поскольку доступ к базам данных относительно медленен). Прошли годы и Facebook произвел огромное количество модификаций кода Memcached и сопутствующего ПО (например, оптимизацию сетевой подсистемы). В Facebook работают тысячи Memcached серверов сдесятками терабайт кешированных данных в любой момент времени. Наверное, это самый большой в мире массив Memcached серверов.

HipHop для PHP
 HipHop конвертирует скрипты на PHP в исходные коды на C++, которые затем компилируются для обеспечения хорошей производительности. Это позволяет Facebook получать большую отдачу от меньшего количества серверов, поскольку PHP в Facebook используется практически повсеместно.Небольшая группа инженеров (в начале их былотолько трое) разработала HipHop за 18 месяцев и теперь он работает на серверах проекта.

Haystack
Haystack — это высокопроизводительная системахранения / получения фотографий (строго говоря, Haystack — хранилище объектов, поэтому он может хранить любые данные, а не только фотографии). На долю этой системы выпадает огромное количество работы. На Facebook загружено более 20 миллиардов фотографий и каждая сохраняется в четырех различных разрешениях, что в итоге дает нам более 80 миллиардов единиц фотографий. Haystack должен не просто уметь хранить фото, но иотдавать их очень быстро. Как мы упоминали ранее, Facebook отдает более 1,2 миллиона фотографий в секунду. Это количество не включает в себя фотографии, которые отдаются системой доставки контента Facebook и постоянно растет.

BigPipe
BigPipe — система динамической доставкиweb-страниц, разработанная в Facebook. Она используется для доставки каждой
вебстраницы секциями (которые называются pagelets) для оптимизации производительности. Например, окно чата, лента новостей и другие частистраницы запрашиваются отдельно. Их можно получать параллельно, что увеличивает производительность и позволяет пользователям использовать вебсайт даже в том случае, если какая-то его часть отключена или неисправна.

Cassandra
Cassandra — распределенное отказоустойчивоехранилище данных. Это одна из систем, которую всегда упоминают, говоря о NoSQL. Cassandra стала проектом с открытым исходным кодом и даже стала дочерним проектом Apache Foundation. На Facebook мы используем ее для поиска по папке Входящие. В принципе, ее используют многие проекты. Например, Digg. Планируется ее использование в проекте Pingdom.

Scribe
Scribe — удобная система протоколирования, котораяиспользуется сразу для нескольких вещей одновременно. Она была разработана для обеспечения ведения протоколов в масштабе всего Facebook и поддерживает добавление новых категорий событий, как только они появляются (на Facebook их сотни).

Hadoop и Hive
Hadoop — реализация алгоритма map-reduce соткрытым исходным кодом, позволяющая производить вычисления на огромных объемах данных. В Facebook мы используем его для анализа данных (как вы понимаете, в Facebook их достаточно). Hive был разработан в Facebook и позволяет использовать SQL запросы для получения информации от Hadoop, что облегчает работу непрограммистов. И Hadoop и Hive имеют открытые исходные коды иразвиваются под эгидой Apache Foundation. Их использует большое количество других проектов. Например, Yahoo и Twitter.

Thrift
Facebook использует различные языкипрограммирования в различных компонентах системы. PHP используется как фронт-энд, Erlang для чата, Ява и C++ тоже не остались без дела. Thrift — кросс-языковой фреймворк, который связывает все части системы в единое целое, позволяя им общаться друг с другом. Thrift разрабатывается как проект с открытым исходным кодом и в него уже добавлена поддержка некоторых других языков программирования.

Varnish
Varnish — HTTP акселератор, который может служитьв качестве балансировщика нагрузки и кеша содержимого, которое затем может доставляться с большой скоростью. Facebook использует Varnish для доставки фотографий и картинок профилей, выдерживая нагрузку в миллиарды запросов в день. Как и все, что используется Facebook Varnish — программное обеспечение с открытым исходным кодом

Кое-что другое
Мы рассказали вам о некоторых программныхкомплексах, которые позволяют Facebook держать нагрузку. Но управление такой большой системой — сложная задача. Поэтому, мы расскажем вам еще кое о чем, что позволяет проекту работать стабильно.

Ступенчатые релизы и неявная активация новыхфункций В Facebook используется система, называемаяGateKeeper, которая позволяет обслуживать различных пользователей с помощью различных версий исходного кода системы. Это позволяет проводить релизы пошагово, активировать некоторые функции только для работников Facebook и так далее. GateKeeper также позволяет Facebook выполнятьнеявную активацию новых функций для выполнения, например, нагрузочного тестирования и выявления медленно работающих компонентов системы. Неявная активация включает некоторую функцию или возможность, но не показывает ее в интерфейсе пользователя. Обычно неявная активация выполняется за две недели до того, как новая возможность предоставляется пользователям.

Тест производительности системы
Facebook производит тщательный мониторингпроизводительности системы и, что интересно, производится мониторинг
производительности исполнения каждой PHP функции системы. Это обеспечивается использованием XHProf.

Частичное отключение функций
Если проект начинает работать медленно, мы можемотключить некоторые возможности (из достаточно большого количества) для того, чтобы поднять производительность ключевых компонентов системы.

О чем мы еще не сказали
Мы не упоминали об аппаратной части Facebook вданной статье, но, конечно, это достаточно важдо для масштабируемых проектов. Например, Facebook использует систему доставки контента для доставки его статических элементов. Конечно, есть еще большой датацентр в Орегоне для увеличения масштабируемости путем ввода еще большего количества серверов.
Помимо всего прочего, у нас еще много всякогоразного программного обеспечения работает. Но нам кажется, что нам удалось рассказать вам о некоторых интересных решениях, которые задействованы в проекте. Facebook любит проекты с открытым исходным кодом Эта статья не была бы законченной, если бы мы несказали вам, как Facebook любит проекты с открытым исходным кодом или просто сказали бы, что “мы любим проекты с открытым исходным кодом”. Facebook не только участвует в разработке такихпроектов как Linux, Memcached, MySQL, Hadoop и других, но и выпускает свои внутренние разработки как ПО с открытым исходным кодом. Например, HipHop, Cassandra, Thrift и Scribe. Facebook также открыл проект Tornado, высокопроизводительный фреймворк, разработанный командой, создавшей FriendFeed (этот проект был куплен Facebook в августе 2009). Список проектов, в которых участвует Facebook можно найти на этой странице
.

Еще больше проблем
Facebook растет с огромной скоростью.Пользовательская база растет почти экспотенциально и приближается к полумиллиарду активных пользователей и кто знает, что будет в конце года. Прирост составляет почти 100 миллионов пользователей каждые полгода. В Facebook даже работает специальная команда“роста”, которая постоянно старается расширить аудиторию проекта.
Постоянный рост означает, что Facebook будетсталкиваться с различными проблемами в области производительности с ростом числа поисков, просмотров, загружаемых картинок и так далее. Но это часть ежедневной работы сервиса. Инженеры Facebook будут искать новые пути увеличения масштабируемости проекта (и речь идет не только о добавлении все новых и новых серверов). Например, система хранения фотографий Facebook переписывалась несколько раз с ростом сайта. Посмотрим, с чем придется столкнуться инженерамFacebook в следующий раз. Можно спорить, что с чем-то очень интересным. В конце концов они работают с проектом величины, о которой можно только мечтать, с сайтом, который имеет больше пользователей, чем жителей в большинстве стран. Когда вы имеете дело с тами проектом, лучше бы вам мыслить креативно.
Поделиться:

Вступайте в нашу группу Вконтакте и канал Telegram

Продажа сообществ, аккаунтов в соцсетях
Сообщение отредактировал power2000 - Пятница, 14.08.2015, 00:41
  • Страница 1 из 1
  • 1
Поиск: