Что происходит с Instagram, когда вы ставите очередной лайк?
Хью Динг устроился на работу в Instagram почти три года назад, в то
время, когда новая социальная сеть семимильными шагами завоевывала мир.
Спустя некоторое время Динг начал замечать, что его начальник, один из
основателей компании Майкл Кригер, имевший в целом жизнерадостный нрав,
становился временами хмур и задумчив. Он сидел, сгорбившись, за своим
рабочим столом, молча стучал по клавиатуре и приговаривал сквозь
стиснутые зубы: «Мы должны решить эту проблему». Такое его поведение
означало, что по всему миру Инстаграм замедлил работу. Скорость падала
почти до нуля. И причина всегда была одна и та же: в сети появлялся
Джастин Бибер.
Ну, или почти всегда. Иногда это была Ким Кардашьян.
И вот как все происходило. Едва Бибер выкладывал в Instagram
какую-нибудь фотку, и тут же его фанаты, или «белиберы», начинали так
активно ставить «лайки», что cеть просто не выдерживала. Крупные
интернет-порталы вроде Instagram работают следующим образом: чтобы
быстро доставлять контент миллионам пользователей одновременно,
используется кэш-память компьютерных дата-центров, которая сжимает
наиболее популярный онлайн-контент и сохраняет его на сверхскоростных
системах памяти сотен и даже тысяч серверов по всему миру. Напрямую из
памяти сервера контент пользователю доставляется гораздо быстрее, чем из
баз данных, хранящихся на жестких дисках, как это делалось раньше. Но
фотографии Бибера настолько утяжеляются «лайками» фанатов, что
кэш-память просто не вмещает их. Сервис начинает доставать каждый «лайк»
по одному с диска, что замедляет работу баз данных и даже останавливает
ее. В итоге Instagram лежит.
Хью Динг: «Когда я узнал об этой проблеме, то подумал “ничего себе.
Аккаунт всего одной знаменитости может погубить целую систему”».
Майкл Кригер говорит, что до сих пор наизусть помнит цифровой ID Бибера в
базе данных, содержащей аккаунты Instagram — 6860189. Ведь эта цифра
столько раз становилась источником головной боли.
Майкл Кригер: «Разбудите меня среди ночи, я смогу назвать вам эти семь
цифр. На раннем этапе работы сети мы столько раз сталкивались с разными
проблемами из-за этого номера, что Джастин Бибер у меня сейчас
ассоциируется только с ним».
Бибер — баг
В конце концов, команда Instagram нашла решение этой проблемы. Прошлым
летом, через два года после того как Facebook приобрела Instagram, все
ее онлайн-операции перевели в один из массивных дата-центров материнской
компании. В течение последних нескольких месяцев возможности для
Instagram расширили, отведя под ее базы данных еще два центра,
принадлежащих Facebook. И несмотря на то, что сегодня инфраструктура
сети ежедневно обрабатывает и передает до 80 миллионов фото и видео от
400 миллионов пользователей по всему миру, «Бибер-баг» и другие проблемы
крупных онлайн-сервисов больше угрожают соцсети. К тому же недавно
специалисты заново переработали ПО Instagram.
Для подсчета количества «лайков», например, Instagram теперь использует
так называемый «денормализованный счетчик». Это означает, что система не
пытается сохранить растущее количество «лайков» в кэш-памяти и не
запрашивает каждый раз индивидуальные аккаунты тех, кто ставит эти
«лайки». Это было бы слишком долго, поскольку аккаунты размещаются в
базах данных на жестких дисках. Вместо этого для каждой фотографии есть
свое хранилище «лайков», размещенное в одной ячейке памяти базы данных. И
по мере необходимости осуществляется доступ только к одной этой ячейке.
«Для получения доступа на один диск требуется всего 10 микросекунд, —
говорит инженер Instagram Лиза Го. – И эта ячейка всегда остается на
своем месте, откуда бы ее ни запрашивали».
И это лишь одна небольшая надстройка в целой инфраструктуре. Но в
совокупности с другими небольшими нововведениями, это дает возможность
расширять сеть без дополнительных проблем. Такая модель расширения
применима и для других больших пользовательских систем. Разумеется, не
все стартапы получают возможность разместить свои базы на мощностях
дата-центров Facebook, которые являются одними из самых продвинутых в
мире. Но со временем многие компании сталкиваются с такими «болезнями
роста» и, соответственно, могут воспользоваться разработанными в
Instagram средствами.
Как сообщается в официальном блоге компании, перевод баз данных в
несколько дата-центров Facebook позволяет им дальше расширять свою и без
того огромную пользовательскую аудиторию. И лишь когда количество
пользователей достигнет отметки 400 миллионов, понадобятся
дополнительные серверы. В то же время увеличение мощностей дата-центров
позволяет компании предупреждать серьезные сбои сети. Если по какой-то
причине отказывает один из дата-центров, его часть работы можно
перераспределить по оставшимся.
Instagram повсюду
Тем не менее, систему могут поджидать и другие проблемы. Среди прочего,
объем кэш-памяти одного дата-центра может не соответствовать объему
кэш-памяти другого. Если, например, пользователь прокомментирует фото,
аккаунт которого находится в базе данных на сервере в штате Орегон, этот
коммент появится в кэш-памяти в Орегоне, но может не обнаружиться в
кэш-памяти в дата-центре Facebook где-нибудь в Северной Каролине. Так
что если другие пользователи будут просматривать фото через серверы
Северной Каролины, то опубликованный коммент они не увидят.
Чтобы решить эту конкретную проблему, в Instagram используется
инструмент под названием PgQ. В сочетании с базой данных PostgreSQL,
этот инструмент обеспечивает обновление информации на всех региональных
серверах: если данные на одном из них устаревают, система сверяется с
последними обновлениями и добавляет их. Эта база данных размещена на
хард-диске, поэтому процесс занимает некоторые время. И вот здесь
приходят на помощь те самые денормализованные счетчики.
Конечно, простому пользователю все эти технические подробности
малопонятны. То, что мы можем быстро и легко разместить и посмотреть
фотографии и прочий контент в Instagram, требует на самом деле решения
множества сложнейших задач, в том числе работу с кэш-памятью (на базе ПО
MemCached ) и множеством баз данных (PostgreSQL and Cassandra), а также
сотнями веб-серверов и брокеров сообщений. Суть в том, что пока все эти
дата-центры и серверы, расположенные в разных точках по всему миру,
работают слаженно и бесперебойно, нам, простым пользователям, можно не
беспокоиться о том, что Instagram может зависнуть. Не беспокоится
теперь и Майкл Кригер. Ну или, по крайней мере, у него стало меньше
поводов для беспокойства.
Веб-сервисы остаются уязвимыми перед стихийными бедствиями. Но от одного
стихийного бедствия сеть удалось защитить. Очередные селфи Джастина
Бибера наносят уже гораздо меньший урон.
Продажа сообществ, аккаунтов в соцсетях