Как стать автором
Обновить

Комментарии 70

Не считали, насколько выгоднее такое решение получается, чем, допустим, Amazon S3? С учетом разработки и поддержки, конечно же.
Точно не просчитывали, но зависимость от внешних систем как правило не несет в себе ничего хорошего. Использовали Amazon S3 для других задач в самом начале, помню что результаты по скорости нас не радовали.
Конкретно AmazonS3 для РФ не сильно подходит.
НЛО прилетело и опубликовало эту надпись здесь
На мой взгляд, основная проблема с S3 и прочими подобными системами это цена egress-трафика.
Даже с контрактными условиями под NDA (я его, к счастью, не подписывал, хотя и предлагали), которые составляют около 60% при 400+ТБ egress в месяц, это слишком дорого. Просто (относительно конструирования своего хранилища), да, но дорого.

Есть конечно промежуточное решение — пара/тройка кэширующих серверов в локальном ДЦ, но тут эффективность кэширования сильно зависит от типа сайта. У нас 1:8-1:10, но у того же Avito может быть совершенно другое соотношение.
Странный у вас подход. Мне кажется, что картинка в объявлении важнее, чем все остальное. А вы совершенно не боитесь их потерять.
Вы правда думаете чем все остальное? Даже чем например данные о балансах пользователей?
Мы не боимся их потерять потому что у нас есть система бэкапов. Перед созданием системы возможные риски были оценены и согласованы. Я об этом упоминал в статье.
Мне, как пользователю, картинка важнее баланса пользователей. 80% экрана при просмотре объявления занимают именно они. Возможно, я неверно понял некоторые моменты в отношении картинок.

Картинка в объявлении — короткоживущий ресурс. Вероятность потери за месяц-два востребованности исчезающе мала.

Вот уж воистину полный kiss — невозможность фильтрации даже по цене, не говоря уж о более сложных фильтрах просто убивает. Меня до сих пор удивляет как с таким сервисом компания оказалась практически монополистом. Чудо, что к разделу недвижимости карту прикрутили…

Мне довелось увидеть раздел "работа" в самом начале (со стороны поиска кандидатов) — вот где мрак был, большинство объявлений с темой "ищу работу" и таким же содержанием. Как говорится, шортее и симплее некуда, выделить что-то осмысленное или отфильтровать не представлялось возможным.

Фильтрация вообще ужасная. Пытался там бу авто поискать — плюнул на второй минуте и ушел на auto.ru.
Не ожидал, что будет возможность оставить отзывы прямо на Хабре) Отправлял письмо со списком пожеланий, уж благодарили-благодарили, но безрезультатно, что было бы, вообще-то, намного большей благодарностью. В том числе помню, что лично для меня просто принципиален поиск сразу на главной (кто бы мог подумать, правда?) ), а не через дополнительные клики по карте с выбором своего региона. И доходит до парадокса: приходится выбирать любой регион, а потом поиск осуществлять по всем. ибо я так и мотивировал свое предложение тем, что лично для меня регион практически никогда не принципиален. Например, винтажную аудиотехнику все-равно приходится искать по всей России, старые журналы все-равно в регионе отсутствуют. Да я хоть бритву могу в другом регионе заказать, если меня именно этот вариант устроит, все-равно пересылка почтой копеешная, а на время доставки соседний регион все-равно не влияет. Но нет. В итоге каждый раз захожу и прямо вымораживает это, и, если честно, желание пользоваться постепенно пропадает. Последний раз что-то покупал пол года назад, после этого даже не заходил ни разу, увы( Но кого это волнует, все-равно пользоваться же будут, ибо больше банально нечем, вот и я, проглатываю каждый раз просто, а что поделать? Хотя кроме разве что банального вообще не заходить. Буду рад, если коммент возымеет какое-либо действие, но верится с трудом уже…
Плюсую ваш отзыв. Тоже ищу как правило по всей России и ужасно не удобно каждый раз это делать.
Благодарю за поддержку) Вообще, я уже давно понял, что секрет успеха любого продукта — пользование опытом Запада, который продвинулся далеко вперед во всех отношениях, что бы там не говорило бы РосТВ. Примеров куча: Яндекс-Гугл, Вконтакт-Фейсбук. Хотел вспомнить что-нибудь из разряда «Мерседес...», но понял, что идея провальна, так как страна слишком «крута» для этого. Что поделать, если нам дается только веб-разработка… Однако этим и нужно пользоваться, но если идти тут своим путем не оглядываясь ни на кого — мы будем иметь что имеем, как с тем же Авито, например, которым пользуются потому-что альтернативы просто нет. Это как с правительством… Ладно, что-то меня в политоту все тянет…
А можете озвучить порядки количества объектов и их объёма (без избыточности)?
Например "~10^9 объектов, ~500ТБ чистого места".
НЛО прилетело и опубликовало эту надпись здесь

Примеры PS пришлите.
Можно в личку

НЛО прилетело и опубликовало эту надпись здесь

Это не совсем поиск.


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


В старый алгоритм, внесли изменения, чтобы больше внимание было ключевым словам, в ближайшее время выкатим.
P.S. спасибо за фидбек.

Я, возможно, что-то не понимаю, однако что в этом алгоритме тупого? Как раз корректно ищет объявления с ошибками в написании (или в поисковом запросе). Во всяком случае насколько я это понял из скриншота ТС выше.
Я так понял — при потере сервера целиком «в мясо, кровь, кишки и т.п.» — вы смиряетесь с потерей части картинок?
Да, в таком случае небольшая часть картинок что была создана после крайнего ежесуточного бэкапа и что не осела в промежуточных кешах будет утеряна.
Не пробовали Ceph? Если пробовали, то почему отказались?
В те года он не был production ready. Испытывать его на себе в тех условиях было неразумно. Однако сейчас мы его активно тестируем для других задач.
Приятно, когда такой вещи, как картинки, уделятся должное внимание.

Осталось пожелать разработчикам, чтобы они обратили внимание на функционал, отличающий анонимную барахолку от серьезного торгового посредника. Методы мошенничества на Авито уже вошли в легенду, в то время как наши западные (Ebay) и восточные (Ali) партнеры успешно эти проблемы решают — валидация, отзывы, рейтинги и т.д.
Методы мошенничества на Авито уже вошли в легенду


О дааа, особо доставляет, что 8-9 из 10 предложений в разделе «сдам жильё» следует читать, как: "ищу лоха предоставлю информационно-консультационные услуги по подбору жилья в аренду".
А как вы себе представляете вариант защиты, без финансового посредничества?
Указанные примеры выше — это площадки, с полным циклом контроля (контроль доставки, платежей, споры, отзывы, итд)
И представляют они из себя совсем не доски объявлений, а вполне-себе площадки для электронной коммерции.
Ну я это и имел ввиду — тут надо переделывать систему целиком. Хотя сейчас есть доставка авито и мне весьма нравится такой вектор развития.
eBay ведь тоже не в первый день стал таким, каким он есть сейчас. Постепенно эти возможности начинаются появляться в зависимости от важности на данный момент.
Уверен, что и Авито к этому идёт.
Авито писался не по идее Ebay, а по идее Craigslist. И тут уж сложно упрекнуть Авито в скорости развития, на Craigslist я вообще не уверен что изменилось со дня основания :)
Всё же целевая аудитория очень разная. Я никогда не пойду продавать свою микроволновку на Ebay: слишком много проверок, регистраций, ответственности, обязательство доставки и т.д.
Локальная доска объявлений это просто другой продукт, со своими плюсами и минусами.
Про методы мошенничества на Авито кстати предупреждают, с подробным описанием всех типичных, так что с проблемой работают.
Я про Craigslist вообще ничего не слышал. Как ни крути, Avito — лидер на российском рынке. И для ресурса, оцененного в конце 2015 года в $2,38 млрд., некоторые вещи смотрятся диковато и непростительно.

Если бы половину сил, затраченных на реализацию подсистемы хранения картинок (она мне нравится), направить на затыкание очевидных дыр в функционале, то результаты были бы впечатляющи. Но проблема картинок сама «стучалась в двери», ей решили.

Считаю текущий функционал Avito репутационным провалом. В 2015 году дваджы писал на compliance@avito.ru с предложениями — ни ответа, ни привета :)
Ну вот, а craigslist лидер на американском рынке. А теперь зайдите на сайт http://www.craigslist.com :)
Ну да ладно, развиваться всегда есть куда. Ну а по своему опыту понимаю, что у популярного ресурса нету возможности слушать все предложения всех пользователей.
Не думаю, что стоит приводить примеры по принципу «Есть гораздо хуже и ничего». Я могу привести пример американской компании с мировым именем по производству витаминов, в которой партионный учет продукции ведется на Excel, а учетная система написана 15 лет назад.

Если ресурс работает в России и стоит больше двух ярдов зеленых, то должен соответствовать определенному уровню функционала. Я по своему опыту знаю, насколько важно слушать все предложения всех пользователей и делать выводы.
Вы наверняка имеете список функций, отсутствие которых является «репутационным провалом»
Поделитесь пожалуйста.
Не вижу смысла здесь обсуждать такие вещи. IMHO, развернутое обсуждение здесь функционала — офф-топик. Я надеялся привлечь внимание людей, работающих в Авито, к этой проблеме. Если потребуется, я продублирую им свое письмо 2015 года с предложениями. Если для обсуждения этих вопросов будет предложена публичная площадка, с удовольствием там поучаствую и Вас приглашу.
Считаю «репутационным провалом» отсутствие отзывов и защищенных транзакций через саму площадку, что, очевидно, является просто рассадником мошенничества, что, вне всяческих сомнений, несет откровенный репутационный урон.
НЛО прилетело и опубликовало эту надпись здесь
Вот-вот, тоже когда впервые зашел на Авито — был реально в шоке, узнав об отсутствии отзывов (!) и проведения платежей не через них (!!). На самом деле, я считаю, что это все проистекает из-за общей российской терпимости ко всему, когда просто при банальном отсутствии альтернатив приходится пользоваться чем есть и не жаловаться. А зачем, идти-то все-равно некуда( Это как со властью: что толку жаловаться, они что, возьмут и уйдут всей гурьбой при отсутствии замены? А менять сложно и дорого, да и зачем, все-равно пользоваться будут, ибо… (смотри по рекурсии).
А CEPH + RADOS рассматривали?
Если да то почему отказались?
10G линки дешевеют, сами подумываем запускать…
ответил в комментарии выше
Интересная тема… раньше, когда требовалось хранить значительное количество бинарных данных, то использовали solid файл, где доступ к конкретной записи осуществлялся по смещению и размеру (можно закодировать хоть в имени файла). Конечно не было таких нагрузок, как у авито, но вопросы чтения, добавления (пишем в конец файла), бэкапа не стояли остро при полностью устраивающей нас производительности. Конечно, замена конкретного файла обходился дорого (или дырка в solid или пересборка всего файла), но эта операция (замена) была нужна чисто теоретически, так как «хранилось всё».
мое мнение сработает только на SSD при большом размере read buffer
в других случаях будет
1. слишком много перескоков по диску
2. кеш не будет знать что ему держать у себя
2. кэш диска оперирует с файлами? так нет же, с блоками самого диска. С файлами работает кэш приложения
1. перескоков не больше, если не меньше, чем при чтении из файловой системы. К тому же солид контейнер можно создать заранее (в том числе разместив как RAW) избежав проблемы дефрагментации полностью.

Конечно имплементация может изменить многое, если не всё :)

А что с безопасностью? Если я передам имя 0000 вместо 12345, то считаю что-то интересное? Или юзер не может повлиять на формирование имени "файла", доставаемого из хранилища?

пользователь не имеет прямого доступа к контейнеру, только приложение-прокладка, которая транслирует запрашиваемый id картинки к серверу -> к контейнеру (может быть несколько, на разных дисках) -> к блоку данных (сразу несколько картинок, для помещения их в кэш) -> конкретная_картинка
У вас количество подаваемых объявлений растёт, что не успевают удаляться старые, или старые вообще не удаляются?
Скорость удаления ненужных картинок крайне мала по сравнению с добавлением новых.
А сжимать сильнее, например в WebP?
он не поддерживается рядом браузеров, к тому же AFAIR требует заметно больших ресурсов на сжатие.

Когда Ceph был не продакшн-рэди уже существовал как минимум Openstack Swift. Не самое быстрое, конечно, решение, но всё же. На дворе 2017 год и Ceph уже давно вполне годен для продакшна. Мы у себя решили похожую проблему как-то так https://www.youtube.com/watch?v=Y8JHEb1BkGQ

НЛО прилетело и опубликовало эту надпись здесь

Пишем параллельно асинхронной 2 ceph-кластера в разных ЦОДах и в AWS S3 в качестве бэкапа для «самого ужасного случая»

Вы шутите? Swift на питоне, хорошо если он на 2 порядка меньше нагрузку выдержит по сравнению с единичным nginx-ом. По Ceph, с одной стороны круто, с другой — его еще правильно приготовить надо, при всей его кажущейся простоте. При внимательном изучении простота пропадает мигом. А потом ловить такие баги, после которых придется весь кластер пересобирать, после недели бессонных ночей. Я наоборот хотел ребят похвалить — решение простое, не используются технологии которые явно не нужны (читающие наверное 3 раза шардирование смоделировали, редисом приправили и микросервисами). Технично, элегантно. Яркий пример как надо решать задачи, а не смотреть на модные технологии. Спасибо

Сравнивать object storage и веб-сервер… Okay…

Тут надо сравнивать не абстрактную функциональность разных решений, а их эффективность в решении конкретной задачи. Если Swift решает нашу задачу менее эффективно, чем nginx, то нам как бы по барабану, что он до кучи может ещё и крестиком вышивать.

Nginx не решает вашу задачу. Nginx — это фронтенд вашего объектного хранилища. Swift (либо Ceph) — это объектное хранилище, решающее задачи шардинга и репликации. И к нему тоже нужен фронтенд и тоже с кэшем и это тоже может быть nginx, либо что-то ещё, что хорошо ложится в инфраструктуру и решает задачу. Swift не будет и не может быть быстрее, поскольку это инструмент для совсем другой задачи. Зато там есть репликация, шардинга, отказоустойчивость.

Посмотрите https://github.com/golang/groupcache — на golang от создателя LJ & memcached Brad Fitzpatrick.


Создавался для dl.google.com — задача чем то похожая на вашу.

Надо сказать прямо, что сайт ваш по внешнему виду и функционалу выглядит таким же написанным студентами на коленке как и ваша «система хранения». Вариантов хранения и раздачи кучи редко меняющихся данных — вагон и маленькая тележка. Но нет, сэкономим и будем изобретать велосипед, это так типично для русского бизнеса.
«Каждый мнит себя стратегом, видя бой со стороны» (с)

На самом деле в тексте статьи есть объяснение почему выбран такой вариант, попробуйте внимательней прочитать.
А вы не думали воспользоваться чем-то готовым типа GlusterFS (распределенный1 реплицируемый волюм)?
Про это есть в статье.
Прошу прощения, не сразу заметил.
Последнее релизы более стабильные. Лично не замечал саморазваливания и зависания при стабильно работающем оборудовании. Вероятно вопрос в специфике работы приложения и нагрузок
НЛО прилетело и опубликовало эту надпись здесь

Вопрос: рассматривали вариант использовать S3 как хранилище и свой набор машин как кеш для отдачи?
Мы у себя реализовали похожую схему — только вместо S3 использовали свою наработку, которая размещается ближе и работает лучше.
Работает отлично, масштабируется только в путь. При необходимости, можно легко сделать модификацию картинок — уменьшение, обрезка и пр.

Такая мысль была, про S3 я писал в одном из комментариев выше.
Вот кстати вопрос. У вас каждая картинка имеет уникальное имя? Или же он привязаны к объявлению?
насколько я помню из попыток парсинга авито id картинки привязано к объявлению через внутрение структуры системы, недоступные конечному пользователю. Т.е. из урла картинки получить само объявление у меня не получилось, хотя может только у меня.
«Нормально делай, нормально будет!»
:))
Зарегистрируйтесь на Хабре, чтобы оставить комментарий