Вк я уже там: Вся российская пресса кинулась писать о перекидывании контента из YouTube во ВКонтакте → Roem.ru

Highload там, где его не ждёшь. Приключение на 20 минут / Хабр

Всем привет. Меня зовут Женя, я фулстек-разработчик в команде рекламы ВКонтакте.

В этой статье расскажу про высоконагруженное место в рекламном кабинете ВКонтакте. С похожей ситуацией может столкнуться в своём проекте любой разработчик. Материал будет полезен не только тем, кто занимается бэкендом, но и всем IT-специалистам, стремящимся сделать свои продукты быстрыми и отказоустойчивыми. Спойлер: в статье не будет кода.

Сейчас я в основном занимаюсь разработкой мобильного рекламного кабинета, но периодически приходится решать разноплановые задачи. Одна из таких — показать превьюшку рекламного объявления размером 30 на 30 пикселей в таблице объявлений.

Кажется, что тут такого? Добавил дополнительное поле в запрос к базе, прокинул на фронт полученную ссылку на картинку и отрисовал её в столбце. Выглядит просто: 30 строчек кода и 20 минут, включая поход за чашечкой кофе.

Итак, поехали!

Шаг 1.

Получение картинки

В рекламном кабинете ВКонтакте пользователь может создавать множество разных по формату объявлений. Они могут содержать разный контент: фотографии, граффити, музыку, видео, истории, клипы, товары, карты, прикреплённые файлы — или сразу несколько в одном объявлении.

У каждого формата свои особенности структуры данных. Для некоторых, например с фотографиями и граффити, превьюшки можно добыть из них самих. А для объявлений с видео надо использовать специальные функции, чтобы получить стоп-кадры. Есть и другие форматы, без изображений, и там приходится использовать заглушки от дизайнеров. Поэтому пишем код, который по типу контента подготавливает превьюшку.

Шаг 2. Сжимаем картинку

Если на первом шаге выяснилось, что у нас в объявлении фотография, граффити или видео, то полученная картинка, скорее всего, будет большой. А нам нужна маленькая превьюшка, 30 × 30 пикселей. Заставлять браузер пользователя работать с тяжёлыми изображениями — значит увеличивать время загрузки всего контента на странице и сжирать для нас гигабайты трафика. Поэтому все большие картинки нужно сжать. Для этого у нас есть готовое решение: сервис, который принимает ссылку на картинку и подготавливает её уменьшенную копию с нужными размерами и качеством сжатия. Прогоняем все превьюшки через эту функцию.

Шаг 3. Хранение превью

В некоторых рекламных кабинетах больше 1 000 объявлений. Искать картинки и генерировать уменьшенные превьюшки при каждом открытии страницы — это очень долго. Нужно где-то хранить связь ссылки на превью и id объявления. Для этого отлично подходит внутренний персистентный memcached. Так что пишем обёртку для записи и получения превьюшки из memcached. А если превьюшку не нашли, то возвращаемся к первому шагу.

Шаг 4. Фронтенд

Здесь всё и правда просто: получили ссылку на картинку, отрисовали её в новом столбце.

Шаг 5. Нагрузка

Кажется, что всё готово и можно запускать на пользователей. Но представим, что после выкатки новой функциональности в прод рекламодатель в первый раз открыл свой кабинет, в котором 1 000 объявлений, и начал скроллить таблицу вниз. По умолчанию объявления грузятся пачками. По каждому объявлению начнётся процесс поиска превьюшки, и запрос на получение данных будет долго обрабатываться. Логичное решение — поставить лимит на количество обрабатываемых объявлений за одну загрузку страницы. Установим ограничение в 20.

Шаг 6. И снова нагрузка

Продолжаем: пользователь с 1 000 объявлений в первый раз зашёл в обновлённый рекламный кабинет, мы нашли превьюшки для первых 20 записей. Потом он заглянул во второй раз, мы создали превью для следующих 20 объявлений. Получается, чтобы увидеть превьюшки ко всем своим объявлениям, рекламодателю нужно 50 раз зайти в кабинет. Выглядит как проблема.

Решением может быть прогревание кеша: мы запустим под капотом логику поиска превьюшек, и при каждом заходе пользователя будем генерировать 20 новых и класть их в memcached, а на фронте новую колонку не показывать.

Но возникает вопрос: почему бы сразу не собрать все превью под капотом? Ответ: из-за нагрузки. У нас в системе огромное количество объявлений — как активных, так и архивных. Архивные открываются крайне редко, и тратить ресурсы на поиск превьюшек для них в фоновом режиме нецелесообразно. Поэтому будем создавать превью только для запрашиваемых пользователями объявлений.

Шаг 7. Что, опять нагрузка?

Да. Мы сделали фоновое прогревание кеша, но если выкатим это в прод на 100% пользователей, столкнёмся с проблемой. У всех рекламодателей разом пойдёт генерация превьюшек, и будет огромная нагрузка на бэк. Так что делаем плавное включение функциональности: можем управлять процентом пользователей, на которых запускается новая фича.

Шаг 8. Регенерация превьюшки

Ну теперь-то всё готово? Взяли объявление, создали превьюшку, положили её в memcached и при каждом обращении забираем оттуда.

Но что случится, если пользователь поменял контент объявления? Это можно сделать не только в рекламном кабинете, но и, например, при редактировании продвигаемого поста. Тогда превьюшка станет неактуальной. Поэтому после таких изменений нужно запускать генерацию новой. Добавляем.

Шаг 9. Статистика

Полезно следить за нагрузкой на систему. Так что повесим логи на каждый этап генерации превью.

Шаг 10. Тестирование

Пишем документацию по функциональности, несём всю логику тестировщикам, проходим код-ревью.

Шаг 11. Выкатка в прод

Мы готовы: код написан и заапрувлен, функциональность протестирована вдоль и поперёк, статистика собирается. Катим в прод! Плавно запускаем на всех пользователей прогревание кеша и, наконец, включаем отображение колонки с превьюшками на фронте.

Шаг 12. Мониторинг

Сидим и смотрим на графики.

Читаем комментарии с благодарностями от пользователей, допиваем чашку кофе… И идём сбривать полуторамесячную бороду.

В Госдуме проверят ситуацию с расстрелами животных из подмосковного приюта

13:20 сегодня 1067 0

Фото: Приют «Домашний» / «ВКонтакте»

Несколько собак уже пострадали от ранений в результате нападений со стороны неустановленных лиц.

Животные находятся под опекой общественников, которые жалуются, что им не хватает ресурсов для охраны всех зверей. Речь идёт о приюте «Домашний» в Ленинском районе МО. В августе там уже была застрелена собака.

Накануне сотрудники благотворительного учреждения обнаружили во «ВКонтакте» группы, где публично обсуждалась новая атака на бездомных собак. Они забили тревогу и сделали скриншоты записей.

В беседе с радиостанцией «Говорит Москва» глава думского комитета по экологии и охране окружающей среды Владимир Бурматов заявил, что эта ситуация требует немедленной и жёсткой реакции правоохранителей, так как речь может идти о тяжком уголовном преступлении. Он также призвал модераторов соцсетей быть бдительнее.

«Фактически мы имеем дело с фактом подготовки уголовного преступления группой лиц по предварительному сговору. Правоохранительные органы просто обязаны отпрофилактировать это, потому что это делается в прямом эфире в социальных сетях, и может расцениваться как призывы к совершению тяжёлого уголовного преступления и как действия, угрожающие безопасности не только животных, но и граждан. Поэтому мы обязательно проинформируем об этом правоохранительные и следственные органы. Реакция должна быть серьёзная, оперативная и жёсткая. Это уже не первый случай, когда администрация социальной сети «ВКонтакте» очень либерально относится к подобным публикациям. Нужно решение суда что ли, чтобы закрыть эту группу или страницу? Мы уже наблюдали такие драмы с жертвами среди граждан».

В июле этого года в Госдуму внесли законопроект о запрете умерщвления здоровых животных. Речь идёт о питомцах, которые содержатся в приютах и не имеют травм, неизлечимых заболеваний, агрессии или бешенства.

Соответствующий документ размещён в думской электронной базе. В список исключений входят неизлечимые заболевания; последствия острой травмы, несовместимые с жизнью; проявление немотивированной агрессии и клинических признаков бешенства.

Версия для печати

Все новости

  • 19:06 Июль 6, 2022 727

    В Госдуму внесли законопроект о запрете умерщвления здоровых животных

  • 10:59 Окт. 23, 2021 4024

    В Госдуме проверят убийство животных в воронежском приюте

  • 15:51 Окт. 3, 2021 4525

    Депутат Бурматов: поставщикам корма грозит уголовное дело после отравления собак в подмосковном приюте

  • 19:24 Дек. 30, 2020 1508

    Иркутская прокуратура нашла нарушения в приюте для животных «Пять звёзд»

  • 17:41 Ноя. 22, 2016 3248

    Власти Москвы ввели карантин по бешенству на территории района Отрадное

  • 08:27 Дек. 25, 2014 3370

    Карантин по бешенству объявлен на северо-западе Москвы

Связь с эфиром


Кавер-версии I’m Уже Там от Lonestar

Кавер-версии Я уже Там от Lonestar | SecondHandSongs

Поиск

Подробный поиск

Оригинал

Добавить крышку

Сообщить об ошибке

Мета

Добавил Уолт

  • Оригиналы
  • Основные моменты 3
  • Версии 6
  • Все

Версии

org/MusicRecording»>
Титул Исполнитель Дата выпуска Информация
Я уже там Одинокая Звезда 2001 Первый выпуск
Я уже там Фрэнк Майерс 9 октября 2006 г.
Я уже там Вестлайф 5 ноября 2007 г.
Я уже там Дэниел Эванс [GB1] 22 февраля 2010 г.
Я уже там Адам Каннингем 11 декабря 2017 г.
Я уже там Кирк Джей 19 декабря 2018 г. Версия из телешоу талантов

Добавить крышку

Сообщить об ошибке

Lonestar – I’m Already There (2001, CD)

More images

1 Out Go The Lights 3:56
2 Unusually Unusual 3: 36
3 Не проходит и дня 4:09
4 I Want To Be The One 3:57
5 With Me 3:53
6 Without You 4:13
7 I’m Already There 4:14
8 Let’s Bring It Back 3:10
9 Must Be Love 3:14
10 Мягко 4:07
11 Каждая маленькая вещь.
  • Record Company – General Electric Company, США
  • Распространитель – BMG Distribution
  • Производитель – BMG Distribution
  • Фонографические авторские права ℗ – BMG Entertainment
  • Авторские права © – BMG Entertainment
  • Made By – K2 Laser Cutting
    • Producer – Dann Huff

    Эта версия не кодируется HDCD, несмотря на наличие логотипов HDCD на задней обложке и диске.

    10-панельная передняя вставка с текстами всех песен.

    Печата в США

    также доступен на кассете

    • Штрих-код: 0 78636-70112 7
    • Матрица / развод (вариант 1): 07863670112 1H 15 K IFPI L238
    • (MATRIX / RUTIANT 2) 2) 2). К ИФПИ L238
    • Mastering SID-код (варианты 1 и 2): IFPI L238
    • Mold SID-код (вариант 1): IFPI 4151
    • Mold SID-код (вариант 2): IFPI 4121
    • Другое (вставка): 07863-2RE70111
    • Other (Cover Sticker): 67011-2RE

    Recently Edited

    I’m Already There (CD, Album) BNA Records Label 74321 86020 2 Australia 2001

    Recently Edited

    I’m Already There (CD, HDCD, Album) BMG, BNA Records Label, BMG, BNA Records Label 74321 86020 2, 74321860202 Europe 2001

    Новая отправка

    Я уже там (CD, HDCD, альбом) BMG BG2-67011 US 2001

    EDTED

    EDTED

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *