• Как выдержать повышенные нагрузки на систему: рассказываем о масштабной подготовке к Черной Пятнице

      Привет, Хабр!

      В 2017 году во время Черной Пятницы нагрузки выросли почти в полтора раза, и наши сервера находились на пределе возможностей. За год количество клиентов значительно выросло, и стало понятно, что без тщательной предварительной подготовки платформа может просто не выдержать нагрузок 2018 года.

      Цель поставили самую амбициозную из возможных: мы хотели быть полностью готовыми к любым, даже самым мощным, всплескам активности и начали заранее выводить новые мощности в течение года.

      Наш CTO Андрей Чиж (chizh_andrey) рассказывает, как мы готовились к Черной Пятнице 2018, какие меры предприняли, чтобы избежать падений, и, конечно, же о результатах такой тщательной подготовки.


      Читать дальше →
    • Нужен ли магазину «Стильный кросселл»: опыт Retail Rocket в анализе изображений для формирования рекомендаций

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



        В этой статье мы описываем опыт применения технологии анализа изображений для улучшения алгоритма сопутствующих товаров. Читать ее можно двумя способами: те, кто не интересуется техническими деталями использования нейронных сетей, могут пропустить главы про формирование датасета и реализацию решений и перейти сразу к AB-тестам и их результатам. А тем, кто имеет базовое представление о таких понятиях как эмбендинги, слой нейронной сети и т.д., будет интересен весь материал целиком.
        Читать дальше →
        • +10
        • 2.3k
        • 6
      • Как мы нашли критичную уязвимость AspNetCore.Mvc и перешли на собственную сериализацию

          Привет, Хабр!

          В этой статье мы хотим поделиться нашим опытом в оптимизации производительности и исследовании особенностей AspNetCore.Mvc.



          Предыстория


          Несколько лет назад на одном из наших нагруженных сервисов мы заметили существенное потребление ресурсов CPU. Это выглядело странно, так как задачей сервиса было фактически взять сообщение и переложить его в очередь, предварительно произведя над ним некоторые операции, такие как валидация, дополнение данными, и т.п.

          В результате профилирования мы обнаружили, что большую часть процессорного времени “съедает” десериализация. Мы выкинули стандартный сериализатор и написали свой на Jil, в результате чего потребление ресурсов снизилось в разы. Все работало как нужно и мы успели об этом позабыть.
          Читать дальше →
          • +19
          • 5.5k
          • 4
        • Рабочее место .NET разработчика или трудности выбора идеальной конфигурации ver.2.0

            Привет, Хабр!

            И снова мы приоткрываем дверь «за кулисы» проекта Retail Rocket. Запуская инженерный блог, мы обещали рассказывать о подходах, используемых в области анализа данных, и разработки технологий, которые позволяют создавать самую популярную на рынке ecommerce платформу персонализации.

            Пару лет назад мы рассказывали о том, как организовано место наших .NET разработчиков, а сегодня решили поделиться с сообществом нашей усовершенствованной конфигурацией, которую используем в работе сейчас.


            Старое рабочее место .NET разработчика в офисе Retail Rocket

            Все также половина нашей команды разрабатывает на .NET, но почти все разработчики сменили Visual Studio и Resharper на Rider 2018. Rider оказался заметно быстрее, чем Visual Studio с решарпером, и мы не устояли. Также из-за все большего количества проектов и файлов, нам пришлось разделить единый solution на несколько. Но нам все еще требуются быстрые машины, чтобы работа оставалась комфортной.

            В начале этого года перед нами встала задача оборудовать еще несколько рабочих мест для разработчиков, мы решили поработать над существующей производительностью и подобрали новые комплектующие.
            Читать дальше →
          • Как принципы игры «Playing Lean» помогают в создании продуктов

              Привет, Хабр!

              О геймификации говорят много и часто, но далеко не всегда у компаний получается применить полученные в играх знания на практике. Мы в Retail Rocket считаем, что обучение через игру помогает гораздо лучше понять особенности различных процессов и учитывать этот опыт при работе над проектами.

              Сегодня мы хотим рассказать, как игра «Playing Lean» помогает не только погрузиться в методологию бережливого производства, но и применить этот опыт на практике — в разработке продуктов и новых фич.


              Читать дальше →
            • 10 материалов RecSys о рекомендательных системах, которые должен прочитать каждый

                Привет, Хабр! Сегодня мы хотим поделиться с сообществом подборкой лучших материалов конференции ACM Recommender Systems (RecSys), которые обязательно нужно прочитать каждому специалисту, который занимается рекомендательными системами.


                Читать дальше →
              • 10 уроков рекомендательной системы Quora

                • Tutorial


                Привет, Хабр! Как директор по аналитике Retail Rocket, я периодически посещаю различные профильные мероприятия, и в сентябре 2016 года мне посчастливилось побывать на конференции RecSys, посвященной рекомендательным системам, в Бостоне. Было очень много интересных докладов, но мы решили сделать перевод одного из них Lessons Learned from Building Real­-Life Recommender Systems. Он очень интересен с позиции того, как Machine Learning применять в production системах. Про сам ML написано множество статей: алгоритмы, практика применения, конкурсы Kaggle. Но вывод алгоритмов в production — это отдельная и большая работа. Скажу по секрету, разработка алгоритма занимает всего 10%-20% времени, а вывод его в бой все 80-90%. Здесь появляется множество ограничений: какие данные где обрабатывать (в онлайне или оффлайне), время обучения модели, время применения модели на серверах в онлайне и т.д. Критически важным аспектом также является выбор оффлайн/онлайн метрик и их корреляция. На этой же конференции мы делали похожий доклад Hypothesis Testing: How to Eliminate Ideas as Soon as Possible, но выбрали вышеупомянутый учебный доклад от Quora, т.к. он менее специфичный и его можно применять за пределами рекомендательных систем.
                Читать дальше →
                • +20
                • 7.9k
                • 6
              • Введение в архитектуры нейронных сетей



                  Григорий Сапунов (Intento)


                  Меня зовут Григорий Сапунов, я СТО компании Intento. Занимаюсь я нейросетями довольно давно и machine learning’ом, в частности, занимался построением нейросетевых распознавателей дорожных знаков и номеров. Участвую в проекте по нейросетевой стилизации изображений, помогаю многим компаниям.

                  Давайте перейдем сразу к делу. Моя цель — дать вам базовую терминологию и понимание, что к чему в этой области, из каких кирпичиков собираются нейросети, и как это использовать.

                  План доклада такой. Сначала небольшое введение про то, что такое нейрон, нейросеть, глубокая нейросеть, чтобы мы с вами общались на одном языке.

                  Дальше я расскажу про важные тренды, что происходит в этой области. Затем мы углубимся в архитектуру нейросетей, рассмотрим 3 основных их класса. Это будет самая содержательная часть.

                  После этого рассмотрим 2 сравнительно продвинутых темы и закончим небольшим обзором фреймворков и библиотек для работы с нейросетями.
                  Читать дальше →
                  • +48
                  • 123k
                  • 2
                • OpenDataScience и Mail.Ru Group проведут открытый курс по машинному обучению

                    6 сентября 2017 года стартует 2 запуск открытого курса OpenDataScience по анализу данных и машинному обучению. На этот раз будут проводиться и живые лекции, площадкой выступит московский офис Mail.Ru Group.



                    Если коротко, то курс состоит из серии статей на Хабре (вот первая), воспроизводимых материалов (Jupyter notebooks, вот github-репозиторий курса), домашних заданий, соревнований Kaggle Inclass, тьюториалов и индивидуальных проектов по анализу данных. Здесь можно записаться на курс, а тут — вступить в сообщество OpenDataScience, где будет проходить все общение в течение курса (канал #mlcourse_open в Slack ODS). А если поподробней, то это вам под кат.

                    Читать дальше →
                  • Scala коллекции: секреты и трюки

                    • Translation

                    Представляю вашему вниманию перевод статьи Павла Фатина Scala Collections Tips and Tricks. Павел работает в JetBrains и занимается разработкой Scala плагина для IntelliJ IDEA. Далее, повествование идет от лица автора.


                    В этой статье вы найдете упрощения и оптимизации, характерные для повседневного использования API Scala коллекций.


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


                    Этот список вдохновлен моими попытками разработать практичные инспекции для Scala коллекций, для Scala плагина IntelliJ. Сейчас мы внедряем эти инспекции, так что, используя Scala плагин в IDEA, вы автоматически выигрываете от статического анализа кода.


                    Тем не менее, эти рецепты ценны сами по себе. Они могут помочь вам углубить понимание стандартной библиотеки коллекций Scala и сделать ваш код быстрее и выразительнее.


                    Обновление:
                    Если вы испытываете тягу к приключениям,
                    вы можете узнать, как помочь в развитии IntelliJ плагина для Scala и попробовать свои силы в реализации, подобрав подходящую инспекцию.

                    Читать дальше →
                  • Открытый курс машинного обучения. Тема 10. Градиентный бустинг


                      Всем привет! Настало время пополнить наш с вами алгоритмический арсенал.


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


                      UPD: теперь курс — на английском языке под брендом mlcourse.ai со статьями на Medium, а материалами — на Kaggle (Dataset) и на GitHub.


                      Видеозапись лекции по мотивам этой статьи в рамках второго запуска открытого курса (сентябрь-ноябрь 2017).

                      Читать дальше →
                    • Лекция Владимира Игловикова на тренировке Яндекса по машинному обучению

                        Скорее всего, вы слышали об авторе этой лекции. Владимир ternaus Игловиков занял второе место в британском Data Science Challenge, но организаторы конкурса не стали выплачивать ему денежный приз из-за его российского гражданства. Затем наши коллеги из Mail.Ru Group взяли выплату приза на себя, а Владимир, в свою очередь, попросил перечислить деньги в Российский Научный Фонд. История получила широкий охват в СМИ.

                        Спустя несколько недель Владимир выступил на одной из тренировок Яндекса по машинному обучению. Он рассказал о своём подходе к участию в конкурсах, о сути Data Science Challenge и о решении, которое позволило ему занять второе место.


                        Читать дальше →
                        • +41
                        • 12.3k
                        • 6
                      • Planning Poker: как сделать процесс постановки задач максимально прозрачным и четким

                          В прошлом посте мы рассказали о том, как работаем с бэклогом, а сегодня поделимся подробностями о процессе планирования, который в нашем случае не только полезный, но и увлекательный, поскольку оценку задач мы проводим с помощью «Planning Poker».

                          image
                          Читать дальше →
                        • Deep Learning, теперь и в OpenCV



                            Данная статья является кратким обзором возможностей dnn — модуля OpenCV, предназначенного для работы с нейросетями. Если вам интересно, что это такое, что оно умеет и как быстро работает, добро пожаловать под кат.
                            Читать дальше →
                          • Атака на АБ-тест: рецепт 'R'+t(101)+'es46'

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

                              Несколько месяцев назад один из наших конкурентов начал делать странное – предлагать нашим клиентам сравнение своей системы рекомендаций с Retail Rocket через АБ-тесты в формате «пари» с обязательством заплатить 100 000 рублей в случае проигрыша.

                              Подобные истории для нас не редкость — за время существования компании нашу систему сравнивали практически со всеми существующими рекомендательными системами в России и за рубежом, и мы всегда показывали отличные результаты (ни в одном тесте мы не проиграли по эффективности).

                              Первый тест с Rees не заставил себя ждать, но в ходе его проведения мы столкнулись с довольно странными результатами, которые вылились в серьезное исследование. То, что мы обнаружили в итоге, удивило нас так сильно, что мы хотим поделиться деталями этого исследования и вынести его результаты на суд IT-сообщества и индустрии электронной коммерции в России.


                              Читать дальше →
                            • Курс молодого бойца для Spark/Scala

                                Хабр, привет!

                                Команда Retail Rocket использует узкоспециализированный стек технологий Hadoop + Spark для вычислительного кластера, о котором мы уже писали обзорный материал в самом первом посте нашего инженерного блога на Хабре.

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


                                Читать дальше →
                                • +15
                                • 24.3k
                                • 8
                              • Рабочее место .NET разработчика или трудности выбора идеальной конфигурации

                                  Хабр, привет!

                                  Мы продолжаем приоткрывать дверь в технологическую кухню Retail Rocket. В сегодняшней статье мы решили поделиться историей о нашем «корпоративном backend`е», речь пойдет о рабочем месте для разработчика. Та самая зона комфорта, которая окружает нас в жизни, но является не менее важной, чем выбор стека технологий.

                                  Передо мной встала задача подготовить рабочее место для нового члена команды разработки, казалось бы, что может быть проще? На практике оказалось все гораздо сложнее, чем я ожидал. Раньше мы покупали стол «Галант» в IKEA, любое офисное кресло + MacBook Pro – и у нас готово новое рабочее место.


                                  Старое рабочее место .NET разработчика в офисе Retail Rocket

                                  С тех пор прошло 2 года, мы выросли, у нас изменился стиль работы — пора подбирать новую конфигурацию. Половина нашей команды работает на технологическом стеке от Microsoft. Это большой проект в Visual Studio 2015 + Resharper: 26 приложений, 9 библиотек, 3 проекта с тестами, что в сумме на момент публикации статьи дает 4 312 файлов и более 60 тыс. строк кода. Плюс IIS с компиляцией и запуском приложения на локальной машине, что накладывает повышенные требования к вычислительной мощности используемого оборудования.

                                  На выбор подходящей конфигурации я потратил 4 недели и все еще не уверен, что все сделал правильно, поэтому решил, что мой опыт будет полезен сообществу, тем более, что вы всегда сможете скорректировать конфигурацию индивидуально под себя.
                                  Читать дальше →
                                • Redis и проблема больших данных

                                    in memory db

                                    Привет, Хабр! Мы продолжаем делиться технологической кухней Retail Rocket. В сегодняшней статье мы разберем вопрос выбора БД для хранения больших и часто обновляемых данных.

                                    На самом начальном этапе разработки платформы перед нами возникли следующие задачи:
                                    • Хранить у себя товарные базы магазинов (т.е. сведения о каждом товаре всех подключенных в нашу платформу магазинов с полным обновлением 25 млн. товарных позиций каждые 3 часа).
                                    • Хранить рекомендации для каждого товара (около 100 млн. товаров содержит от 20 и более рекомендуемых товаров для каждого ключа).
                                    • Обеспечение стабильно быстрой выдачи таких данных по запросу.

                                    Читать дальше →
                                  • Подводные камни A/Б-тестирования или почему 99% ваших сплит-тестов проводятся неверно?

                                      image

                                      «Горячая» и часто обсуждаемая сегодня тема оптимизации конверсии привела к безусловной популяризации А/Б-тестирования, как единственного объективного способа узнать правду о работоспособности тех или иных технологий/решений, связанных с увеличением экономической эффективности для онлайн-бизнеса.

                                      За этой популярностью скрывается практически полное отсутствие культуры в организации, проведении и анализе результатов экспериментов. В Retail Rocket мы накопили большую экспертизу в оценке экономической эффективности от систем персонализации в электронной коммерции. За два года был отстроен идеальный процесс проведения A/Б-тестов, которым мы и хотим поделиться в рамках этой статьи.
                                      Читать дальше →
                                    • Анализ данных на Scala. Считаем корреляцию 21-го века


                                        Очень важно выбрать правильный инструмент для анализа данных. На форумах Kaggle.com, где проводятся международные соревнования по Data Science, часто спрашивают, какой инструмент лучше. Первые строчки популярноcти занимают R и Python. В статье мы расскажем про альтернативный стек технологий анализа данных, сделанный на основе языка программирования Scala и платформы распределенных вычислений Spark.

                                        Как мы пришли к этому? В Retail Rocket мы много занимаемся машинным обучением на очень больших массивах данных. Раньше для разработки прототипов мы использовали связку IPython + Pyhs2 (hive драйвер для Python) + Pandas + Sklearn. В конце лета 2014 года приняли принципиальное решение перейти на Spark, так как эксперименты показали, что мы получим 3-4 кратное повышение производительности на том же парке серверов.
                                        Подробности