В докладе будет рассмотрен процесс построения масштабируемой отказоустойчивой системы хранения, отдачи и обработки фотографий с точки зрения разработчика. На примере Badoo, я расскажу о стандартном пути эволюции такого рода проектов. Детально разберу каждый этап и остановлюсь на основных сложностях и неочевидных проблемах. Вместе с рассказом о наших решениях и подходах будут рассмотрены возможные альтернативы, их плюсы и минусы (вплоть до "мы небольшой стартап, как сделать что-нибудь похожее, но по-быстрому и на коленке"). Основные тезисы: - Эволюция и типичные узкие места каждого из 3-х компонентов системы (хранение, отдача, обработка). - Как отдавать фотографии? Когда лучше использовать сторонний CDN, а когда написать свой? - Что лучше - хранить оригинал фото и ресайзить его на лету или заранее нарезать типовые размеры? - Как сделать эффективное кэширование? Что такое consistent hashing и зачем он нужен? - Где лучше хранить фотографии? Локальные диски, облачные хранилища, кластерные ФС? - Надо ли их бэкапить и как часто? Что может пойти не так?