РИТ++ 2017 завершён. Ждем вас на Highload++ Junior 2018! Подать заявку на доклад
1 февраля 2018

Вы можете себе это позволить

Архитектура хранения и отдачи фотографий в Badoo

Артем Денисов рассказывает, как спроектирована система хранения и отдачи фотографий в Badoo, а фотографий они хранят около 3 петабайт, каждый день пользователи заливают более 3,5 миллионов новых фотографий, и нагрузка на чтение составляет порядка 80 тысяч запросов в секунду. Начиная с ретроспективы и простой схемы из кластерного хранилища и тривиального шардинга, читателю постепенно рассказывают о возникающих на каждом этапе слабых местах и способах их исправления. В итоге: горячий и холодный кэш; consistent hashing, чтобы обеспечить устойчивость к решардингу; резервный фотокэш; схема резервирования данных, чтобы утилизировать чтение с двух машин сразу (см. рисунок), и все это в трех географических точках. А почему нельзя (или можно) просто взять CDN, лучше прочитать в статье. И советы от кэпа тоже там, потому что если что-то может сломаться – оно сломается.

Доклада не было, видео нет, а статья есть!

Александр Чистяков разбирается в принципах работы асинхронных решений и, если аккуратно продраться через дебри из процессов, потоков, ядер процессора, регистров процессора, CPU и пр., то обнаружатся аккуратные описания моделей многопоточности, реализованных в разных языках, и их классфикация. В Java модель синхронной параллельной обработки ориентируется на использование потоков операционной системы в качестве потоков рантайма (виртуальной машины) языка; Node.JS использует модель «N:1» — нескольким потокам уровня интерпретатора соответствует один поток уровня ядра ОС, а в Golang «N:M», где M — число ядер процессора. В качестве альтернативы – низкоуровневая работа с асинхронным вводом/выводом путем ручной регистрации коллбэков. Правда, автор по этому поводу высказывается вполне однозначно: «Зачем люди хотят делать код на коллбэках более одного раза в своей жизни, я не знаю, лучше бы в секцию альпинизма или парашютного спорта записались». Место для дискуссии подогревает и представленная классификация от Mons Anderson вокруг обработки HTTP-запросов. Надеемся продолжить обсуждение на HighLoad++ Junior этой весной, присоединяйтесь.

Это не всё!

Еще, у нас есть персональная рекомендация от члена Програмного комитета конференции HighLoad++ Алексея Рыбака, который, видимо, хотел бы жить в прекрасном будущем без тормозящих сайтов и готов для этого, например, обратить внимание сообщества на проблему.

В статье «Вы можете себе это позволить? Бюджет веб-производительности в реальном мире» речь, конечно, не о финансах, а о ресурсах критического пути, самый дорогой их который JavaScript. Все загрузки скриптов влияют на самую главную метрику: время до появления интерактивности (Time to Interactive). Исполнение скрипта задерживает интерактивность несколькими способами, в то время как изображения не блокируют основной поток, поэтому картинка 150 КБ, в отличие от JS, не так значительно увеличит TTI.

Чтобы определить, сколько же мы можем себе позволить в таких условиях, надо решить, какой бенчмарк использовать. Если не углубляться, то автор устанавливает такой базовый уровень для измерения производительности: Android-смартфон примерно за $200 на медленных сетях 3G (RTT 400 мс, скорость 400 Кбит/с). А бюджет по времени эмпирически составляет пять и менее секунд до интерактивности сайта после первой загрузки, а также две или менее секунд при последующих загрузках. В итоге – 130 КБ для сайтов, сделанных на фреймворках JS.

Это возможно! Мы не можем рассказать обо всех инструментах и техниках, которые могут помочь в работе командам, внедряющим бюджет производительности. Лучше обратитесь за ними к статье.

Еще чуть-чуть!

Раз уж в сегодняшней новости такие разные темы, то и пригласить мы вас хотим на разные конференции.

Во-первых, Backend Conf – конференция по серверному программированию. Полнотекстовый поиск, NoSQL, архитектура ClickHouse, мониторинг и отладка MySQL, Node.JS, реверс-инжиниринг, Linux API, юнит-тестирование, правила рефакторинга, PostgreSQL и Mongo – вот это вот всё туда.

HighLoad++ Junior – обучающая конференция, посвященная высоким нагрузкам в обычных условиях, когда у вас нет сотни серверов и пары десятков программистов. Не для юниоров, но для небольших команд, которым нужно масштабироваться.

Если у вас есть, что сказать по этому поводу, то оставьте заявку для программного комитета на странице для докладчиков РИТ++ (http://speakers.ritfest.ru/).

HighLoad++ Siberia – как наша самая крутая конференция HighLoad++, только в Сибири и летом. Подать доклад можно прямо на сайте конференции.

До встречи!