Комментарии 70
Даже с контрактными условиями под NDA (я его, к счастью, не подписывал, хотя и предлагали), которые составляют около 60% при 400+ТБ egress в месяц, это слишком дорого. Просто (относительно конструирования своего хранилища), да, но дорого.
Есть конечно промежуточное решение — пара/тройка кэширующих серверов в локальном ДЦ, но тут эффективность кэширования сильно зависит от типа сайта. У нас 1:8-1:10, но у того же Avito может быть совершенно другое соотношение.
Мы не боимся их потерять потому что у нас есть система бэкапов. Перед созданием системы возможные риски были оценены и согласованы. Я об этом упоминал в статье.
Картинка в объявлении — короткоживущий ресурс. Вероятность потери за месяц-два востребованности исчезающе мала.
Мне довелось увидеть раздел "работа" в самом начале (со стороны поиска кандидатов) — вот где мрак был, большинство объявлений с темой "ищу работу" и таким же содержанием. Как говорится, шортее и симплее некуда, выделить что-то осмысленное или отфильтровать не представлялось возможным.
Например "~10^9 объектов, ~500ТБ чистого места".
Примеры PS пришлите.
Можно в личку
Это не совсем поиск.
Тут достаточно древний и тупой алгоритм, по поиску похожих.
В этом году планируется заменить его там, где он работает плохо на новый более умный вариант.
В старый алгоритм, внесли изменения, чтобы больше внимание было ключевым словам, в ближайшее время выкатим.
P.S. спасибо за фидбек.
Осталось пожелать разработчикам, чтобы они обратили внимание на функционал, отличающий анонимную барахолку от серьезного торгового посредника. Методы мошенничества на Авито уже вошли в легенду, в то время как наши западные (Ebay) и восточные (Ali) партнеры успешно эти проблемы решают — валидация, отзывы, рейтинги и т.д.
Методы мошенничества на Авито уже вошли в легенду
О дааа, особо доставляет, что 8-9 из 10 предложений в разделе «сдам жильё» следует читать, как: "
И представляют они из себя совсем не доски объявлений, а вполне-себе площадки для электронной коммерции.
Всё же целевая аудитория очень разная. Я никогда не пойду продавать свою микроволновку на Ebay: слишком много проверок, регистраций, ответственности, обязательство доставки и т.д.
Локальная доска объявлений это просто другой продукт, со своими плюсами и минусами.
Про методы мошенничества на Авито кстати предупреждают, с подробным описанием всех типичных, так что с проблемой работают.
Если бы половину сил, затраченных на реализацию подсистемы хранения картинок (она мне нравится), направить на затыкание очевидных дыр в функционале, то результаты были бы впечатляющи. Но проблема картинок сама «стучалась в двери», ей решили.
Считаю текущий функционал Avito репутационным провалом. В 2015 году дваджы писал на compliance@avito.ru с предложениями — ни ответа, ни привета :)
Ну да ладно, развиваться всегда есть куда. Ну а по своему опыту понимаю, что у популярного ресурса нету возможности слушать все предложения всех пользователей.
Если ресурс работает в России и стоит больше двух ярдов зеленых, то должен соответствовать определенному уровню функционала. Я по своему опыту знаю, насколько важно слушать все предложения всех пользователей и делать выводы.
Поделитесь пожалуйста.
Если да то почему отказались?
10G линки дешевеют, сами подумываем запускать…
в других случаях будет
1. слишком много перескоков по диску
2. кеш не будет знать что ему держать у себя
1. перескоков не больше, если не меньше, чем при чтении из файловой системы. К тому же солид контейнер можно создать заранее (в том числе разместив как RAW) избежав проблемы дефрагментации полностью.
Конечно имплементация может изменить многое, если не всё :)
А что с безопасностью? Если я передам имя 0000 вместо 12345, то считаю что-то интересное? Или юзер не может повлиять на формирование имени "файла", доставаемого из хранилища?
Когда Ceph был не продакшн-рэди уже существовал как минимум Openstack Swift. Не самое быстрое, конечно, решение, но всё же. На дворе 2017 год и Ceph уже давно вполне годен для продакшна. Мы у себя решили похожую проблему как-то так https://www.youtube.com/watch?v=Y8JHEb1BkGQ
Сравнивать object storage и веб-сервер… Okay…
Nginx не решает вашу задачу. Nginx — это фронтенд вашего объектного хранилища. Swift (либо Ceph) — это объектное хранилище, решающее задачи шардинга и репликации. И к нему тоже нужен фронтенд и тоже с кэшем и это тоже может быть nginx, либо что-то ещё, что хорошо ложится в инфраструктуру и решает задачу. Swift не будет и не может быть быстрее, поскольку это инструмент для совсем другой задачи. Зато там есть репликация, шардинга, отказоустойчивость.
Посмотрите https://github.com/golang/groupcache — на golang от создателя LJ & memcached Brad Fitzpatrick.
Создавался для dl.google.com — задача чем то похожая на вашу.
Вопрос: рассматривали вариант использовать S3 как хранилище и свой набор машин как кеш для отдачи?
Мы у себя реализовали похожую схему — только вместо S3 использовали свою наработку, которая размещается ближе и работает лучше.
Работает отлично, масштабируется только в путь. При необходимости, можно легко сделать модификацию картинок — уменьшение, обрезка и пр.
:))
История хранилища картинок Avito