Your SlideShare is downloading. ×
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Инфраструктура социального проекта
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Инфраструктура социального проекта

3,778

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,778
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Инфраструктура социального проекта Александр Москалюк, Facebook, Inc. [email_address]
  • 2. Немного о Facebook
    • 67 миллионов активных пользователей
      • Считаем только активные логины за последние 30 дней
    • На сайте около 55,000 сетей
      • Вузы, компании, регионы
    • 45% пользователей возвращаются на сайт ежедневно
      • Средняя сессия длится 25 мин.
  • 3. Немного о Facebook
    • 65 млрд. показов страниц в месяц
      • 5 - ый самый посещаемый сайт в мире (ComScore)
      • 2-ой по посещаемости социальный сайт
      • 1-ый по посещаемости фото-сайт
      • 14 миллионов новых фото ежедневно
      • По трафику это фото-сайт #1, превышает сумму трафика #2, #3, #4
      • 20,000 приложений
      • 95% пользователей попробовали минимум одно приложение
  • 4.  
  • 5. Архитектура проекта
    • Fedora Core
    • Apache
    • MySQL
    • PHP для Web- сайта
    • C++ для различных оффлайновых систем
  • 6. Что используется в Facebook
    • Python для обработки данных
    • Erlang для чат-серверов
    • Hadoop для параллельного процессинга
    • Memcached для кэширования
  • 7. Что мы пишем сами
    • Memcached – основные разработчики
    • PHP – в основном работа над некоторыми ошибками
    • Apache – список патчей для Apache и PHP лежит здесь http://mirror.facebook.com/facebook/patches/
    • Thrift – «экономная» архитектура «сервер-клиент» для ряда языков программирования
  • 8. Пишем сами
    • PHPEmbed – библиотека для C++, позволяющая получить доступ к интерпретатору PHP и функциям сайта
    • Phpsh – оболочка для получения доступа к функциям сайта с командной строки
    • Facebook Animation - библиотека для JavaScript
    • Flvtool++ - инструмент для работы с видео FLV
    • Hive – примитивная SQL- модель для Hadoop
  • 9. Memcached в Facebook
    • В мае 2007 г. 200 серверов, 4 процессорных ядра на каждом
    • В апреле 2008 г. 1,008 серверов, 4 ядра на сервер
    • Memcached хранит информацию, которая полезна для сайта – переменные и массивы в PHP
      • Основная задача – уменьшить к-во запросов к MySQL
  • 10. Memcached в Facebook
    • Переписана функция доступа к Memcached
      • Для получения данных вызываем единую функцию
      • Функция смотрит в Memcached, если данные есть там, то возвращает их
      • Иначе делаем запрос к БД, заодно кэшируем данные на будущее
      • Итого каждый запрос к Memcached кроме ключа содержит функцию, которая делает запрос к БД
    • Между дата-центрами делаем репликацию Memcached, сродни репликации MySQL
  • 11. LAMP + сервисы
    • Сайт написан на PHP
    • Вспомогательные сервисы написаны не на PHP (C++, Java, др.)
    • Сервисы часто используют Memcached для общения с сайтом – «подогревают» кэши для пользователей, которые заходят на сайт
    • Иногда данные, сгенерированные C++ -сервером, нужно прочитать в Java- программе
  • 12. LAMP + сервисы
  • 13. Facebook Thrift
    • Facebook Thrift - http://developers.facebook.com/thrift/
    • Кто еще умеет отсылать удаленные запросы?
      • SOAP – куча XML
      • CORBA – перегружена
      • COM – в основном для Windows
      • Буферы для протоколов – закрытая технология от Google
  • 14. Принципы работы Thrift
    • Создаем один файл - .thrift
    • Получаем клиентские и серверные методы для PHP, C++, Java и Python
  • 15. Facebook Thrift
    • #!/usr/local/bin/thrift --php –cpp –-java –py
    • enum GENDER {
    • MALE = 1,
    • FEMALE = 2,
    • ROBOT = 3
    • }
    • struct Profile {
    • 1: i64 id,
    • 2: string name,
    • 3: GENDER g
    • }
  • 16. Определение сервиса
    • service ProfileCache {
    • void setProfile(1: Profile p),
    • Profile getProfile(1: i32 id)
    • }
  • 17. Что это нам дало? - Файлы
    • gen-cpp/
    • Facebook_types.cpp
    • Facebook_types.h
    • ProfileCache.cpp
    • ProfileCache.h
    • ProfileCache_server.skeleton.cpp
    • gen-php/
    • Facebook_types.php
    • ProfileCache.php
  • 18. Еще файлы
    • gen-py/Facebook/
    • ttypes.py
    • ProfileCache.php
    • ProfileCache-remote
    • gen-java/
    • GENDER.java
    • ProfileCache.java
    • Profile.java
  • 19. Что это нам дало? – C ++
    • namespace facebook { namespace profile {
    • enum GENDER { ... };
    • class Profile {
    • public:
    • Profile() : id(0), name(""), g((GENDER)0) {}
    • virtual ~Profile() throw() {}
    • int64_t id;
    • std::string name;
    • GENDER g;
    • ...
    • };
    • }} // namespace
  • 20. Что это нам дало? – C++
    • namespace facebook { namespace profile {
    • class ProfileCacheClient {
    • public:
    • void setProfile(const Profile& p);
    • void getProfile(Profile& _return, const int32_t id);
    • }
  • 21. Что это нам дало? - PHP
    • <?php
    • include_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
    • final class GENDER { ... }
    • class Profile {
    • public $id = null;
    • public $name = null;
    • public $g = null;
    • }
    • Class ProfileCache {
    • public function setProfile (&$p);
    • public function getProfile ($id);
    • }
  • 22. Описываем TTransport
    • public abstract class TTransport {
    • public abstract boolean isOpen();
    • public abstract void open()
    • throws TTransportException;
    • public abstract void close();
    • public abstract int read(byte[] buf, int off, int len)
    • throws TTransportException;
    • public int readAll(byte[] buf, int off, int len)
    • throws TTransportException {}
    • public abstract void write(byte[] buf, int off, int len)
    • throws TTransportException;
    • }
  • 23. Thrift – принципы работы
    • Данные описывают себя
      • Используем типы данных, которые присутствуют во всех поддерживаемых языках
    • TProtocol и TTransport – классы для поддержки стандартного стека
    • Самая стандартная конфигурация для нас – TSocket и TBinaryProtocol
  • 24. Принципы работы
    • Пользователи могут создавать свои классы для поддержки новых протоколов и транспортных каналов
    • Все аргументы в методах пронумерованы, клиент и сервер можно обновлять самостоятельно
    • Thrift за 5 минут: http://developers.facebook.com/thrift/tutorial.thrift
  • 25. Логи с асинхронным воспроизведением
    • Web- клиенты пишут в лог о каждом событии на сайте
    • Сервис News Feed по мере возможностей обходит эти логи, воспроизводит события
    • Если события интересны, новости о них уходят в БД пользователей
  • 26.  
  • 27. NewsFeed
    • В феврале 2007 г.:
      • 17 миллионов пользователей
      • 2 миллиарда дружеских связей
      • 5 млрд. новых событий в логе ежечасно
      • Обрабатывали 12 млн. новостей в секунду
      • Публиковали 0.1% всех новостей
      • 109 машин
    • В феврале у нас еще не было:
      • 67 млн. пользователей
      • Платформы для приложений
      • Beacon
  • 28. Логи для продуктов
    • Любой продукт может писать в специальный лог
    • Локальный Thrift- клиент отправляет данные центральному лог-серверу
      • В этот клиент можно встроить логику выбора разных серверов в зависимости от характера и источника сообщения
  • 29. Логи для продуктов
    • Разработчики продуктов могут самостоятельно отслеживать здоровье продуктов на сайте
    • Имеем представление о «состоянии здоровья» системы в целом
    • Технология готовится стать открытой, используется некоторыми стартапами
  • 30. Пример использования: поиск
    • 109 млн запросов в месяц только в США (делает Facebook 10-ым поисковиком - ComScore )
    • Год назад 600 млн поисковых запросов
    • 1 ТБ индекса в памяти
    • Требование к запросу - < 100 мс
    • При выдаче результатов учитывать социальный граф пользователя
  • 31.  
  • 32. PHPEmbed
    • Многие из функций PHP приходится использовать за пределами PHP
    • Сперва это кажется легким – есть С++-клиенты для Memcached, MySQL
    • В горизонтально распаралелленой архитектуре возникают специфические библиотеки для доступа к данным
    • До какого-то времени это можно параллельно развивать в С++
  • 33.  
  • 34. PHPEmbed
    • Библиотека для работы с PHP -интерпретатором
    • Делает все то, что доступно через SAPI
    • Вызов PHP- функции из С++:
      • long memused = p.call_long(&quot;memory_get_usage&quot;);
      • hash_set<string> ex;
      • ex = p.call_string_hash_set(&quot;get_loaded_extensions&quot;);
  • 35. Hadoop
    • Открытый аналог Google MapReduce от Apache Foundation - http://hadoop.apache.org
    • Поддерживается в основном Yahoo!
    • Используется даже внутри Google
    • Крупнейший кластер – Yahoo! – 2 , 000 узлов, 4 ядра на узле
  • 36. Hadoop в Facebook
    • Второй по размеру кластер – Facebook, 320 8-ядерных узлов, 2,560 процессоров
    • Активно используется для аналитики и обработки серверных логов
    • Особой популярностью пользуется Hadoop Streaming из-за простоты подключения скриптов в PHP и Python
  • 37. Hadoop Hive
    • Продукт для запросов типа SQL для программ типа Map/Reduce внутри Hadoop
      • Имея на руках коллекцию огромных текстовых файлов, описываем их структуру, присваивая названия колонок в ДБ полям внутри текстовых файлов
      • Задаем запрос типа SELECT ad_click_id, ad_click_time, user_id, click_price
  • 38. Особенности Hive
      • Не поддерживается WHERE – вместо этого пишем собственную map- программу, которая проходит по каждой строке и возвращает только валидные строки
      • В reduce- программе ведем учет тех данных, которые необходимы для аналитики. По окончанию исполнения можем сохранить данные в любом формате.
      • Поскольку логи собираются ежедневно, то «таблицы» в Hive – это конкретные логи за день
  • 39. Примеры запросов к Hive
    • Общее количество показов рекламных блоков в системе
    • Количество кликов в системе за конкретный день
    • Какой процент пользователей с приложением Facebook для iPhone загружают фотографии с устройства?
    • Какие администраторы создают наиболее популярные группы на сайте?
  • 40. Вопросы, решаемые Hive
    • Кто оставляет больше записей в форумах в конкретные дни – мужчины или женщины ?
    • Какой разброс среднего количества друзей для пользователей, присоединившихся к Facebook в течение последних двух недель?
    • Если пользователь загрузил фотографии, какова вероятность того, что в этот же день он оставит запись в блоге?
    • Существует ли высокая взаимозависимость между шагом А и шагом Б?
      • Если 80% пользователей, добавляющих музыкальное приложение, ищет по именам тех музыкантов, которые прописаны в профиле, то, может, изменить интерфейс для ускорения этого процесса?
  • 41. Собственно архитектура
    • Горизонтальное распределение баз данных
    • Репликация MySQL для копирования данных
    • Каждый пользователь привязан к конкретной базе данных
    • Существует пул центральных БД для данных, которые распределять не нужно
  • 42. Web- серверы
    • PHP- код знает нужную базу данных
      • Чтобы это знали другие, используем PHPEmbed
    • Переменные и массивы PHP храним в Memcached
      • Некоторые вещи, постоянно хранимые в кэше – личная информация пользователя, список друзей, список приложений
    • Разработчик сам выбирает схему использования кэша
  • 43. Приложения
    • Существует пул серверов для обслуживания запросов приложений
    • Этот пул говорит непосредственно с Web- серверами
      • Приложениям возвращаются те же данные, что и пользователю Facebook
    • Web- и API- пулы общаются через Thrift
    • FQL- запросы через Thrift передаются БД
  • 44. Упрощаем сайт
    • FBML- парсер был сделан на PHP, потом переписан на С++
    • Сегодня практически вся функциональность Facebook – это приложения
      • Приложения Photos, Events, Groups от Facebook можно удалить
    • Вполне реально удалить всю функциональность Facebook, но оставаться на Facebook
    • Будущая функциональность рассматривается как новое приложение, и как возможность поддерживать приложения других
  • 45. Интернационализация сайта
    • Задача: перевести сайт на 1 язык
      • Решение: нанимаем человека, он приходит и с 8 до 5 переводит сайт
      • Изредка человеку обьясняют специфические термины ( poke, tag , mini-feed)
      • С выходом новой функции просим человека перевести еще немного предложений
  • 46. i18n
    • Задача: перевести сайт на 200 языков
      • «Решение»: нанимаем 200 переводчиков, либо 5-6 полиглотов
    • Удачное решение для создания контента на разных языках: Wikipedia
    • Удачное решение для фильтрации и модерации: Digg, Reddit
  • 47. Другие варианты
  • 48. Приложение Translations
    • Заинтересованные пользователи устанавливают приложение
      • Незаинтересованные могут продолжать пользоваться сайтом
    • Вначале переводятся базовые термины
      • Надо определиться, как в другом языке будут называться groups, networks, events, applications
  • 49. i18n - продолжение
    • Пользователи сами голосуют за предложенные варианты
      • Для базовых фраз используем глоссарий
      • Способствует более художественному переводу ( mini-feed = одной строкой)
      • Легко отсеять вандализм
  • 50. Приложение Translations
    • Испанский – пользователи перевели сайт на 100% за неделю
    • Профессиональные переводчики только закончили уточнять спорную терминологию
    • К запуску испанского сайта в такие сроки не были готовы даже мы
    • Никто не жалуется на кривой перевод
  • 51. Facebook Video
    • Аналогично с запуском платформы мы запустили Facebook Video
    • Приложения для обмена видео в социальном контексте (не для публичного просмотра)
    • Разработчики захотели добавить видео-сообщения
    • В итоге добавили поддержку сообщений для любой платформы
  • 52.  
  • 53. Вопросы? Пожелания?
    • [email_address]

×