Буквально только что вернулся после насыщенного дня, большую часть которого я провел на RIW2010 (о котором я надеюсь успеть полноценно написать в воскресенье), а вечером я очень рад что собрался таки съездить на выступления Robert Johnson под названием "Facebook: how we scaled to 500 000 000 users" в ГУ-ВШЭ (где я собственно на данный момент и учусь в магистратуре). Сейчас же я хотел бы сосредоточиться именно на последнем мероприятии, благо оно мало того что было существенно более качественным, чем остальные выступления, на которых я был последнее время, так еще и очень сильно коррелирует как в целом с общей нитью данного блога, так и с последним постом в частности.
Прежде чем читать дальше, настоятельно рекомендую ознакомиться с архитектурой Facebook (которую я обновил немного), здесь я постараюсь особо не повторяться и рассказать лишь об общих впечатлениях и новых фактах, которые мне удалось услышать и выяснить.\
Само выступление длилось всего пол часа, было абсолютно без технических подробностей - немного понтов о своих достижениях в плане аудитории и нагрузки (собственно говоря первым слайдом был график роста аудитории по годам), а затем базовые вещи оb построении высоконагруженных систем в духе мол, что масштабироваться надо горизонтально, внимательно следить за SPOF, быстро двигаться вперед с использованием небольших итераций в разработке и.т.п. Аудитория слушала с очень напряженными лицами - для многих определенно было много незнакомых слов и вообще довольно суровое скороговорочное американское произношение мало кому давалось легко на слух.
Технических вопросов было довольно мало (что впрочем не удивительно, т.к. мероприятие проходило в гуманитарном ВУЗе) - превалировали вопросы в духе "что вы делаете с профилями умерших людей" (есть процедура когда друзья/родственники сообщают и если оказывается правдой то специальным образом перенастраивают аккаунт, чуть ли не несколько миллионов таких случаев было), "как работает фича Х" (из интересных фич - скрытие фоток твоих бывших boy/girl friend'ов через face recognition), "как выглядит типичный день разработчика в Facebook" (2/3 пишут код, остальное - всякие остальные виды деятельности), "какие планы развития в России и мире" или "что думаете о конкурентах" (их позиция - делать лучший продукт на рынке и аудитория сама подтянется), еще спрашивали снимался ли он в фильме, о котором последнее время в рунете слухи ходят. Недавно еще у них открылся небольшой венчурный фонд для инвестиций в социальные проекты. Вообще сессия публичных ответов-вопросов длилась около часа и потом еще где-то с полчаса он активно общался с людьми лично, тоже с ним поговорил немного. Под конец общение почти превратилось в фотосессию, я тоже вот решил за компанию сфотографироваться:
Пожалуй хватит воды, перейдем к делу, собственно что же нового для себя я узнал на мероприятии:
- С примерно первой половины года их официальная активная аудитория повысилась с 400 до 500 миллионов человек
- Штат инженеров (т.е. по-нашему разработчиков и сис. администраторов) увеличился до \~500 человек, примерно стало понятно как они распределены:
- Основной принцип: много небольших узкоспециализированных команд, которым даны полномочия принимать решения и проводить полностью продукт от стадии идеи до стадии реализации
- Около половины работают в "продуктовых" командах, до 5-10 человек в каждой (фотографии, поиск, личные сообщения, и.т.п.)
- Ряд команд, занимающихся общими вопросами (например 4 человека работают над оптимизацией MySQL, еще есть команды по безопасности, приватности, производительности)
- Нестрогий менеджмент, 2 уровня управления
- Используются аппаратные балансировщики нагрузки от F5 + некое опенсорсное решение, сказал что возможно nginx, но он не уверен
- Виртуализация совсем не используется - на таком масштабе она не актуальна
- MySQL-сервера используют подключенные напрямую массивы дисков (direct attached storage)
- По вопросам мониторинга кое-где используются nagios и ganglia, но большая часть данной подсистемы написано самостоятельно
- Десятки тысяч серверов и десятки гигабит трафика, более точных цифр, к сожалению, не дали
- Коммерческого программное обеспечение практически не используется, по большей части собственные разработки и в ключевых местах opensource
- Сам спросил про датацентры:
- Santa Clara, California - master (названия мест плохо расслышал, поправьте если ошибаюсь)
- Ashburn, Virginia - read-only slave
- За пределами США присутствие очень небольшое, по паре стоек в нескольких странах - если я правильно понял, то для кэширования статики, т.е. своя CDN
- Помимо этого мне было интересно про репликацию между ними:
- Используется модифицированный механизм встроенной репликации MySQL
- Основные доработки: передача помимо собственно данных списка идентификаторов объектов, которые следует инвалидировать из-за текущего обновления + какая-то хитрая система расстоновки флагов о текущем состоянии процесса репликации
- DDoS их особо не волнует - сколько-либо серьезных попыток они не встречали, защита аппаратная на уровне ДЦ, как я понял
- Намного больше внимания уделяется модерации контента и борьбе со спамом
- Развертывание делается максимально плавно, как в плане обновления софта, так и в плане выкатывания новых версий кода сайта (упоминал в статье про архитектуру)
- Их позиция касательно opensource:
- Активно использовать и возвращать взамен с улучшениями
- Facebook выгодно возвращать вносимые изменения в популярные opensource проекты, так как они не считают их конкурентным преимуществом (ну и лицензии никто не отменял)
- Если это не делается, то чаще всего т.к. либо используются "грязные хаки и костыли", которые никому кроме них не нужны, либо так как разработчикам не хватает времени привести патч в удобоваримый вид
- Свои проекта также активно публикуются, так как организации вроде Apache Software Foundation берут на себя многие вопросы по поддержке и развитию кода
- Apache Hadoop как уже многие писали используется как хранилище и оффлайновый обработчик данных вроде логов, Hive родился как надстройка для упрощения доступа
- Хоть сотрудники Facebook и реализовали проект Cassandra, про который активно спрашивали в комментариях как тут, так и на хабре, но они его практически не используют у себя. Как известно он опубликован в opensource и поддерживается ASF. В Facebook он используется (использовался?) только как хранилище для поиска по внутренним сообщениям, мотивация: очень быстрая запись, недостаточная производительность операций случайного чтения
- На вопрос про основной дистрибутив линукс и вендоров оборудования он был не особо уверен, но сказал что скорее всего использутся CentOS и они работают с несколькими основными вендорами серверов (HP, IBM, Dell) - свое оборудование (как Google) они не изобретают, так как не считают целесообразным
- Используется довольно сильно модифицированное ядро ОС, особенно по части сетевого стека