Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Юзерпики на «Яндекс.Фотках»

Вчера в Татарстане был выходной, поэтому пока мы ехали на машине за город, я сделал заготовку для хранения юзерпиков на «Яндекс.Фотках», а вечером её доделал. Сейчас все юзерпики в фоне переливаются туда в порядке запроса пользователем в закрытый альбом специального пользователя, которого я завёл.

До этого юзерпики по сложным правилам (с использование адреса почты из SRE OpenID или vCard, favatar, gravatar, pavatar, юзерпиков из «Ярушки» и ЖЖ и т. д.) получались для каждого человека в комментариях и загружались каждый раз с совершенно разношёрстных ресурсов.

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

Есть и четвёртая причина, не знаю насколько она значимая. Некоторые юзерпики (побайтно) повторяются, но так как браузер не знает, что с двух разных УРЛов грузится та же картинка, он грузит её два раза. У меня сейчас не так — я хеширую картинку и по хешу ищу совпадение. Есть вероятность совпадения хеша, но юзерпики не слишком-то важные данные, чтобы бояться коллизий.

Сейчас юзерпики грузятся только в фоне, то есть какое-то время он грузится с «настоящего» адреса и только через какое-то время — с «Яндекс.Фоток». Так как запросов в стеке пока очень много (сейчас загружено 779 картинок и их число растёт очень быстро), процесс перекладывания может растянуться на часы. В будущем, когда бо́льшая часть будет уже лежать на «Фотках», этот процесс сократится до минут.

17 комментариев
Lynn «Кофеман» (alexeyten.ya.ru) 2011

Очевидный вопрос, а как сделана инвалидация?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для alexeyten.ya.ru:

По времени. Пока я не сделал её, но время обновления храню.

Orcinus Orca (www.orcinus.ru) 2011

А сервер подобные ухищрения не сильно нагружают?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для www.orcinus.ru:

Перекладывание юзерпика? Там одно IO, масштабирование быстро делается, я отвергаю слишком большие юзерпики.

praeivis (praeivis.lt) 2011

Комментарий для Евгения Степанищева:

жениться вам барин пора! тьфу, то есть детей завести :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для praeivis.lt:

Очень хотим детей, да. Но я очень надеюсь, что и временя на хобби останется.

Евгений Степанищев (bolknote.ru) 2011

1252 юзерпика пока. Интересно, где там предел?

Owner (companyowner.myopenid.com) 2011

Очень хотим детей, да. Но я очень надеюсь, что и временя на хобби останется.

Да, я тоже так думал... пока не родились 2 девочки. Времени больше нет! Счетаю теперь месяцы, когда им будет хотябы пару лет, может тогда чуть легче станет. Хотя и в этом тоже уже сомнения пошли видя как мучаются друзья с одним-двухгодовалым-ребёнком.

about.me/rembish 2011

В целом из профессионального интереса, а как работает скрипт для конвертации? Пользуетесь аналогом celery (rabbitmq worker’а) для PHP? Или простой иттерацией?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для companyowner.myopenid.com:

У моих друзей было заметно изменение в жизни, но не всё так плохо. Они, например, объездили с ней всю Европу.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для http://about.me/rembish:

В целом из профессионального интереса, а как работает скрипт для конвертации? Пользуетесь аналогом celery (rabbitmq worker’а) для PHP? Или простой иттерацией?

Всё очень просто: в файл кладутся строчки заданий, вынимаются первые. Чего там городить-то? :)

desh 2011

Комментарий для Евгения Степанищева:

А файл с заданиями один? Ты его блокируешь на запись при удалении выполненных заданий и добавлении новых? Если каждое задание делать в отдельном файле с уникальным именем, блокировать не надо будет,а воркер будет вместо чтения и удаления строк листить и удалять файлы.

Owner (companyowner.myopenid.com) 2011

У моих друзей было заметно изменение в жизни, но не всё так плохо. Они, например, объездили с ней всю Европу.

Мы тоже планируем отпуск, но без детей — иначе это не отпуск будет. А на счёт не всё так плохо... по вечерам я любил позаниматься research & development, изучать что-то новенькое, какие-то технологии поковырять; всё именно то, что ты сейчас делаешь. После рождения детей с трудом хватает время на разгребание рутины по делам компании. Про хобби вообще забыл (занимался бегом, играл на фано, читал книги). Ты не подумай, дети забирают очень много и в замен дают не меньше, но готовься к конкретным переменам в жизни, когда будешь ценить каждую секунду свободного времени. :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для desh:

А файл с заданиями один? Ты его блокируешь на запись при удалении выполненных заданий и добавлении новых? Если каждое задание делать в отдельном файле с уникальным именем, блокировать не надо будет,а воркер будет вместо чтения и удаления строк листить и удалять файлы.

Да не, мне такие сложности-то ни к чему. Время ожидания у фоновых задач ничтожно. По крайней мере сейчас.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для companyowner.myopenid.com:

но готовься к конкретным переменам в жизни, когда будешь ценить каждую секунду свободного времени. :)

Если честно, мне всё равно :) Хочу детей :)

zg (zg.livejournal.com) 2011

Комментарий для Евгения Степанищева:

от собственно детей тоже многое зависит :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для zg.livejournal.com:

Да уж :)