Добрый день, меня зовут Андрей Солдатов, мы в команде Россельхозбанка разрабатываем новые интересные проекты, связанные с сельским хозяйством. В качестве фронтального решения для некоторых из них мы решили использовать интересное open source решение Vue Storefront. В этой статье вы можете ознакомиться с ключевыми возможностями и особенностями этого решения. Статья является переводом статьи из официального блога Vue Storefront, оригинал доступен по ссылке.
Vue Storefront - это достаточно сложное решение с обширными возможностями. Изучение их всех может занять некоторое время. В этой статье я за несколько минут постараюсь объяснить вам его ключевые понятия, чтобы показать все необходимое для начала работы с Vue Storefront.
Vue Storefront это backend-независимое PWA (веб)приложение для электронной коммерции, написанное на Vue.js. То, что он использует headless-архитектуру, позволяет Vue Storefront работать с любой eCommerce платформой, он может выступать в качестве PWA для Magento, Shopify, BigCommerce, WooCommerce и других.
Это очень популярный open source проект с сильным и развивающимся сообществом.
Ключевые особенности Vue Storefront:
Кроссплатформенность
Фокус на производительность
Принцип mobile-first
Передовые технологии
Нет ограничений в стилистике тем и кастомизаций
Открытый исходный код с лицензией MIT
Сообщество опытных разработчиков
Серверный рендеринг из коробки (для SEO)
Offline режим
Тут вы найдете сайт Vue Storefront, а здесь GitHub репозиторий.
Vue Storefront является backend-независимым благодаря vue-storefront-api и отдельным API-коннекторам для eCommerce backend-платформ. Формат данных в vue-storefront-api всегда одинаков для любой платформы. Это означает, что независимо от того, какую eCommerce платформу вы используете, ваш веб-интерфейс остается без каких-либо изменений.
Это отличная стратегия, так как вы легко сможете переходить с одной платформы на другую (или с одной версии на другую, например, Magento 1 -> 2), не трогая ваш frontend.
Коннектор API работает в два этапа:
data pump (на рисунке mage2nosql) извлекает статические данные (каталог, заказы и т.д.) из вашей eCommerce платформы во Vue Storefront ElasticSearch и изменяет формат на тот, который используется vue-storefront-api. После получения данных вы можете отобразить ваш каталог продуктов во Vue Storefront. После загрузки данных в ElasticSearch они будут синхронизироваться с изменениями на стороне backend-платформы и обновлять контент.
worker pool это синхронизация так называемых динамических вызовов (пользовательских сессий, правил корзины и т.д.), которые не могут быть сохранены в базе данных и должны вызываться vue-storefront-api напрямую с backend платформы.
Управляя этими двумя этапами интеграции, Vue Storefront может работать с вашей backend платформой.
Некоторые из популярных backend платформ уже имеют готовые интеграции (Magento 2, Magento 1, CoreShop, BigCommerce, WooCommerce), но вы можете легко создать свою собственную с помощью шаблона.
Синие элементы на рисунке отвечают за автономный кеш, о них будет рассказано позже.
При работе с Vue Storefront необходимо ознакомиться с тремя концепциями:
Vue Storefront Core (/core(http://personeltest.ru/aways/github.com/DivanteLtd/vue-storefront/tree/master/core)) является связующим звеном для всех его функций, которые позволяют Vue Storefront работать. Он содержит все необходимые для работы приложения: SSR, билды, встроенные библиотеки и хелперы. Не следует трогать эту папку при создании собственных решений, для того, чтобы продолжать получать обновления.
Vue Storefront Modules (/core/modules и /src/modules) - это eCommerce модули. Каждый модуль представляет собой одну функцию (например, корзина, wish list, каталог, сторонние интеграции). Вы можете добавлять / удалять / редактировать эти модули по своему усмотрению и использовать только те функции, которые вам нужны. Они же используются и для сторонних расширений.
Vue Storefront Themes (src/themes) - это реализация вашего сайта. В темах вы можете использовать и расширять всю логику из зарегистрированных модулей/ядра и добавлять свою HTML-разметку и стили. Vue Storefront из коробки предоставляет полностью надстраиваемую тему по умолчанию.
Подводя итог: ваш сайт это в основном Vue Storefront Themes, в котором используются функции, предоставляемые Vue Storefront Modules. Vue Storefront Core склеивает это все воедино.
Понимание этих трех аспектов позволит вам работать с Vue Storefront и создавать собственные сайты на нем.
Полезные материалы: структура проекта Vue Storefront.
Есть три варианта:
Это все, что нужно чтобы VS заработал с нашим демо-бэкендом.Вы можете подключить свой frontend к нашей демо backend-платформе (лучший вариант, чтобы попробовать Vue Storefront).
Вы можете настроить frontend с вашим собственным vue-storefront-api и базой данных, выгруженной из демо-версии.
Вы можете настроить frontend с помощью vue-storefront-api, подключенного к вашему eCommerce backend.
Чтобы сделать что-то из этих вариантов, просто введите "yarn installer" в корневом каталоге проекта и ответьте на вопросы в консоли. После завершения установки для запуска проекта введите команду "yarn dev" (по умолчанию на 3000 порту). Независимо от того, что вы выберете, вы сможете изменить настройки в файле конфигурации.
Большая часть конфигурации Vue Storefront (например, активная тема, адреса внутреннего интерфейса API, настройки магазинов и т.д.) выполняется через файл конфигурации, который можно найти в папке "/config". Файл default.json содержит все настройки по умолчанию.
Для вашей реализации вы должны создать файл local.json и включить поля из default.json, которые вы хотите переопределить. Эти два файла будут объединены с приоритетом local.json в процессе сборки. Если вы используете инсталлятор для установки своего инстанса Vue Storefront, он сам сгенерирует корректные файлы конфигурации.
При создании тем в Vue Storefront в большинстве случаев все, что вам нужно это создать собственную HTML и CSS разметку. Вся необходимая бизнес-логика находится в ядре с его основными модулями и может быть легко внедрена в любой из компонентов темы.
Бизнес-логика из основных компонент может быть легко внедрена в любые темы с использованием Vue.js миксинМеханизм внедрения основной бизнес-логики в темы очень прост. Мы используем Vue.js миксины для сохранения возможности обновления основной бизнес-логики. Таким образом, предполагая, что у нас есть, например, ядро Microcart с такой бизнес-логикой (слева на рисунке), мы можем легко внедрить его в любой из наших компонентов темы (справа), просто импортировав его и добавив в качестве mixins: [Microcart]. Это все, что вам нужно, чтобы использовать основной бизнес-логику в вашей теме. При таком подходе мы можем легко обновлять все основные компоненты, не ломая сайт.
Самый простой способ создать свою тему - это создать копию темы по умолчанию, изменить её имя в package.json, выбрать активную тему в config/local.json и запустить yarn, чтобы сделать Lerna линкование (которое используются для monorepos).
Vue Storefront продолжает работать, даже когда пользователь не в сети. Нам удалось это сделать с помощью активного использования кеша браузера.
Для статик ресурсов (только для prod) мы используем плагин sw-precache (конфигурацию можно найти в /core/build/webpack.prod.sw.config.js). Они кэшируются в Service Worker и могут быть проверены на вкладке браузера Application.
Для кэша каталога и данных мы используем IndexedDB и Local Storage. Мы также предварительно выбираем товары из посещенных категорий, поэтому, как только вы посетите одну из них, все ее продукты будут доступны вам в автономном режиме. Механизм автономного кэширования находится в папке /core/lin./storage.
Мы используем некоторые из закэшированных данных, даже когда пользователь находится онлайн, это нужно для мгновенного отображения контента. Вот почему Vue Storefront такой быстрый.
Можете мне не верить, но это все, что вам нужно знать, для начала работы с Vue Storefront! После изучения основ просто посмотрите нашу документацию и посетите сообщество, чтобы глубже погрузиться в проект.
Также вы можете посмотреть видео с 4го Vue Storefront хакатона с ознакомительным обучением.
Сегодня рынок электронной коммерции растт с беспрецедентной скоростью. В 2019 году объм продаж в сфере e-commerce во всм мире составил 3,53 триллиона долларов США. А уже к 2022 году эта цифра может увеличиться до 6,54 триллионов долларов США.
Онлайн-покупки стали неотъемлемой частью современного мира и нашей повседневной жизни с е быстрым темпом. Покупки в интернет-магазинах экономят время: они позволяют сделать всё виртуально, без физического присутствия. Один щелчок мыши и покупка уже на пути к вам. Мало того, можно устроить шоппинг даже ночью, что невозможно в привычных нам торговых центрах.
Такой стремительный переход мира к онлайн-продажам означает ещё больше возможностей для выхода компаний на международные рынки. Ведь в Интернете не существует географических границ. Это позволяет развивать бизнес быстрее и легче.
Выход на новые рынки не дело нескольких дней. Как минимум для начала необходимо создать удобную платформу для онлайн-продаж и сделать е доступной, нативной и понятной для людей из разных регионов. И в том, чтобы стать максимально аутентичными для зарубежных рынков, вам поможет локализация контента.
Локализация контента это процесс адаптации всего контента на сайте или в приложении под целевую аудиторию и рынок. Главная цель локализации в том, чтобы правильно донести идею вашего бизнеса до зарубежных клиентов.
Важно отметить, что локализация контента это не то же самое, что перевод текста. Локализация подразумевает более детальную проработку региональных особенностей рынка, культурных различий и местных привычек.
Можно выделить три уровня: простой перевод, локализация и адаптация контента под местные культурные особенности. Последний термин адаптация контента под местную культуру это самый сложный способ подстройки, в то время как перевод это самый лёгкий способ.
В общем, говоря о локализации для e-commerce бизнеса, мы имеем в виду адаптацию контента. Именно максимальная проработка контента поможет сделать интернет-магазин понятным и релевантным на зарубежных рынках.
E-commerce, по сути, это онлайн-бизнес. Чем больше людей видят и, главное, понимают ваши предложения, тем больше шансов, что часть из них превратится в реальных клиентов. Вот некоторые интересные цифры.
Согласно исследованиям, около 65% онлайн-покупателей из неанглоязычных стран предпочитают приобретать только те товары, о которых есть информация на их родном языке. Даже если перевод не слишком качественный. И около 40% из них никогда не совершат покупку на сайте, который весь на иностранном языке. Очевидно, что ни один владелец онлайн-магазина не хочет потерять эти 40% потенциальных клиентов.
У локализованных веб-сайтов больше шансов привлечь внимание зарубежных покупателей. Потому что понятные местной аудитории сайты улучшают опыт взаимодействия пользователя.
А ещё локализация поможет избежать парочки неловких ситуаций. Один из популярных казусов в локализации произошл со скандинавским производителем пылесосов Electrolux. Компания использовала вот такой слоган на американском рынке: Nothing Sucks like an Electrolux. В переводе это должно было звучать как Ничто не всасывает пыль лучше, чем Electrolux. Но в итоге буквальный перевод фразы на английский означает Нет ничего хуже, чем Electrolux, причём в достаточно грубой форме.
Для того, чтобы не упустить ни одной детали при локализации контента лучше заранее составить чткий план. Тут понадобится продуманная стратегия, и дальше мы расскажем о её самых важных элементах. Поехали!
Маркетинговое исследование это первый и самый важный шаг перед тем, как начать процесс локализации контента.
Изучите существующие данные о своих клиентах: из каких стран их приходит больше всего? Проанализируйте эти данные и решите на каких языках целесообразнее сосредоточиться. Также изучите, какие продукты могут стать самыми успешными на новом рынке. Например, если вы продаёте одежду в интернет-магазине, то товары для Австралии могут отличаться от товаров для Исландии. Очевидно, что продавать летнюю одежду в Исландии не самое перспективное направление. Чтобы понять какие продукты имеют шансы на успех в определенном регионе, можно воспользоваться Планировщиком ключевых слов от Google или инструментом Google Trends.
Скорее всего, вам не нужно будет локализовывать весь контент вашего онлайн-магазина, потому что вряд ли вы будете продавать все свои товары на новом рынке (особенно сначала).
Кроме того, для начала можно локализовать примерно 10% контента основные разделы и страницы. Это поможет в целом понять, работает локализованный контент или нет. И когда вы увидите, что у зарубежной аудитории есть интерес, можно приступить к локализации всего контента онлайн-магазина.
Профессиональная SEO-оптимизация поможет увеличить вовлеченность, трафик и конверсии на локализованном сайте.
Для начала необходимо подобрать ключевые слова, которые часто используются в новом регионе и по которым вы хотите, чтобы вас находили. Вы можете это сделать с Планировщиком ключевых слов от Google, о котором мы говорили раньше.
Очевидно, что в каждом регионе люди гуглят по-разному. Например, если вы продаёте очки в России и Украине, то нужно выбирать разные ключевые слова. На российском сайте можно добавить, к примеру, фразы с названиями крупных городов: очки в Москве, купить очки в Питере и т.д. А для украинской версии сайта можно выбрать ключевые слова ещё и на украинском языке.
И нужно будет не только подобрать релевантные "ключи", но и внести их на сайт, обновить все URL-адреса согласно региону, изменить заголовки и подзаголовки, а также обновить все метатеги.
А ещё надо подумать о рекламных кампаниях для нового рынка. Конечно, сайт придётся продвигать, иначе как о вас узнает новая аудитория? Очень важно, чтобы реклама была максимально нативной, чтобы привлечь как можно больше людей и сконвертировать их в реальных покупателей.
Согласно исследованию локализованная реклама работает намного лучше, чем реклама на иностранном языке. Результаты сравнения двух таких кампаний на Facebook впечатляют: у объявлений, в которых использовался локализованный текст, CTR (click-through rate, показатель кликабельности) выше на 22% среди женщин и на 87% среди мужчин, чем в аналогичной нелокализованной рекламе.
Изображение с сайта adparlor.comОбратите внимание на культурные особенности нового рынка, традиционные для региона праздники и ивенты.
Чрная пятница и Киберпонедельник стали чуть ли не самыми важными днями для e-commerce в США, Великобритании и даже России. Но, например, в Китае существует своя версия этого дня День холостяков, который празднуют 11 ноября. Интересно, что кроме китайского бизнеса в этот день скидки активно предоставляют и многие западные компании, которые работают в китайском сегменте. Так что если вы выходите на иностранный рынок, не забудьте адаптировать и промо-акции.
А ешё, к примеру, если вы продаёте товары и в России, и в США, стоит учитывать, что Рождество в России не такой популярный праздник, как в Америке. В российских реалиях Новый Год важнее. Поэтому локализуйте контент с учётом этих особенностей: в США вы можете устроить распродажу на Рождество, а в России будет логичнее предложить новогодние скидки.
Для онлайн-магазинов цены это первое, о чм следует подумать при локализации. Очевидно, что пользователям привычнее и удобнее видеть цены в своей местной валюте. Либо можно указать две цены: в оригинальной и местной валютах.
При локализации валют используйте соответствующие символы для обозначения валюты. А ещё обратите внимание на то, что некоторые символы валюты указываются перед ценой, например $ и , а некоторые после, например . Для обозначения десятичных знаков используются разные разделители: в одних регионах это запятые, а в других точки.
Не забудьте локализовать единицы измерения. К примеру, в Европе и США температура обозначается по-разному C и F соответственно.
Если вы продаете одежду, подумайте о локализации размеров, указанных на сайте. Европейские размеры обуви обычно выглядят так: 34, 35, 36 и т.д. А в США размерный ряд начинается с 5,6, 7, 8 и т.д.
Не все покупатели, добавившие товары в корзину, потом покупают их. Для этого был даже придуман специальный термин брошенная корзина. На самом деле, около 70% покупателей уходят из интернет-магазина, так и не завершив покупки. Поэтому, если не локализовать корзину покупок, то велик шанс, что этот показатель будет ещё выше.
Так что корзину покупок нужно адаптировать под местный рынок и сделать её удобной и понятной для пользователей в новом регионе. И не забудьте переключить корзину на местную валюту и добавить популярные способы оплаты.
Не секрет, что даже у одного языка может быть множество диалектов. Возьмём, к примеру, английский язык. Британский и американский английский значительно отличаются между собой.
Например, elevator и lift означают одно и то же лифт, но первое слово используется в американском варианте, а второе в британском. То же самое можно сказать о словах vacationи holiday. На такие детали стоит обращать внимание, чтобы звучать по-настоящему аутентично на зарубежном рынке.
Очевидно, что если терминология отличается даже в одном и том же языке, она будет отличаться и в двух совсем разных языках.
Это важно, потому что неправильный формат может ввести в заблуждение зарубежных клиентов. Предположим, вы продаёте из России в США. Покупатель в Америке указывает дату 02.03.2020. Для вас, в России, это означает 2 марта. В США это же значит 3 февраля. Наверное, покупатель будет разочарован, получив свой заказ на месяц позже... Поэтому не забудьте поменять форматы даты под разные рынки.
В большинстве стран в формате даты день стоит первым, а год последним ДД/ММ/ГГГГ. Однако в некоторых странах, таких как Китай, Корея и Иран, используются такой формат даты: ГГГГ/ММ/ДД. Формат времени может быть 24-часовым или 12-часовым. В США обычно используется формат AM/PM, а в Европе более распространён 24-часовой формат.
Для юридической защиты своего бизнеса в Интернете, нужно знать и соблюдать правовые нормы региона, в котором вы собираетесь работать.
Убедитесь, что ваши товары абсолютно легальны на данном рынке. К примеру, однажды, не проверив все юридические моменты, Kinder Surprise хотели выйти на рынок США. И вдруг они обнаружили, что шоколадные яйца с игрушками внутри являются незаконными там, хотя соседние Канада и Мексика разрешают их продажу на своей территории. Наверное, никто не хотел бы оказаться в ситуации, когда вы потратили много денег на запуск продукта и вдруг понимаете, что вы вообще не имеете права продавать его в данном регионе.
Локализуя свой интернет-магазин, не забудьте о "Политике конфиденциальности" и "Условиях использования", которые обязательно должны быть на сайте любой компании. Если вы не уверены, что нужно включить в эти документы для нового региона, то лучше проконсультируйтесь с юристом, чтобы не получить потом штраф или вообще запрет на работу в стране.
Неплохо было бы локализовать свою службу поддержки. Можно нанять местную команду в новом регионе или создать удалённую команду из сотрудников, которые говорят на местном языке. И не забудьте создать отдельный канал связи для нового рынка: это может быть электронная почта, страница в социальных сетях или номер телефона.
Кстати, хорошая идея сделать раздел F.A.Q. на сайте наиболее часто задаваемые вопросы (frequently asked questions). Можно разместить заготовленные ответы на самые распространённые вопросы, и пользователи сами найдут эту информацию, когда она понадобится. Это частично позволит сократить затраты на команду поддержки в новом регионе.
Контент это не только про тексты. Очень важно заменить фотографии и изображения, которые не подходят для нового местного рынка. Например, если вы выходите на рынок Японии, замените фотографии с европейцами на фото с японцами. Это будет выглядеть естественнее.
На изображении ниже видно, как в одном из интернет-магазинов локализовали некоторые элементы на японский язык, но всё же оставили часть текста и меню на английском языке. Частично переведённый веб-сайт ухудшает пользовательский опыт и может испортить весь имидж вашего бренда на местном рынке.
Изображение взято с сайта www.gilt.comБез социальных сетей сегодня не может существовать ни один бизнес.
Если у вас уже есть аккаунты для основного рынка продаж и вы хотите начать работу в совершенно других регионах, имеет смысл создать для них отдельные аккаунты в социальных сетях.
Локализованные социальные сети дадут местной аудитории более персонализированный опыт взаимодействия с вашим брендом. Посмотрите, как, например, у McDonald's выглядят разные аккаунты в Instagram для разных стран.
Аккаунт McDonalds в Канаде в InstagramАккаунт McDonalds в России в InstagramДа, к локализации нужно приложить достаточно много усилий, но выход на новые рынки это достижимая задачи.И чтобы быстрее к ней приблизиться, мы поделимся несколькими неочевидными лайфхаками по локализации.
Онлайн-магазины обычно содержат в себе много такого контента, который нужно регулярно обновлять (описания товаров, цены, информация о доставке). Обновление отдельных текстов не подразумевает обновление всего контента на сайте: просто нужно добавить несколько измененных или новых строк на существующий сайт.
Для этого отлично подходит непрерывная локализация. Это решение поможет постоянно развивающимся проектам. С помощью специальных инструментов новые тексты на сайте можно выделить и добавить в облачную платформу для переводов. И после того, как строки текста будут переведены, они могут автоматически добавляться на сайт. В общем, обновление контента становится непрерывным процессом и не останавливает работу онлайн-магазина.
А ещё иногда нужно очень быстро внести небольшие изменения на сайте или перевести несколько строк. Для таких срочных задач можно присмотреться к онлайн-сервису Nitro. Сервис выручит, к примеру, когда нужно быстро добавить описание нового продукта на сайт на нескольких языках. Всё, что нужно сделать, это отправить информацию о продукте через платформу Nitro, и в течение нескольких часов вы получите локализованный текст.
Локализация контента очень важна, но не менее важно последующее локализационное тестирование. Тестирование помогает убедиться, что в текстах нет даже самых мелких ошибок.
Подытоживая, настоятельно рекомендуем обратить внимание на следующие нюансы локализации контента:
Целевая аудитория и исследование рынка
Культурный контекст
Правовые нормы и законы
Маркетинг в популярных социальных сетях
Правильный перевод всех описаний
Правильные форматы времени, даты, валюты, размеров одежды и т.д.
Локализация корзины покурок
Региональная служба поддержки
Локализация контента это не дополнительная фишка онлайн-магазина при выходе в новый регион, а необходимость для достижения успеха и роста на глобальном рынке электронной коммерции.
О нас
Alconost профессионально занимается локализацией приложений, игр и сайтов на более 70 языков. Лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджмент проектов 24/7, любые форматы строковых ресурсов. Мы также делаем видеоролики.
Привет, меня зовут Алексей, я системный архитектор e-commerce платформы Lamoda, и в этом посте мое представление о том, чем на самом деле занимается ИТ-архитектор, какие вопросы решает в ежедневной работе и за что несет ответственность.
Сцена из фильма "Начало"С начала 90-х ИТ-сфера сильно эволюционировала, и роль архитектора (я не буду говорить о профессии, потому что считаю, что как таковой ее у нас нет) развивалась вместе с ней. В 2021-ом перед ним стоит задача куда шире, чем проектирование. Он как архитектор зданий, которому нужно не просто построить условный дом, но и вписать его в окружающий контекст, включить в существующую экосистему. Архитектор принимает решения о важных вещах, выступает катализатором изменений, которые нужны проекту. Он использует нарративы, описывая, как должны выглядеть системы и какие паттерны использовать, чтобы команда могла их одобрить и реализовать.
Этот риторический вопрос я иногда задаю своей команде, выдергивая их из привычного потока мыслей и рутинных задач. А занимаемся мы перекладыванием JSON-ов, вот чем! сам же и отвечаю. Выражения лиц меняются с задумчивых на изумленные. Этой провокацией я делаю акцент на том, что происходит в программах, если убрать удобные абстракции привычных фреймворков и библиотек. Именно передача и координация являются нетривиальными задачами, хотя часто разработчики видят сложность совсем в других местах.
Мы разрабатываем приложения, которые выступают отдельными независимыми агентами в мультиагентной среде и обмениваются между собой сообщениями. Агентами могут выступать люди, которые взаимодействуют с приложениями, и другие системы, которые разрабатываются другими отделами, но также обмениваются с нашими приложениями сообщениями. JSON в данном случае выступает как условность, формат и протокол в действительности могут быть какими угодно.
JSON-ы принято обрабатывать: сериализовывать для передачи по сети и десериализовывать в модели для удобства обработки. Модели принято хранить в структурах данных в памяти и на диске для оптимизации операций записи и чтения. Все становится интереснее, когда мы хотим обрабатывать одновременно не один, а два JSON-а. Тут придется озаботиться, чтобы они друг другу не мешали и не нарушали задуманный порядок вещей. Задача перекладывания JSON-ов не является тривиальной, но должна оставаться простой.
Опытные инженеры, среди которых есть и архитекторы, ежедневно работают для того, чтобы круглосуточно на отправленный запрос в нашу систему выдавался верный JSON за приемлемое время. Например, создание заказа. Для e-commerce это критичное место: нужно провалидировать соответствие всех условий, корректно зарезервировать товары и оповестить все заинтересованные стороны о новом успешном заказе. Все это должно происходить за доли секунды и отвечать ожиданиям кастомера.
Между кликом и созданием заказа проходит меньше секунды. Клиент получает уведомление, что всё прошло успешно. И менее, чем через минуту, заказ уже собирается в фулфилмент центре Lamoda.В распределенной системе, когда у нас множество сервисов общаются между собой по сети, нужно выбирать между доступностью и согласованностью. Невозможно обеспечить одновременно и то, и другое, необходим компромисс. Более того, в каждом конкретном случае нужно адекватно выбирать модель согласованности. Да и доступность тоже не ограничивается числом успешных ответов.
Расширим круг действующих лиц. Добавим во взаимодействия команды разработки, которые постоянно вносят изменения, а также бизнес, который требует улучшений и развития.
Еще один пример. В Lamoda, как и в любой крупной e-commerce компании, существует большая система обработки заказов. За более чем 10 лет домен нашей системы вырос и многократно усложнился, как и ее ответственность за все ту же согласованность и доступность. Сама система и ее сложность появилась не просто так и не была результатом проектирования архитектора-маньяка. Ее создали люди, которые приняли сотни решений, а эти решения привели к тем результатам, которые мы видим сейчас. Нужно отдать должное этим людям, так как система выполняет возложенные на нее требования. Проблема только в одном вносить изменения стало крайне проблематично. И решение этой проблемы нельзя назвать тривиальным, но оно должно быть простым. Как и в задаче с обработкой JSON-ов.
У меня есть задача: построить систему взаимодействующих между собой сервисов. Они должны работать как единое целое, обеспечивать бесперебойную работоспособность большого и сложного e-commerce, который растет и развивается. При этом я должен учитывать десятилетний опыт legacy системы.
Отсутствие понимания, что делают существующие системы и как должны быть спроектированы будущие, является основной причиной того, что инициативы по глобальному рефакторингу слишком затягиваются, слишком дороги и иногда просто терпят неудачу.
Другими словами, моя задача управлять сложностью поддержки и развития. Не уменьшить, не препятствовать росту, а именно управлять. Настроить разработку в домене обработки заказов так, чтобы она была понятной, предсказуемой и стабильной.
Чтобы построить такую работающую систему, нужны технологии и практики, инструменты и компетенции. Опыт внутренней разработки в виде инструментов и инженеров, которые используют и развивают эти инструменты.
В 1990-х годах архитектура рассматривалась как набор структур, которые представляют собой абстракцию поставляемой системы, необходимых для работы с растущей сложностью типичных программных систем. С этой точки зрения, основные обязанности архитектора заключались в создании (визуальных) моделей системы и их использовании для проверки архитектуры.
В начале 2000-х фокус ответственности сместился: архитекторам нужно было принимать важные решения, чтобы создавать правильные модели (правильные означают, что они удовлетворяют потребности заинтересованных сторон). Если абстракция и структуры описывают то, что создает архитектор, то принятие решения относится к тому, как они создаются.
Примерно в 2010 году, отчасти из-за стремления фокусироваться на ценностях бизнеса, к что и как добавляется для чего. Цель архитектуры улучшить контроль над рисками и стоимостью, поэтому архитектор отвечает за это не только на стадии проектирования, но в процессе реализации своего решения.
Но есть условие, без которого архитектор не может выполнять свои обязанности правильно это понимание контекста, т.е. знание заинтересованных сторон, их потребностей и окружения, в котором нужно реализовать решение.
Таким образом, обязанности архитектора заключаются в том, чтобы:
понимать контекст;
принимать решения;
создавать модели;
валидировать дизайн;
реализовывать и поставлять решения.
При этом одни пункты из этого списка влияют на выполнение других. Например:
моделирование и принятие решений без понимания контекста приводит к построению неадекватных моделей;
моделирование фактически подразумевает принятие решений (о декомпозиции, взаимосвязях);
без моделирования и решений нечего валидировать;
реализация и поставка не валидированных решений приводит к проблемам.
Т.е. самого по себе выполнения описанных обязанностей недостаточно. Они должны выполняться согласованно между собой.
В зависимости от ситуации, каждому пункту нужно уделять внимание. Пропуск одного из них приводит к антипаттернам роли архитектора, которые все мы периодически наблюдаем по статьям и обсуждениям в сообществе.
Один из ярких примеров The Waterfall Wasteland, когда архитектурная команда занимается дизайном в отрыве от проектной и не вовлекается в ежедневные активности, в результате чего растет время между проектированием и доставкой в продакшен. Совместная работа с проектной командой дает важную обратную связь, без которой легко оказаться в Башне из слоновой кости (The Ivory Tower Architect).
С другой стороны, есть пример The Agile Outback, когда в страхе перед Ivory Tower проектирование считается излишней практикой или даже контрпродуктивной. Вместо этого команда получает фидбэк от реализованных ошибок. Такой подход может быть выгодным в начале, но вскоре приводит к серьезным затруднениям.
Напомню, что мне и моей команде нужно построить систему взаимодействующих между собой сервисов, которые должны бесперебойно работать как единое целое.
Раз архитектура это принятие решений о важных вещах, то в первую очередь нужно выстроить прочный скелет, на который можно уверенно наращивать все остальное. В нашем случае это согласованность и доступность JSON-ов, о которых я говорил в начале. Ко всему прочему, в распределенных системах невозможно избежать ошибок, поэтому мы проектируем с учетом того, что ошибки будут всегда. И мы должны свести их влияние к минимуму, обеспечить доставку сообщений, целостность локального состояния и достоверность глобального.
Например, однажды мы решили не использовать для обработки отложенных задач по событию внешний брокер. На тот момент существовало ограничение на использование внешних зависимостей, и нужно было по возможности переиспользовать уже имеющиеся зависимости. Мы использовали возможности баз данных. В скором времени разные типы событий и их количество стали расти пропорционально новым фичам. Текущее решение не позволяло масштабироваться должным образом, обработка отложенных задач деградировала по времени исполнения. И в конечном счете это привело к дополнительным затратам на реализацию конвейеров обработки уже далеко после запуска.
Следующий момент разграничение контекстов и маппинг опыта в новые сервисы, ведь мы говорим про работу в домене, который 10 лет развивался и рос. Нельзя с нуля написать новый сервис, поставить его рядом с работающей системой и заменить одно на другое. Только качественное моделирование контекста и его коммуникаций дает ответ, как корректно интегрировать новый сервис в отлаженную систему.
Я большой фанат подходов Domain Driven Design и того, как они развиваются последние несколько лет (DDD Europe, etc). В частности bounded contexts, поскольку именно они помогают определить транзакционные границы сервиса и то, как лучше настроить оркестрацию взаимодействий. Чтобы избежать единой точки отказа, оркестраторы у нас являются частью сервиса и контекста соответственно. Т.е. исполнением саги занимается исключительно ответственный за это сервис внутри контекста, а не отдельный инфраструктурный сервис, который исполняет саги по запросу.
a) исполнение саги локальным оркестратором; b) использование отдельного сервиса оркестратора для исполнения саги; с) вариант хореографии событий;И если оркестрация находится внутри очерченного контекста, то для распространения изменений между более широкими контекстами используется уже хореография. Т.е. тут речь про обмен доменными событиями через шину данных (events-bus).
Еще один важный пункт валидация и поставка решений. Для его выполнения архитектору нужна команда. Никто не в силах в одиночку адекватно и за разумное время перемаппить контексты, которые формировались целое десятилетие. На самом деле никто такого поведения и не ждет. Но именно архитектор должен задуматься и сформировать рабочие группы с нужными компетенциями и настроить их совместную работу.
У нас есть большая система, которая занимается хранением и процессингом комплексных состояний. При этом происходят нетривиальные взаимодействия со множеством других внутренних систем: изменение состояния по запросу, реакция на ответ, координация нескольких запросов и т.п. У нас также есть технологическая база и практики, как все растащить на контексты и наладить взаимную коммуникацию.
Исходя из этого мы формируем команды, которые должны:
погрузиться в контекст;
иметь экспертизу в легаси-стеке;
иметь возможность адаптироваться к новому стеку;
принять необходимые технологии и практики;
получить экспертизу в домене;
принимать решения самостоятельно.
Следующая важная задача найти баланс сложности для команды. В нашем случае сложность лежит в плоскости домена и в плоскости решения. Чтобы инженеры не испытывали когнитивных перегрузок, этот момент прорабатываем изначально и возвращаемся в процессе для тонкой настройки.
Поэтому используем эмпирический подход и формируем команды в среднем из трех инженеров, один из которых техлид. Он выступает дизайнером выделенного контекста и совместно с еще двумя инженерами прорабатывает решение. В команде может присутствовать аналитик, доменный эксперт от бизнеса, продакт. Если команда смогла спроектировать решение и имплементировать его самостоятельно, значит, баланс сложности решения и домена соблюден.
Каждый раз я рассказываю своей команде историю жизненного цикла заказа. Заказ для нас это не монолитная сущность с вариативным набором параметров, а прежде всего последовательность событий, распределенных во времени.
Событийная архитектура определяется наличием описанных событий фактов о состоянии системы, дальнейший их процессинг и построение релевантных проекций-отражений. Она выступает публичной схемой взаимодействия между сервисами.
Каждое событие изменяет состояние одного или более независимых сервисов. Нужно ли транслировать изменение вовне или оно затрагивает исключительно локальное состояние? Можно ли принять решение об изменении, используя локальное состояние, или требуется координация нескольких сервисов? Отвечая на вопросы, мы приходим к пониманию того, как корректно организовать коммуникацию и в какой момент времени фиксировать изменения.
При моделировании наших систем мы перестаем беспокоиться о тяжелом монолитном стейте. Теперь нам нужно распространять изменения, коммуницируя между сервисами по сети. Сместить фокус со структур и их состояний на дизайн взаимодействий и коммуникацию.
Всю работу над проектом, каким бы сложным и громоздким он не казался, должен пронизывать единый нарратив. Каждый техлид контекста-сервиса, каждый инженер в группе должен считывать и понимать смысл, который стоит за всей работой. Как в плоскости решения, так и в плоскости домена. Задача архитектора сформировать целостный и воспроизводимый нарратив для своей команды.
Выполняя свою задачу, архитектор в проекте играет режиссерскую роль. Как командообразующий игрок, он настраивает части, создавая целое. Иначе композиция не получится, а значит, впереди будет непредсказуемость, риски и потери.
Привет!
Меня зовут Михаил, я заместитель директора по ИТ в компании Спортмастер. Я хочу поделиться историей о том, как мы справились с трудностями, возникшими во время пандемии.
В первые дни новых реалий привычный формат офлайн-торговли Спортмастера замер, и нагрузка на наш онлайн-канал, в первую очередь в части доставки на адрес клиенту, возросла в 10 раз. За несколько недель мы трансформировали гигантский по объему офлайн-бизнес в онлайн, адаптировали сервис под потребности наших клиентов.
В общем, то, что по сути было нашей второстепенной операцией, стало основным бизнесом. Важность каждого интернет-заказа возросла экстремально. Нужно было сохранить каждый рубль, который клиент приносил в компанию.
Чтобы оперативно реагировать на запросы клиентов, мы открыли дополнительный контактный центр в главном офисе компании, и теперь можем принимать около 285 тысяч звонков в неделю. В то же время мы перевели 270 магазинов в новый формат бесконтактной и безопасной работы, что позволило клиентам получать заказы, а сотрудникам сохранить рабочие места.
В процессе трансформации у нас возникли две основные проблемы. Во-первых, ощутимо возросла нагрузка на наши онлайн-ресурсы (как мы боролись с этим, расскажет Сергей). Во-вторых, поток редких (до COVID) операций многократно возрос, что в свою очередь потребовало большого объема быстрой автоматизации. Чтобы решить эту проблему, нам пришлось оперативно перебросить ресурсы с направлений, которые были раньше основными. Как мы справились с этим расскажет Елена.
Колесников Сергей, отвечает за эксплуатацию интернет-магазина и микросервисов
С того момента, как наши розничные магазины начали закрываться для посетителей, мы начали фиксировать рост таких метрик, как количество пользователей, количество заказов, оформляемых в нашем приложении, количество реквестов к приложениям.
Количество заказов с 18 по 31 мартаКоличество запросов к микросервисам онлайн-оплатыКоличество оформленных на сайте заказовНа первом графике мы видим, что прирост составил примерно 14 раз, на втором 4 раза. Наиболее показательной при этом мы считаем метрику времени ответа наших приложений.
На этом графике мы видим ответ фронтов и приложений, и для себя мы определили, что как такового роста мы не заметили.
В первую очередь это связано с тем, что мы начали подготовительные работы в конце 2019 года. Сейчас наши сервисы зарезервированы, обеспечена отказоустойчивость на уровне физических серверов, систем виртуализации, докеров, сервисов в них. При этом мощности наших серверных ресурсов позволяют переживать многократную нагрузку.
Основным инструментом, который помог нам во всей этой истории, стала наша система мониторинга. Правда, еще совсем недавно у нас не было единой системы, которая позволяла бы собирать метрики на всех слоях, от уровня физического оборудования и аппаратного обеспечения до уровня бизнес-метрик.
Формально мониторинг-то в компании был, но как правило он был рассредоточен и находился в зоне ответственности конкретных подразделений. Фактически, когда происходил какой-нибудь инцидент, у нас почти никогда не было единого понимания, что же именно произошло, не было информирования, и зачастую это приводило к бегу по кругу в поисках и локализации проблемы для последующего устранения.
В какой-то момент мы подумали и решили, что хватит это терпеть нам нужна единая система, чтобы видеть всю картину полностью. Основные технологии, которые входят в наш стек, это Zabbix как центр алертинга и хранения метрик, Prometheus для сбора и хранения метрик приложений, Stack ELK для логирования и хранения данных всей системы мониторинга, а также Grafana для визуализации, Swagger, Docker и другие полезные и знакомые вам штуки.
При этом мы используем не только доступные на рынке технологии, но и разрабатываем кое-что самостоятельно. Например, мы делаем сервисы для интеграции систем друг с другом, то есть некое API для сбора метрик. Плюс работаем над собственными системами мониторинга на уровне бизнес-метрик мы используем UI-тесты. А также бот в Telegram для оповещения команд.
А ещё мы стараемся делать систему мониторинга доступной для команд, чтобы они могли самостоятельно хранить свои метрики и работать с ними, в том числе настраивать алертинг в каких-то узких метриках, имеющих значение не самое широкое применение.
В рамках всей системы мы стремимся к проактивности и максимально быстрой локализации инцидентов. К тому же, количество наших микросервисов и систем значительно выросло за последнее время, соответственно, растет и число интеграций. И в рамках оптимизации процесса диагностики инцидентов на уровне интеграции мы разрабатываем систему, которая позволяет проводить кросс-системные проверки и выводить результат, что позволяет находить основные проблемы, связанные с импортами и взаимодействием систем друг с другом.
Само собой, нам еще есть куда расти и развиваться в плане эксплуатации систем, и мы активно над этим работаем. Подробнее о нашей системе мониторинга можно почитать здесь.
Орлов Сергей, руководит центром компетенции веб- и мобильной разработки
С начала закрытия физических магазинов нам пришлось столкнуться с различными испытаниями с точки зрения разработки. В первую очередь, скачок нагрузки как таковой. Понятно, что если не предприняты соответствующие меры, то при подаче на систему высокой нагрузки она может с грустным хлопком превратиться в тыкву, либо полностью деградировать в производительности, либо вообще потерять свою работоспособность.
Второй аспект, чуть менее очевидный, состоит в том, что систему под высокой нагрузкой нужно было очень быстро менять, адаптируясь под изменения бизнес-процессов. Порой по нескольку раз в день. Во многих компаниях есть правило, что при больших маркетинговых активностях не стоит вносить в систему никаких изменений. Вообще никаких, пускай работает, раз работает.
А у нас по сути была бесконечная черная пятница, в которую при этом нужно было менять систему. И любая ошибка, проблема, сбой в системе очень дорого обходились бы бизнесу.
Забегая вперед, скажу, что нам удалось справиться с этими испытаниями, все системы выдержали нагрузку, легко отмасштабировались и каких-то глобальных технических сбоев у нас не было.
Существует четыре кита, на которых держится способность системы выдерживать высокую скачкообразную нагрузку. Первый из них это мониторинг, о котором вы читали чуть выше. Без выстроенной системы мониторинга практически нереально найти узкие места системы. Хорошая система мониторинга это как домашняя одежда, она должна быть удобной и адаптированной под вас.
Второй аспект это тестирование. Мы очень серьезно относимся к этому моменту: пишем и классические юниты, интеграционные, нагрузочные тесты и многие другие для каждой системы. Ещё мы пишем стратегию тестирования, и при этом стараемся довести уровень тестирования до того, чтобы ручные проверки нам больше не были нужны.
Третий кит это CI/CD Pipeline. Процессы сборки, тестирования, развертывания приложения должны быть максимально автоматизированы, здесь не должно быть ручных вмешательств. Тема CI/CD Pipeline достаточно глубока, и я затрону ее только вскользь. Стоит упомянуть только, что у нас есть чеклист CI/CD Pipeline, по которому с помощью центров компетенции проходит каждая продуктовая команда.
А вот и чеклистТаким образом достигается очень много целей. Это версионирование API, и feature toggle, чтобы избежать паровоза релизов, и достижение покрытия разных тестов такого уровня, чтобы тестирование было полностью автоматизировано, деплои были бесшовными и прочее.
Четвертый кит это архитектурные принципы и технические решения. Про архитектуру можно говорить много и долго, но я хочу подчеркнуть пару принципов, на которых я хотел бы заострить внимание.
Во-первых, надо выбирать специализированные инструменты под конкретные задачи. Да, звучит очевидно, и понятно, что гвозди забивать стоит молотком, а наручные часы разбирать специальными отвертками. Но в наш век многие инструменты стремятся к универсализации, чтобы охватить максимальный сегмент пользователей: базы данных, кеши, фреймворки и остальное. Вот, например, если взять базу данных MongoDB, она работает с мультидокументарными транзакциями, а база данных Oracle работает с json-ми. И казалось бы, что все можно использовать для всего. Но если мы ратуем за производительность, то нам нужно четко понимать сильные и слабые стороны каждого инструмента и использовать нужные нам для нашего класса задач.
Во-вторых, при проектировании систем каждое повышение сложности должно быть обоснованным. Мы должны постоянно держать это в голове, принцип low coupling всем известен. Я считаю, что его нужно применять и на уровне конкретного сервиса, и на уровне всей системы, и на уровне архитектурного ландшафта. Также важна способность к горизонтальному масштабированию каждого компонента системы на пути нагрузки. Если обладать этой способностью, масштабирование не составит никакого труда.
Если говорить про технические решения, мы попросили продуктовые команды подготовить свежий набор рекомендаций, идей и решений, которые они реализовали в процессе подготовки к очередной волне нагрузки.
Необходимо осознанно подходить к выбору локальных и распределенных кешей. Иногда имеет смысл использовать и те, и другие в рамках одной системы, Например, у нас есть системы, в которых часть данных по сути является витринным кешем, то есть источник обновлений находится за самой системой, и системы эти данные не меняют. Для такого подхода мы используем локальный Caffeine Cache.
А есть данные, которые система активно изменяет в процессе работы, и тут мы уже применяем распределенный кеш с Hazelcast. Такой подход позволяет нам использовать преимущества распределенного кеша там, где они действительно нужны, и минимизировать сервисные расходы по циркуляции данных кластера Hazelcast там, где мы можем без этого обойтись. Про кеши мы много писали здесь и здесь.
Кроме того, смена сериализатора на Kryo в Hazelcast дала нам неплохой прирост. А переход от ReplicatedMap к IMap + Near Cache в Hazelcast позволил нам минимизировать движение данных по кластеру.
Небольшой совет: при массовой инвалидации кеша иногда применима тактика с прогревом второго кеша с последующим переключением на него. Казалось бы, при таком подходе мы должны получить двойное потребление памяти, но на практике, в тех системах, где подобное практиковалось, потребление памяти уменьшалось.
Мы используем реактивный стек в уже достаточно большом количестве систем. В нашем случае это Webflux или Kotlin с корутинами. Особенно хорошо реактивный стек заходит там, где мы ожидаем медленные input-output операции. Например, вызовы медленных сервисов, работа с файловой системой либо системами хранения.
Наиболее важный принцип избегать блокирующих вызовов. Под капотом реактивных фреймворков крутится небольшое количество живых сервисных потоков. Если мы неосторожно позволим себе сделать прямой блокирующий вызов, как, например, вызов JDBC-драйвера, то система просто остановится.
Старайтесь обращать ошибки в собственные runtime exception. Реальный поток выполнения программы отходит к реактивным фреймворкам, выполнение кода становится нелинейным. Как следствие, очень сложно диагностировать проблемы по стек-трейсам. И решением здесь будет создание понятных объективных runtime exception-ов на каждую ошибку.
При использовании Elasticsearch не выбирать неиспользуемые данные. Это, в принципе, тоже очень простой совет, но чаще всего именно про это забывают. Если надо за раз выбрать больше 10 тысяч записей, нужно использовать Scroll. Если проводить аналогию, это немного похоже на курсор в реляционной базе данных.
Не используйте postfilter без необходимости. При больших данных в основной выборке эта операция очень сильно грузит базу данных.
Используйте bulk-операции там, где это применимо.
При проектировании API закладывайте требования к минимизации передаваемых данных. Особенно это актуально на связке с фронтом: именно на этом стыке мы выходим за каналы наших ЦОДов и уже работаем на канале, связывающего нас с клиентом. Если на нем есть малейшие проблемы, слишком высокий трафик вызывает негативный user experience.
И, наконец, не вываливайте всю кипу данных, четко подходите к контракту между потребителями и поставщиками.
Ерошкина Елена, заместитель директора по ИТ
В момент, когда случился карантин, и возникла необходимость резко наращивать темпы развития онлайн и внедрять омниканальные сервисы, мы уже находились в процессе организационной трансформации.
Часть нашей структуры была переведена на работу по принципам и практикам продуктового подхода. Сформировались команды, которые теперь отвечают за функционирование и развитие каждого продукта. Сотрудники в таких командах задействованы на 100% и строят свою работу по скрам или канбан, в зависимости от того, что для них предпочтительнее, настраивают конвейер развертывания, внедряют технические практики, практики обеспечения качества и многое другое.
По счастливой случайности основная часть таких продуктовых команд у нас как раз находилась в области онлайн и омниканальных сервисов. Это позволило нам в кратчайшие сроки (серьезно, буквально за два дня) перейти в режим удалённой работы без потери эффективности. Настроенный процесс позволил быстро адаптироваться к новым условиям работы и выдержать достаточно высокий темп поставки новой функциональности.
Кроме того, у нас возникла необходимость усилить те команды, которые находятся на фронтире онлайн-бизнеса. В тот момент стало понятно, что мы можем это сделать только за счет внутренних ресурсов. И порядка 50 человек за две недели сменили область, где они работали до этого, и встроились в работу над новым для них продуктом.
Для этого не потребовалось каких-то специальных управленческих усилий, потому как наряду с организацией собственного процесса, с техническим совершенствованием продукта, с практикой обеспечения качества, мы учим наши команды самоорганизации управлять собственным производственным процессом без привлечения административного ресурса.
Управленческий же ресурс мы смогли сфокусировать именно там, где это было необходимо в тот момент, на координации вместе с бизнесом: Что же именно сейчас важно для нашего клиента, какая функциональность должна быть реализована в первую очередь, что необходимо сделать, чтобы увеличить нашу пропускную способность по доставке и обработке заказов. Все это и четкая ролевая модель позволили в этот период нагружать наши производственные потоки создания ценности тем, что действительно важно и нужно.
Ясное дело, что при удалённой работе и высоком темпе изменений, когда от участия каждого зависят бизнес-показатели, нельзя полагаться только на внутренние ощущения из серии А всё ли у нас идёт хорошо? Да вроде неплохо. Необходимы объективные метрики производственного процесса. Такие у нас есть, они доступны каждому, кто интересуется метриками продуктовых команд. Прежде всего самой команде, бизнесу, смежникам и руководству.
Раз в две недели с каждой командой проводится статус, где в течение 10 минут анализируются метрики, выявляются узкие места производственного процесса и вырабатывается совместное решение: что можно сделать для того, чтобы эти узкие места устранить. Здесь же можно сразу попросить помощи у руководства в случае, если какая-то выявленная проблема находится вне зоны влияния команд, или экспертизы коллег, которые, возможно, уже сталкивались с похожей проблемой.
Тем не менее, мы понимаем, что для кратного ускорения (а именно такую цель мы себе ставим) нам еще многому необходимо научиться и внедрить в ежедневную работу. Прямо сейчас мы продолжаем масштабирование продуктового подхода на другие команды и на новые продукты. Для этого нам пришлось освоить новый для нас формат онлайн-школы методологов.
Методологи, люди которые помогают командам выстраивать процесс, налаживать коммуникации, повышать эффективность работы, по сути являются агентами изменения. Прямо сейчас выпускники нашего первого потока работают с командами и помогают им стать успешными.
Я думаю, что сложившаяся ситуация открывает для нас такие возможности и перспективы, которые, возможно, мы и сами пока ещё до конца не осознаём. Но тот опыт и та практика, которую мы получаем прямо сейчас, подтверждает, что мы выбрали правильный путь развития, не упустим в будущем эти новые возможности и сможем так же эффективно отвечать на те вызовы, которые будут стоять перед Спортмастером.
За это непростое время мы сформулировали главные принципы, на которых держится разработка программного обеспечения, которые, думаю, будут актуальны для каждой компании, которая этим занимается.
Люди. Это то, на чем всё и держится. Сотрудники должны получать удовольствие от работы, понимать цели компании и цели продуктов, которыми они занимаются. И, конечно же, могли профессионально развиваться.
Технология. Необходимо, чтобы компания зрело подходила к работе со своим технологическим стеком и наращивала компетенции там, где это действительно необходимо. Звучит очень просто и очевидно. И очень часто игнорируется.
Процессы. Важно правильно выстроить работу продуктовых команд и центров компетенций, наладить взаимодействие с бизнесом, чтобы работать с ним как с партнером.
В общем, примерно так и выжили. Основной тезис современности подтвердился ещё раз, звонко щелкнув по лбу
Даже если ты огромный офлайн-бизнес со множеством магазинов и кучей городов присутствия, развивай свой онлайн. Это не просто дополнительный канал сбыта или красивое приложение, через которое тоже можно что-то купить (а еще потому что у конкурентов тоже красивое). Это не запаска на всякий случай, которая поможет переждать бурю.
Это сущая необходимость. К которой должны быть готовы не только ваши технические мощности и инфраструктура, но и люди и процессы. Ведь быстро докупить память, место, развернуть новые инстансы и прочее можно за пару часов. А вот людей и процессы надо готовить к такому заранее.
Сегодня я хочу рассказать вам о своем опыте использования нейронной сети для поиска похожих товаров для рекомендательной системы интернет-магазина. Говорить буду в основном о технических вещах. Написать эту статью на Хабре решил потому, что когда только начинал делать этот проект, то на Хабре нашел одно подходящее решение, но как оказалось, оно уже было устаревшим и пришлось его модифицировать. А поэтому решил обновить материал для тех, у кого будет потребность в аналогичном решении.
Отдельно хочу сказать, что это мой первый опыт создания более-менее серьезного проекта в сфере Data Science, поэтому если кто-то из более опытных коллег увидит, что еще можно улучшить, то буду только рад за советы.
Начну с небольшой предистории, почему была выбрана та логика интернет-магазина, которая выбрана - а именно рекомендация на основе похожих товаров (а не методы коллаборативной фильтрации, например). Дело в том, что данная рекомендательная система разрабатывалась для интернет-магазина, который продает часы и поэтому до 90% пользователей, которые приходят на сайт, они больше не возвращаются. А в целом задача была такая - увеличить количество просмотров страниц со стороны пользователей, которые приходят на страницы конкретных товаров по рекламе. Такие пользователи просматривали одну страницу и уходили с сайта, если товар им не подходил.
Надо сказать, что в данном проекте у меня не было возможности делать интеграцию с бэкэндом интернет-магазина - классическая история для малых и средних интернет-магазинов. Необходимо было рассчитывать только на систему, которую я сделаю в стороне от сайта. Поэтому в качестве визуального решения на самом сайте я решил сделать всплывающий js-виджет. Одной строчкой в html-код добавляется js, понимает заголовок страницы, на который пришел пользователь, и передает его в бэкэнд сервиса. Если бэкэнд нашел в своей базе заранее загруженных товаров товар, то он ищет опять же в заранее подготовленной базе товаров, рекомендации и возвращает их в js, а js их потом отображает в виджете. Также, для снижения влияния на скорость загрузки, js создает iframe, в котором производит все работы с отображением виджета. Помимо прочего, это еще и позволяет убрать проблему с пересечением css-классов виджета и сайта.
Скорее всего, для это была самая не интересная часть для Data Science. Но считаю ее необходимой частью данного рассказа, чтобы более четко понимать как все работает. Опять же, возможно, кому-то из новичков это тоже будет полезно.
А теперь перейдем непосредственно к поиску похожих товаров.
Для данного магазина я сделал два варианта поиска схожих товаров (опять же, классика A/B-тестирования) - рекомендации просто по схожим характеристикам; рекомендации, которые включали в себя первым слоем схожесть изображения, а вторым - схожесть характеристик.
С поиском схожих просто по характеристикам дело ясное. Перейдем к поиску схожих по изображениям.
Для начала подгружаем необходимые библиотеки:
!pip install theano%matplotlib inlinefrom keras.models import Sequentialfrom keras.layers.core import Flatten, Dense, Dropoutfrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2Dfrom keras.optimizers import SGDimport cv2, numpy as npimport osimport h5pyfrom matplotlib import pyplot as pltfrom keras.applications import vgg16from keras.applications import Xceptionfrom keras.preprocessing.image import load_img,img_to_arrayfrom keras.models import Modelfrom keras.applications.imagenet_utils import preprocess_inputfrom PIL import Imageimport osimport matplotlib.pyplot as pltimport numpy as npfrom sklearn.metrics.pairwise import cosine_similarityimport pandas as pdimport theanotheano.config.openmp = True
Дальше мне необходимо отсортировать изображения (так как они у меня названы исходя из индексов товаров в датафрейме, то я их отсортирую по алфавиту):
import redef sorted_alphanumeric(data): convert = lambda text: int(text) if text.isdigit() else text.lower() alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] return sorted(data, key=alphanum_key)dirlist = sorted_alphanumeric(os.listdir('images'))r1 = []r2 = []for i,x in enumerate(dirlist): if x.endswith(".jpg"): r1.append((int(x[:-4]),i)) r2.append((i,int(x[:-4])))extid_to_intid_dict = dict(r1)intid_to_extid_dict = dict(r2)
Задаем некоторые параметры:
imgs_path = "images/"imgs_model_width, imgs_model_height = 224, 224nb_closest_images = 3 # количество ближайших изображений (для тестирования вывода)
Загружаем саму модель (уже предобученную):
vgg_model = vgg16.VGG16(weights='imagenet')
Удаляем последний слой (следний слой даюет на выходе вероятности каждого из 1000 классов ImageNet - нам это не нужно в данном случае. Нам нужен просто 4096-мерный вектор для каждого из изображений, по которым мы потом будем искать с помощью простой косинусной метрикой).
Как найти имя слоя это отдельный анекдот, поэтому я смотрел в исходники модели.
Итак:
feat_extractor = Model(inputs=vgg_model.input, outputs=vgg_model.get_layer("fc2").output)
Если кому интересно, можно вывести на экран список слоев CNN и посмотреть. Но в целом это никак не относится к коду, который ищет схожие изображения:
feat_extractor.summary()
Далее я иду в каталог заранее подготовленных изображений товаров (то есть, я беру xml каталога интернет-магазина, прохожусь по урлам, которые нашел для товаров, и скачиваю их в папку; ниже покажу код, который делает эту работу):
files = [imgs_path + x for x in os.listdir(imgs_path) if "jpg" in x]print("number of images:",len(files))
Дальше мне необходимо отсортировать изображения по названиям для более аккуратной работы с ними в последующем:
import redef atof(text): try: retval = float(text) except ValueError: retval = text return retvaldef natural_keys(text): ''' alist.sort(key=natural_keys) sorts in human order http://nedbatchelder.com/blog/200712/human_sorting.html (See Toothy's implementation in the comments) float regex comes from https://stackoverflow.com/a/12643073/190597 ''' return [ atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text) ]files.sort(key=natural_keys)
Далее загружаю изображения в специальный PIL формат:
original = load_img(files[1], target_size=(imgs_model_width, imgs_model_height))plt.imshow(original)plt.show()print("image loaded successfully!")
Конвертирую PIL изображения в numpy array:
в PIL формат данных - width, height, channel
в Numpy - height, width, channel
numpy_image = img_to_array(original) # сырое изображения в вектор
Конвертирую изображения в batch format.
expand_dims добавит дополнительное измерение к данным на
определенной оси
Мы хотим, чтобы входная матрица в сеть имела следующий формат - batchsize, height, width, channels. Таким образом, мы добавляем дополнительное измерение к оси 0.
image_batch = np.expand_dims(numpy_image, axis=0) # превращаем в вектор-строку (2-dims)print('image batch size', image_batch.shape)
Подготавливаем изображение для VGG:
processed_image = preprocess_input(image_batch.copy()) # библиотечная подготовка изображения
Теперь нам необходимо получить как бы особенности данного вектора (вытащить признаки):
img_features = feat_extractor.predict(processed_image)
То есть это будет векторочек признаков для данного изображения:
print("features successfully extracted!")print("number of image features:",img_features.size)img_features
Теперь всё тайное стало явью, и осталось дело техники итерироваться по всем изображениям и для каждого из него произвести векторизацию.
importedImages = []for f in files: filename = f original = load_img(filename, target_size=(224, 224)) numpy_image = img_to_array(original) image_batch = np.expand_dims(numpy_image, axis=0) importedImages.append(image_batch) images = np.vstack(importedImages)processed_imgs = preprocess_input(images.copy())
Вытащим все особенности изображения:
imgs_features = feat_extractor.predict(processed_imgs)print("features successfully extracted!")imgs_features.shape
Ну и дальше посчитаем уже косинусную схожесть между изображениями:
cosSimilarities = cosine_similarity(imgs_features)
Сохраним результат в pandas dataframe:
columns_name = re.findall(r'[0-9]+', str(files))cos_similarities_df = pd.DataFrame(cosSimilarities, columns=files, index=files)cos_similarities_df.head()
Дальше получилась такая ситуация. В каталоге товаров данного магазина около 6000 SKU. После всех манипуляций выше получилась матрица размером 6000 * 6000. В каждом пересечении строк и столбцов находилось число формата float от 0 до 1 с 8 знаками после нуля, которое показывало схожесть. Когда я пробовал сохранить эту матрицу как есть в файл для дальнейшего применения в сервисе рекомендаций, то у меня получался файл весом около 430 мегабайт (хотя в оперативной памяти такая матрица занимала около 130 мегайбайт). Для меня это было не приемлемо. Хотя бы по той простой причине, что мне нужно было как-то выкладывать этот файл в GitHub, а дальше автоматома деплоить на сервер. GitHub не позволяет грузить файлы больше 100 мегайбат (или во всяком случае я не знаю как это делать). Да и в целом мне казалось, что это какой-то неприлично большой файл. Поэтому я начал думать :) И придумал вот что - мне по-большому счету не важно сколько знаков после запятой будет здесь - мне главное просто сравнивать цифры между собой. Поэтому я сделал следующее:
cos_similarities_df_2.round(2) # cos_similarities_df_2 - название датафрейма с косинусными метриками, которые сохранил выше
То есть, для начала я просто взял и отсек лишние цифры. Но формат колонки все равно оставался float. А в pandas float может быть минимально float16 - много.
Тогда я решил перевести эти значения в int:
cos_similarities_df_2.apply(lambda x: x * 100)cos_similarities_df_2.apply(lambda x: x.astype(np.uint8))
После этих манипуляций размер матрицы в оперативке уменьшился до 31 мегабайта. Это уже радовало.
Ну и дальше я сохранил этот файл в h5:
cos_similarities_df_2.to_hdf('storage/cos_similarities.h5', 'data')
В итоге получился файл весом 40 мегбайт. Это уже во-первых, удовлетворяло моим требованиям для хранения в GitHub, а во-вторых, в целом уже не так пугало своим размером :)
Ну и дальше если для проверки себя вы хотите посмотреть, что же там нашлось из похожего, то можно сделать так:
import re# function to retrieve the most similar products for a given onedef retrieve_most_similar_products(given_img): print("-----------------------------------------------------------------------") print("original product:") original = load_img(given_img, target_size=(imgs_model_width, imgs_model_height)) original_img = int(re.findall(r'[0-9]+', given_img)[0]) print((df_items_2.iloc[[original_img]]['name'].iat[0], df_items_2.iloc[[original_img]]['pricer_uah'].iat[0], df_items_2.iloc[[original_img]]['url'].iat[0])) plt.imshow(original) plt.show() print("-----------------------------------------------------------------------") print("most similar products:") closest_imgs = cos_similarities_df[given_img].sort_values(ascending=False)[1:nb_closest_images+1].index closest_imgs_scores = cos_similarities_df[given_img].sort_values(ascending=False)[1:nb_closest_images+1] for i in range(0,len(closest_imgs)): original = load_img(closest_imgs[i], target_size=(imgs_model_width, imgs_model_height)) item = int(re.findall(r'[0-9]+', closest_imgs[i])[0]) print(item) print((df_items_2.iloc[[item]]['name'].iat[0], df_items_2.iloc[[item]]['pricer_uah'].iat[0], df_items_2.iloc[[item]]['url'].iat[0])) plt.imshow(original) plt.show() print("similarity score : ",closest_imgs_scores[i])kbr = '' # напишите сюда название товараfind_rec = int(df_items_2.index[df_items_2['name'] == kbr].tolist()[0]) # df_items_2 название моего базового датафрейма, куда я скачал каталог товаровprint(find_rec)retrieve_most_similar_products(files[find_rec])
Вот и все :)
Ну и дальше можно повесть файл со скриптами на крон и автоматизировать работу по регулярному переполучению новых рекомендаций при обновлении каталога.
А теперь еще покажу как я спарсил изображения, если это кому-то будет полезно:
Для начала создам необходимые мне директории, куда все буду складывать:
import osif not os.path.exists('storage'): os.makedirs('storage')if not os.path.exists('images'): os.makedirs('images')
Не буду показывать код, который делает подготовительну работу по созданию данных из xml магазина - это просто и не интересно.
А код, который забирает изображения, вот:
# importing required modulesimport urllib.requestimage_counter = 0error_list = []# Функция для загрузки изображения в нужную мне директориюdef image_from_df(row): global image_counter item_id = image_counter filename = f'images/{item_id}.jpg' image_url = f'{row.image}' try: conn = urllib.request.urlopen(image_url) except urllib.error.HTTPError as e: # Return code error (e.g. 404, 501, ...) error_list.append(item_id) except urllib.error.URLError as e: # Not an HTTP-specific error (e.g. connection refused) print('URLError: {}'.format(e.reason)) else: # 200 urllib.request.urlretrieve(image_url, filename) image_counter += 1
Теперь я беру мой сформированный датасет товаров из xml, и начинаю идти по каждой строчке и забирать изображения:
df_items_2.apply(lambda row: image_from_df(row), axis=1)
Попадаются товары, у которых нет изображений. Тогда я их просто удаляю из датафрейма и не буду для них делать рекомендации. Обратите на это внимание в своих работах. Я попался на эту тему, так как сначала мне отдавали xml с товарами, которые все имели изображения. А когда после очередного запуска скрипта он упал, то потратил пару часов, чтобы понять, что не все товары имеют изображения и пришлось уже писать как положено для тех случаев, когда не уверен в том, что данные прийдут как положено.
for i in error_list: df_items_2.drop(df_items_2.index[i], inplace = True) df_items_2.reset_index(drop=True, inplace = True) print(f'Удалил строки без изображений: {error_list}')print(len(error_list))
Собственно говоря, вот и все. Надеюсь, это кому-то будет полезно! )
А если нет, то не судите строго - хотел как лучше )
P.S. Кстати, недавно открыл для себя следующую вариацию VGG - VGG19. Судя по тестам, эта версия дает еще более лучшие предсказания.
P.S.S Отдельно хочу выразить большую благодарсть людям, без которого я бы не смог все это реализовать: это мой брат, Senior JavaScript Developer (помогал мне написать js для сайта и обходить CORS-политики); это Костя Дедищев, Senior Python Developer и Senior Engineer (помогал мне заворачивать все в Docker и настраивать CI/CD pipeline); это Екатерина Артюгина из SkillFactory, которая три месяца возилась со мной и с другими ребятами с рамках SkillFactory Accelerator (это курс я взял специально для того, чтобы создать свой первый реальный Data Science проект под присмотром более опытных ребят); это и Валентина Бабушкина (ментор, который помогал понять суть A/B-тестов и включить их в проект); это Валентин Малых (еще один ментор, который помогал с разумением NLP проблем и в частности работы опечаточников при создании чат-ботов (еще второй проект, над которым я работал в рамках акселлератора и о котором я может быть расскажу чуть позже); это Эмиль Маггерамов (ментор, который в целом курировал мое продвижение в акселлераторе по созданию данного проекта); это одногруппники Valery Kuryshev и Георгий Брегман (регулярно раз в неделю созванивались и делились полученным за неделю опытом).
Сфера e-commerce становится все более популярной вне всяких сомнений, и логичным решением в текущий период экономической турбулентности становится открытие своего интернет-магазина. Наиболее простым вариантом старта являетсязапуск дропшиппинг-бизнеса. Работая по данной модели можно продавать физические товары по всему миру, не имея их в наличии. Вам не нужно иметь собственные склады, проводить инвентаризацию и самостоятельно отправлять товары.
Несмотря на привлекательность бизнес-модели, для старта необходимо иметь бюджет, который позволит качественно собрать и запустить интернет-магазин. Конкуренция в сфере растет, и вслед за ней увеличивается размер необходимого бюджета на полноценный запуск дропшиппинг-магазина. В данной статье мы рассмотрим все необходимые статьи расходов и ответим на вопрос: Сколько же стоит запустить свой магазин на Shopify в 2021 году?.
Что формирует итоговую стоимость магазина?
Итак, для того, чтобы создать дропшиппинг-магазин на Shopify, вам необходимо учитывать несколько статей расходов:
Доменное имя
Хостинг
Тема
Стоимость разработки сайта
Приложения и дополнительные сервисы
Маркетинг
Рекламный бюджет
Прием платежей
Запас на кассовый разрыв
Дополнительные / непредвиденные расходы
Далее мы более подробно расскажем о каждом из пунктов, формирующих итоговую стоимость запуска дропшиппинг-магазина. Ориентировочные расчеты будут произведены на примере запуска магазина на Shopify при интеграции с Aliexpress (без предварительного закупа товаров, как при работе с дропшиппинг-агентом или фулфилмент-центром).
Стоимость: $10 / год
У вас не может быть сайта без доменного
имени. Это постоянный адрес вашего магазина, поэтому выбирать его
нужно с умом. Стоимость доменного имени также будет варьироваться и
зависеть от двух основных факторов:
Компания-регистратор доменных имен (рекомендуемnamecheap.com);
Доменная зона (.com наиболее предпочтителен, но и чаще всего обойдется дороже).
Стоимость домена варьируется в районе $8-15 у таких регистраторов, какGoDaddyилиNamecheap.
Стоимость: $29 / месяц
Домен и хостинг это базовые услуги, без
которых невозможно создать ни один сайт. Если домен это
онлайн-адрес сайта, то хостинг это пространство, на котором он
живет. Чтобы создать сайт, нам необходимо воспользоваться
хостингом.
У вас есть два варианта: самостоятельное создание сайта и покупка хостинга отдельно или использование Saas-сервисов (конструкторов), которые предоставляют вам широкий функционал, включая хостинг. Существует ряд хостингов для интернет-магазинов. С наиболее популярными платформами для зарубежной электронной коммерции вы можете ознакомиться водной из наших статей.
В данной статье мы сфокусируемся на наиболее популярной на сегодняшний день платформе Shopify одном из лидеров рынка конструкторов интернет-магазинов. Стоимость хостинга наряду с другими функциями уже включена в тарифные планы Shopify. У вас есть три варианта на выбор:
Для начала рекомендуем остановиться на тарифе Basic за $29. Вы можете воспользоваться бесплатным14-дневным пробным периодом, чтобы протестировать все возможности Shopify.
Стоимость: $0-180
У платформы Shopify естьмагазинс большим количеством как
бесплатных, так и платных тем. В случае, если вы только начинаете
свой путь в электронной коммерции, для создания тестового магазина
рекомендуем использовать бесплатные темы:
Для того, чтобы разобраться в принципе работы платформы, бесплатной темы может быть более чем достаточно. Однако, для полноценного запуска магазина мы рекомендуем установить одну из платных тем. Они обладают более широким функционалом, а также добавляют индивидуальности интернет-магазинам.
В магазине тем Shopify шаблоны в среднем стоят $180, что
является значительным расходом в случае, если вы создаете свой
первый магазин. В качестве альтернативной площадки можно
рассмотреть каталог платных темthemeforest.net, где можно
приобрести качественные адаптивные темы за $50-100.
Стоимость:$0-300 и до бесконечности:)
Один из самых важных моментов непосредственно сборка магазина. Воспользовавшись бесплатным периодом платформы Shopify и установив тему, вы можете собрать сайт самостоятельно без навыков программирования. Посмотрев несколько обучающих туториалов в свободном доступе (желательно на английском языке) можно самостоятельно собрать вполне рабочий интернет-магазин в относительно короткие сроки.
Вопрос лишь в том, насколько сайт будет качественным и продающим. Многое зависит от вашего опыта и знаний. Если вы заинтересованы в том, чтобы ваш магазин выглядел уникально и к тому же в результате давал показывал высокую конверсию, то помощь специалистов лучший вариант. Однако, следует учитывать, что стоимость качественной разработки сайта может сильно варьироваться.
Если вы хотите сэкономить время, минимизировать риски возникновения серьезных ошибок в работе сайта, то команда Ecom Today поможет вам в создании и настройке магазина.
Стоимость: $50-80 / месяц
После сборки магазина и наполнения его
товарами рекомендуется подключить к магазину необходимые
приложения. Часть приложений помогает в упрощении процесса
оформления заказов, другие автоматизируют email-маркетинг,
способствуют повышению конверсии или помогут в увеличении среднего
чека функционал приложений практически бесконечен и ограничен лишь
фантазией разработчика и покупательной способностью владельца
магазина.
Магазин приложений Shopify это сокровищница функциональности, которой вы можете и должны пользоваться для оптимизации интернет-магазина. В магазине приложений Shopify представлено более 1500 приложений на любой вкус и цель.
Приложения Shopify бывают как платными, так и бесплатными. Многие приложения предоставляют пробный периоды от 7 до 30 дней. Не следует загружать магазин большим количеством приложений, так как это скажется на скорости загрузки сайта и ваших расходах. Мы рекомендуем установить следующие приложения (либо их аналоги):
Abandonment Protector отправка серии писем тем, кто бросил корзину;
Loox Reviews импорт отзывов с Aliexpress к товарам в вашем интернет-магазине;
Vitals увеличении конверсии и среднего чека.
Стоимость: $0-70
Вы действительно можете создать отличный
оптимизированный магазин с качественным дизайном и грамотно
оформленными товарами, но он не принесет вам прибыли, если на него
не будет направляться трафик.
Если вы планируете всерьез заняться продажей товаров зарубеж, вам нужно будет выделять большое количество времени на продвижение вашего магазина с помощью разных каналов, одним из основных среди которых является Facebook.
Как и во всем, мы рекомендуем изначально разобраться в настройке рекламы самостоятельно, чтобы иметь базовые знания и минимальный опыт работы с рекламными площадками. Не делегируйте эту задачу сторонним специалистам сразу (только если партнерам), так как вы не сможете грамотно оценивать результаты и контролировать эффективность работы человека, кому вы доверите данную задачу.
Также к возможным маркетинговым расходам необходимо отнести разработку креативов один из важнейших этапов запуска магазина. О создании видеокреативов для рекламы товаровмы рассказали в статье. Перед запуском своего первого товара мы крайне рекомендуем изучить актуальные доступные материалы по созданию креативов. Чем качественнее будет ваш видеокреатив, тем больше трафика в рамках установленного бюджета вы сможете привлечь на ваш сайт.
В среднем, стоимость создания видеокреативов для одного товара
варьируется от $40 до $70.
Стоимость: $1000 и больше
Самая основная составляющая вашего общего
бюджета на запуск магазина рекламный бюджет. Скорость развития
вашего проекта и вас как специалиста сильно зависит от суммы денег,
которую вы можете потратить на продвижение вашего интернет-магазина
и тест отдельных товаров.Очевидно, что конкуренция на международном
рынке гораздо выше, чем в СНГ, соответственно, запуск рекламы и
сбор первых данных об аудитории обходится дороже. Как будет
расходоваться ваш бюджет, зависит от многих факторов. Среди
основных:
ваши навыки настройки рекламы;
гео вашей целевой аудитории;
качество креативов;
конверсия сайта;
средний чек товаров на сайте.
В связи с пандемией коронавируса и не только, наблюдаетсястремительный рост сферы e-commerceпо всему миру, из чего следует увеличение количества рекламодателей на всех площадках, в частности, в Facebook. Теперь, чтобы показать рекламное объявление своей целевой аудитории и получить переход на сайт, приходится платить больше, поэтому $100 не достаточно для того, чтобы определить потенциал выбранного товара. Мы рекомендуем иметь минимум $200-250 на тест одного товара, чтобы иметь возможность получить достаточное количество данных и сделать вывод касательно товара продолжать работать с ним дальше или переходить к другому товару.
Никогда неизвестно, какой по порядку товар из запущенных
выстрелит и будет приносить стабильные продажи, поэтому необходимо
иметь бюджет на запуск нескольких товаров. Наша рекомендация
минимум $1000.
Стоимость: $0-149
Если вы проживаете в СНГ, подключить платежную систему к интернет-магазину для работы с зарубежным рынком самостоятельно крайне трудно. Один из наиболее доступных вариантов, насчет которого начинают задумывать новички это Paypal. Несмотря на свою популярность, данная платежная система не гарантирует стабильный прием платежей.
Наиболее оптимальным вариантом является платежная система Stripe, которая, к сожалению не работает с бизнесами из СНГ. Среди возможных вариантов подключения Stripe для приема платежей: аренда / покупка аккаунта или регистрация компании за рубежом. Более подробно рассказано в статьеСпособы подключения Stipe в СНГ в 2021.
В дальнейшем при работе со Stripe необходимо учитывать комиссию 2,9% + $0,30 за транзакцию.
Стоимость: $100-200
В данной статье мы рассматриваем интеграцию магазина с платформой Aliexpress. В таком случае у вас нет необходимости заранее пополнять баланс для оплаты товаров, как при сотрудничестве с дропшиппинг-агентом, или закупать товар заранее и отправлять его в фулфилмент-центр. Вы можете начать продавать без предварительного закупа товаров.
Вдохновившись первыми продажами в своем магазине, многие забывают о том, что новичкам чаще всего недоступен мгновенный вывод средств. Момент ожидания может длиться до 7 дней, поэтому, для оплаты новых заказов вам обязательно нужно иметь резервные $100-200, в зависимости от стоимости закупа товаров.
Стоимость: $100 $500
В любом бизнесе невозможно точно рассчитать потенциальные затраты. Вернее, можно, но фактор непредвиденности, сезонные колебания, блокировки аккаунтов и задержки в поставке все это может сформировать дополнительные статьи расходов.
Необходимо учитывать следующие аспекты:
Возвраты покупателям стоит допускать, даже если у вас абсолютно "белый" бизнес;
Комиссия Shopify 2% с каждой транзакции на тарифе за $29;
Комиссия Stripe 2,9% + $0,30 с каждой транзакции;
Дополнительные возможные комиссии при выводе средств;
Социальные аккаунты и бизнес-менеджеры Facebook;
Оплата дополнительных возможных услуг;
Платные обучающие материалы;
Прокси / VPN;
Налоги.
Теперь, когда мы детально разобрались с каждым пунктом, мы можем рассчитывать примерную итоговую стоимость магазина. Необходимо учитывать, что данные, приведенные выше в статье, являются усредненными и могут отличаться от фактических данных.
Итак, если рассматривать самый экономичный вариант, при котором вы самостоятельно разрабатываете дропшиппинг-магазин и настраиваете рекламу, но дополнительно обращаетесь за услугой подключения платежной системы, то общая стоимость запуска проекта составитот $1500.
В статье мы рассмотрели основные статьи расходов, которые формируют общий бюджет для запуска дропшиппинг-магазина на Shopify. Если вы только планируете запустить свой первый магазин, вы можете опираться на информацию, описанную выше, для наиболее корректного планирования будущих расходов.
Мы новенькие на Хабр, но у нас уже достаточно внушительный опыт в сфере eCommerce, которым мы с удовольствием готовы делиться. Наша команда действительно старается публиковать самые интересные и актуальные материалы , которые помогут вам быть в курсе текущих трендов и новостей в сфере eCommerce. Мы всегда рады новым читателям и с радостью продолжим делиться своими наблюдениями и наработками. Если статья была полезна, то мы будем благодарны, если вы поддержите наш канал комментарием.
У кого в руках технологии - тот владеем миром. Как минимум, может им управлять. Но нам нужно еще меньше - найти путь к покупателям и с каждым днем продавать все больше товаров. Тут есть два варианта: либо рынок развивается так, что технологии становятся его неотъемлемой частью, либо продавцы и производители сами стимулируют использование технологий для повышения продаж. При последнем сценарии, рынок подтянется сам.
Поскольку мы постоянно занимаемся аналитикой товаров на отечественных и зарубежных рынках, то встречаем массу вариантов того как технологии используются в торговле. И в последнее время все чаще мы слышим о технологии дополненной реальности, которую пытаются прикрутить то к витринам интернет-магазинов, то к бутылка игристого, продающегося на полках гипермаркета.
Мы нашли существующие исследования рынка AR, отыскали кейсы отечественных разработчиков и собрали примеры использования дополненной реальности производителями и продавцами, чтобы понять насколько широко технология шагает по стране и миру. А поскольку наша основная сфера интересов - маркетплейсы, мы попытались понять как AR может быть использован там и используется ли вообще. Рассказываем и показываем.
Дополненный рынок
Рынок AR стремительно растет. Это логично, поскольку смартфоны и гаджеты, которые поддерживают данную технологию или могли бы с ней работать сегодня есть практически у всех. AR, в какой-то степени проще дышится среди потребителей. Технология нетребовательна к оборудованию - пройтись по дополненной реальности, в той или иной степени, может каждый. Мы нашли данные зарубежных исследований под авторством Engine creative в которых прогнозируется, что уже в этом году количество мобильных пользователей AR вырастет до 811 миллионов человек. И если на время отвлечься от продаж и пристально посмотреть в сторону самой технологии, то можно узнать, что доход от AR c каждым годом растет и в 2021 году может достигнуть 3,1 млрд долларов, а к 2024 - 3,78 млрд долларов.
Данные исследований агенства Engine creativeДанные исследований агенства Engine creativeПоскольку нас интересуют именно продажи, мы захотели взглянуть в сторону потребительного поведения и отношения покупателей к технологии дополненной реальности. Итог - покупатели ждут, когда бренды и производители предоставят им новые форматы взаимодействия с продуктом. Вот такие цифры приводит в своем исследовании уже упомянутое выше агенство:
Данные исследования агенства Engine creative- 69% покупателей ждут, что бренды дадут им возможность взаимодействовать с товаром посредством AR и выпустят мобильные приложения;
- 76% уверяют, что делали бы больше покупок при условии, что смогли бы если бы заранее осматривать товары с помощью дополненной реальности;
- 42% покупателей считают, что использование дополненной реальности помогает принять решение о последующей покупке.
Эксперты также уверены, что использование AR может не просто повысить продажи, но и с большей вероятностью довести определенные группы товаров до конечного клиента. Об этом в своем исследовании заявили ученые Городского университета Гонконга и Сингапурского университета управления. Они пришли к выводу, что AR перспективнее всего применять там, где высока неопределенность, связанная с товарами. То есть в тех случаях, когда покупатель просто не может оценить продукт (размеры, детализацию, актуальность товара для его стиля или интерьера) находясь на расстоянии от витринной полки. Исходя из этого ученые прижил к выводу, что дополненную реальность лучше всего использовать в нескольких случаях:
- при продаже продвижении малоизвестных товаров и брендов;
- для увеличения продаж дорогостоящих товаров;
- для стимуляции перехода офлайн-клиентов в онлайн-каналы продаж (например, с рекламного баннера со ссылкой на приложение или сайт).
Согласитесь, что такие выводы звучат очень логично. Если покупатель маркетплейса заказывает упаковку стирального порошка или корм для домашних животных - он имеет хотя бы примерные представления о том как будет выглядеть физический продукт и его упаковка. Когда речь идет о необычной детской игрушке, новом гаджете или дизайнерском кресле - представить, например, их габариты и внешний вид крайне сложно. Да, все подробности о товарах можно прочитать в их описаниях и характеристиках. Но покупатели - занятые, а иногда и ленивые люди, которые редко взаимодействуют с текстом и принимают решения на основе изображений товаров.
Как в таком случае быть покупателям, которые не могут оценить товар просто по фотографиям в карточке маркетплейса. С каждым днем количество товаров на таких площадках растет, а отличать предложения честных продавцов от мошенников становится все сложнее. У покупателя есть два варианта - отказаться от заказа непонятно, неизвестного товара или заказать и вернуть, в случае, если он не оправдает их ожиданий. Как в таком случае быть продавцам? Они постоянно рискуют тем, что их товары будут путешествовать по стране от склада до склада, потому что покупатели продолжать оформлять возвраты. Либо получат сотни недовольных отзывов от тех, чьи ожидания не оправдались. Кажется, пора находить какие-то решения.
Точки отсчета
Точки отсчета
Как можно использовать дополненную реальность в реальности? Недавно
компания-разработчик PHYGITALISM опубликовала в сети большой
кейс-исследование в котором собрала всю актуальную информацию об AR
и рассказала о возможных механиках ее использования. Получилось
внушительный список из следующих пунктов:
Понятно, что такие механики очень логично ложаться на активности в event-сфере - презентации и выставки. Например, во время автомобильной выставки можно помочь зрителям взглянуть пот обшивку машины и рассмотреть ее устройство до мелочей. Но как эти же технологии и механики можно использовать в торговле. И отдельный вопрос - как они могут помочь в онлайн-торговле.
С офлайн-ритейлом все просто. Примеры использования AR уже существуют. Идеальный вариант для этой сферы торговли - применение дополненной реальности в навигации по реальным магазинам. В идеале, такую навигацию хотелось бы выстроить и на отечественных маркептплейсах.
Есть примеры использования дополненной реальности для конкретных брендов и товаров. Тут уже не важно, где именно они продаются - в офлайне или онлайне, поскольку особенности самого товара требуют знакомства с ним вне торговой зоны, например дома или в офисе. В первую очередь, такой подход идеально ложиться на мебель и крупную бытовую технику. Два примера ниже отлично демонстрируют как покупатель может познакомиться с товаром, даже если никогда не видел его лично. Здесь технология не просто помогает покупателю рассмотреть товар, но и решить важный вопрос - "поместится ли?".
Но что делать напрямую с онлайн-торговлей? Может ли AR помочь продавцам интернет-магазинов и маркетплейсов стать ближе к пользователям и подарить им новый опыт от взаимодействия с товарами? Примеры тоже есть. В 2019 году Lamoda запустила виртуальную примерочную для покупателей кроссовок, доступную владельцам устройство под iOS, в 2020 расшарила эту же возможность для пользователей Android. Примерить с помощью дополненной реальности можно не все, а лишь 100 оцинкованных моделей кроссовок. Но на самом деле, чтобы найти доступ к самой виртуальной примерочной нужно поломать, если не ноги, то голову. Поэтому сама история с запуском такой примерочной выглядит скорее как маркетинговый ход, нежели желание помочь покупателем с выбором товара.
Вместе с тем, одежда и обувь выглядит как еще одна категория товаров, которая очень сильно напрашивается на дружбу с дополненной реальностью. Тут есть свои плюсы и минусы. Очевидно, что принять решение о покупке или понять, что вещь визуально не подходит покупателю можно еще до момента заказа. С другой стороны, очень частой причиной возврата одежды и обуви является другой фактор - размер, удобство посадки или колодки. С этим покупателю не поможет ни AR, ни личная консультация продавца в онлайне. В этом случае узнать "поместится ли?" просто невозможно.
Есть дополнения?
Очевидно, что силами маркетплейсов оцифровать весь ассортимент товаров невозможно. С другой стороны, они могут стимулировать продавцов к использованию технологий. Также как они предлагают селлерам дополнять товарные карточки панорамными фотографиями и запускать живые стримы с презентациями товаров. Например, условный Wildberries может давать продавцам возможность добавления объемных моделей в карточку товара, а покупателям сообщать, что они могут просмотреть определенные позиции в дополненной реальности не выходя из приложения или не покидая сайт маркетплейса. Ozon в этом плане уже продвинулся гораздо дальше. Например, совместно с LG запускал тестирование дополненной реальности прямо в карточке товара.
Тестовая карточка товара маркетплейса OzonЕсть и другой вариант, когда сам производитель и продавец использует дополненную реальность как дополнительное преимущества товара и пытается за счет них увеличить продажи товара или стимулировать дополнительные продажи среди существующих клиентов. Тут мы нашли сразу два примера отечественных производителей. На удивление, оба занимаются товарами из одной и той же ниши - деревянные конструкторы для детей. Возможно, сама технология настолько проста и понятна даже покупателям, что добавлять ей дополнительную ценность приходится именно с помощью AR.
Но тут стоит отметить, фактически такое использование дополненной реальности подразумевает, что технология - функциональная особенность продукта. Получить к ней доступ, вроде как, можно уже после покупки товара. То есть здесь работает обратный принцип - AR может стимулировать продажи, потому что добавлена к товару, а не потому что помогаем познакомиться с ним до покупки. С другой стороны, в первом примере вся демонстрация товара сводится к добавлению в карточки фото собранной картинки, во втором - AR точно пригодилась бы для того, чтобы показать покупателю модель детской игрушки в сборке. В том числе для того, чтобы оценить ее размеры.
Карточка товара с дополненной реальностью бренда Mr. Puzz на маркетплейсе WildberriesЗаметьте, что первый производитель использует для погружения потребителя в AR свой аккаунт в Instagram - оживить собранные пазл он предлагает с помощью масок в социальной сети. Это, с одной стороны, удобно - пользователю не нужно скачивать и устанавливать дополнительные предложения. С другой стороны, именно в этом примере мы рассматриваем детские товары. Насколько верно и позволительно предлагать покупателям передавать детям для игры свой смартфон с открытым аккаунтом в Instagram?
Второй производитель выбрал другой путь и разработал для собственного бренда отдельное приложение, поддерживающее технологию дополненной реальности. Оно, правда, предназначено для коллекционирования деревянных моделей, сборки и раскрашивания виртуальных игрушек. Дополненная реальность в нем используется скорее для сканирования новых моделей коллекции. Но если взглянуть на приложение иначе и попробовать использовать его для просмотра моделей конструкторов в объеме как мы попробовали это сделать в ролике выше? Кажется, получается очень показательно.
Выпадает из реальности
Вроде как использование AR, правда, может повысить конверсию, привлекательность товара и лояльность аудитории. Но пока технологией (по сути, любой) интересуется лишь пара производителей и она не используется массово - донести ее до конечного потребителя сложно. И тут вопрос - кто первым рискнет взяться за технологию на полную. Маркетплейсы, которые решат бороться с конкурирующими площадками за счет новых возможностей или продавцы, которым рано или поздно придется искать новые пути демонстрации товаров, которые сегодня все больше становятся похожими друг на друга как две капли воды?
А может и не нужны продавцам новые технологии и достаточно постоянно нагружать рынок новыми предложениями, выдумывать, производить и продавать все новые и новые товары?
Большинство наших
Меня зовут Марина Калабина, яруководитель проектов вЛеруа
Мерлен. Пришла вкомпанию в2011 году. Первые пять лет открывала
магазины (когда япришла, ихбыло 13, сейчас 107), потом работала
вмагазине вкачестве руководителя торгового сектора ивот уже полтора
года занимаюсь тем, что спозиции
Поскольку ядавно работаю вкомпании, торечь моя наполнена специфическими терминами, которые яназываю леруализмы. Чтобы мыговорили свами наодном языке, привожу некоторые изних.
Возможно, вынезнаете, нокогда выоформляете заказ вЛеруа Мерлен, в98% случаев онприходит вмагазин исобирается изторгового зала.
Представьте себе огромные 8000 кв. ммагазина, 40000 артикулов
изадачу собрать заказ. Что может произойти сартикулами вашего
заказа, которые ищет сборщик? Товар может быть уже вкорзине
клиента, который ходит поторговому залу, или даже может быть продан
между тем моментом, когда выего заказали, итем, когда сборщик пошел
заним. Насайте товар есть, авдействительности онлибо
Для того чтобы бороться сразными проблемами, ивтом числе сэтой,
впрошлом году вкомпании было запущено подразделение Data
Accelerator. Его миссия привить
Суть продукта втом, что перед публикацией стока товара насайте мыпроверяем, можемли собрать этот артикул клиенту, гарантируемли ему это. Чаще всего это достигается чуть меньшим количеством стока, который мыпубликуем насайте.
Унас была классная команда: Data Scientist, Data Engineer, Data
Analysis, Product Owner и
Целями нашего продукта были:
Вобщем, при прочих равных сделать лучше.
Когда проект стартовал, мыпоехали вмагазины, клюдям, которые каждый день работают сэтим: мысами пошли собирать заказы. Оказалось, что наш продукт настолько интересен инужен магазинам, что нас попросили запуститься нечерез 3месяца, как было запланировано вначале, авдва раза быстрее, тоесть через 6 недель. Это, мягко говоря, было стрессом, нотем неменее
Мысобрали гипотезы отэкспертов ипошли искать, какиеже унас впринципе есть источники данных. Это был отдельный квест. Фактически бюро расследований показало, что унас имеются такие товары, укоторых обязательно есть витринный образец.
Например, смеситель утаких товаров всегда есть образец взале. Более того, мынеимеем права продать экспо, потому что онможет быть уже поврежден игарантия нанего нераспространяется. Мынаходили такие товары, укоторых непроставлен витринный образец, адоступный сток для продажи показан 1. Но, скорее всего, это тот самый экспо, который мынесможем продать. Аклиент может его заказать. Это одна изпроблем.
Следующая история обратная. Мыобнаружили, что иногда утоваров бывает слишком большое количество витринных образцов. Скорее всего, либо произошел сбой системы, либо вмешался человеческий фактор. Вместо того чтобы насайте показывать 2500 установочных коробок, мыможем показать только 43, потому что унас сбой всистеме. Имынаучили наши алгоритмы находить втом числе итакие косяки.
Поисследовав данные, мысобирали
Что касается примеров, когда мынаходили слишком большое
количество витринных образцов, практически в60% случаев мыбыли
правы, предполагая ошибку. Акогда мыискали недостаточное количество
экспо или ихотсутствие, тобыли правы в81%, что,
в
Поскольку нам надо было уложиться в6 недель, мызапускали proof
ofconcept вот стаким линейным алгоритмом, который находил
аномальные значения, делал поправку наэти значения перед тем, как
публиковать насайт. Иунас было два магазина, вдвух разных регионах,
чтобы мымогли сравнить эффект.
Кроме того, был сделан дашборд, где, содной стороны, мымониторили
технические параметры, асдругой показывали нашим заказчикам, посути
магазинам, как отрабатывают наши алгоритмы. Тоесть мысравнивали,
как они работали дозапуска икак стали работать после, показывали,
сколько денег позволяет заработать использование этих
алгоритмов.
Эффект отработы продукта быстро стал заметен, инас стали спрашивать, почему мыобрабатываем такое маленькое количество артикулов: Давайте возьмем весь сток магазина, изкаждого артикула вычтем одну штуку, и, может быть, это нам позволит решить проблему глобально. Кэтому моменту мыуже начали работать над моделью машинного обучения, нам казалось, что подобная ковровая бомбардировка может навредить, новозможность такого эксперимента упускать нехотелось. Имызапустили тест на4магазинах для того, чтобы проверить эту гипотезу.
Когда через месяц мыпосмотрели нарезультаты, товыяснили два
важных обстоятельства.
Итак, мысделали
Итоговые метрики полученной модели навалидационном наборе данных:
Немного про архитектуру как это унас реализуется впроде. Для
обучения модели используются реплики операционных ипродуктовых
систем компании, консолидированные ведином DataLake наплатформе
GreenPlum. Наоснове реплик рассчитываются фичи, хранящиеся
вMongoDB, что позволяет организовать горячий доступ кним.
Оркестрация расчета фичей иинтеграция GreenPlum иMongoDB
реализована сиспользованием
Модель машинного обучения представляет собой контейнеризованное
Унас было 6магазинов ирезультаты показали, что изплановых 15%
мысмогли сократить количество несобранных заказов на12%, при этом
унас выросли товарооборот
Наданный момент, обученная нами модель используется нетолько для редактирования стока перед публикацией насайте, ноидля улучшения алгоритмов оперативной инвентаризации. Какие артикулы нужно сегодня посчитать именно вэтом отделе, именно вэтом магазине такие, закоторыми придут клиенты, икоторые хорошо былобы проверить. Вобщем модель оказалась еще имультифункциональной ипереиспользуется вкомпании вдругих подразделениях.
p.s.Статья написана по выступлению на митапе Avito.Tech, посмотреть видео можно по ссылке.
В 2020 Covid-19 сделал интернет-продажи ещё популярнее и ускорил выход магазинов в онлайн. Мировой объём розничных онлайн-продаж составил 3,53 триллиона долларов США в 2019 году. И планируется, что к 2022 году эта цифра вырастет до 6,54 триллионов долларов США.
Многие владельцы бизнесов осознали, насколько важно присутствие онлайн. В апреле 2020 года число новых интернет-магазинов увеличилось в два раза по сравнению с предыдущим месяцем и в полтора раза по сравнению с апрелем 2019 года.
Коронавирус по-настоящему оживил отрасль электронной коммерции. Поэтому выход на рынки новых стран и поиск способов для удовлетворения потребностей местных покупателей стали как никогда важны. Но с чего же начать?
Источник: freepik.comКомпания Goldman Sach Group в докладе, опубликованном в конце июля 2020 года, заявила, что рост доли онлайн-покупок в объёме всей розничной торговли достигнет 19% в 2020 году по сравнению с ранее прогнозируемыми 16%. Это обусловлено высокими темпами роста e-commerce бизнеса в США, Западной Европе, Бразилии и большинстве стран Азиатско-Тихоокеанского региона, говорится в докладе. Ожидается, что онлайн-продажи займут около 22% рынка розничных продаж к 2023 году.
Пандемия COVID-19 увеличила долю онлайн-продаж на рынке розничной торговли по всему миру, причём наибольший рост произошёл в следующих категориях: домашние развлечения, инструменты повышения производительности труда и доставка продуктов.
Сегодня 85% мировой покупательской способности находится за пределами США. Китай крупнейший в мире рынок электронной коммерции, где ежегодный оборот от онлайн-покупок оценивается примерно в 672миллиарда долларов США. За Китаем следует США с оборотом в 340миллиардов долларов, и незначительно от них отстают Великобритания, Япония, Германия, Франция, Южная Корея, Канада, Россия и Бразилия.
Расширение в глобальном смысле означает увеличение числа рынков сбыта, и соответственно, увеличение числа клиентов. Но не всё так просто: для достижения успеха потребуется поработать с каждым из рынков в отдельности. Невозможно придумать единую стратегию развития для всех рынков одновременно.
Покупатели со всего мира хотят, чтобы процесс покупки был им понятен и знаком. Что же для этого нужно?
Правильный ответ локализация онлайн-магазина.
Локализация приоритетная задача для успешного выхода на мировой рынок. Особое внимание следует уделить переводу всего контента, форматам даты и времени, дизайну, отображению цен в регионе и способам проведения платежей. Подумайте о культурных ценностях, социальных нормах и особенностях регионов, в которых планируете продавать товары или услуги. Кроме того, важно изучить покупательские привычки новых клиентов и отслеживать изменения в законодательстве.
В первую очередь необходимо локализовать наиболее важные элементы сайта. Цель локализации сделать процесс покупки как можно более лёгким и интуитивно понятными для иностранных клиентов, а не сбивающим с толку.
Перевод сайта это лишь самый минимум, который вы должны сделать. Это критически важно, так как около 80% транзакций в Интернете происходят на родном языке пользователя. Согласно статистике, на неанглоязычные страны приходится 20% от общего числа мировых продаж на рынке электронной коммерции. Именно поэтому необходимо предоставлять информацию, хотя бы самую важную, на родном языке пользователя.
Давайте теперь рассмотрим отдельные элементы онлайн-магазинов, которые обязательно нужно адаптировать к предпочтениям иностранных покупателей.
User experience (UX) это то, как пользователь взаимодействует с продуктом и то, какие эмоции он от этого испытывает. Даже если интерфейс сайта или приложения полностью соответствует культурным нормам страны, он может показаться странным для пользователей. Приведём несколько примеров.
Информация о покупателе при оформлении покупок в корзине. В некоторых регионах, например, в России, традиционно используются три поля: имя, фамилия и отчество. Но в других регионах, таких как Азия или Америка, пользователи ожидают увидеть только два поля: имя и фамилия. Более того, для жителей некоторых восточноевропейских стран привычнее вначале увидеть поле для ввода фамилии, а не имени. Покупатели могут прийти в замешательство (или даже отказаться от использования сайта или оформления покупок), если увидят непривычную форму заказа.
Длина слов и размер шрифта. Слова на различных языках часто сильно отличаются по количеству букв. Например, слово пользователь на английском, русском и немецком выглядят так User, Пользователь и Benutzer соответственно. Игнорирование размера слов может негативно сказаться на дизайне сайта и читабельности.
Направление текста. Не все языки читаются слева направо, как русский или английский. В зависимости от направления текста может изменяться и последовательность действий пользователей. К примеру, на экране русскоязычного сайта кнопки Назад и Далее будут расположены слева и справа соответственно. Но на сайте на иврите кнопки должны находиться на противоположных сторонах.
Цвета, графика и форматирование. Для американца или европейца сайт в азиатском стиле может быть слишком непривычным из-за пёстрого оформления в виде яркого лоскутного одеяла, сотканного из текста, изображений, GIF-файлов, анимаций и иконок. А азиатский дизайн может показаться перегруженным информацией для западных пользователей, которые больше привыкли к чётко структурированным блокам, в то время как посетителям из Азии вполне комфортно пользоваться таким ярким сайтом.
Вид сайта может сильно отличаться в зависимости от географического положения пользователей. Представим, что вам нужно купить кондиционер для дома. Результаты выдачи на англоязычном сайте Amazon будут сильно отличаться от результатов на сайте Amazon Japan, локализованном для японского рынка.
Сайт Amazon (США)Сайт Amazon (Япония)Вот несколько очевидных отличий:
В английской версии сайта функции товара изображены на иконках вместо длинного описания.
Японские товары сопровождаются более длинным текстовым описанием, без использования иконок для функций. По крайней мере, так это выглядит для тех, кто не владеет японским языком.
Названия английских товаров выделены жирным чёрным шрифтом.
Японские названия, похоже, ничем не отличаются от остальной части описания товара (используется такой же синий шрифт).
Локализация корзины очень важный этап для выхода на иностранные рынки. Конечно, невозможно локализовать корзину на все языки мира при ограниченном бюджете. Самым оптимальным решением будет адаптация корзины под рынки, которые приносят наибольший доход. Кроме того, убедитесь, что вы сможете перенаправлять клиентов на нужную страницу оформления заказа, исходя из их географического местоположения. Для оптимизации корзины вы можете выбрать один из двух способов:
Ручная локализация включает в себя разработку отдельных страниц (или даже целых сайтов) для всех ведущих рынков. Такая локализация, как правило, длится долго и может заметно ударить по вашему бюджету.
Автоматическая локализация определяет географическое положение клиента и показывает корзину, основанную на предпочтениях местного рынка.Автоматическая локализация проще, менее подвержена человеческим ошибкам, и доступна на большинстве платформ для электронной коммерции.
Вид корзины может отличаться от региона к региону. Но покупатели всегда ожидают, что их взаимодействие с корзиной покупок на любом сайте будет таким, как они привыкли.
Источник: проект 2Chekout по стратегии адаптации корзины для Visicom MediaКак правило, для оформления заказа в корзине используется либо одностраничный, либо двустраничный шаблон. Если используется двустраничный шаблон, то за общим перечнем расходов и оформлением заказа следует страница с общей информацией. У одностраничного шаблона такая страница отсутствует.
Популярность шаблонов варьируется в различных регионах: например, в США пользователям нравится одностраничный шаблон, тогда как покупатели из Европы предпочитают двустраничный шаблон, в котором есть страница со сводной информацией по заказу.
На самом деле предпочтения пользователей могут различаться даже в странах из одного региона: по данным платформы 2Checkout пользователи из Германии предпочитают одностраничный шаблон, а во Франции двустраничная версия даёт больше конверсий.
Исследования показывают, что для различных целевых рынков нужен уникальный подход. Поэтому анализируйте свои рынки, чтобы удовлетворить ожидания ваших пользователей!
При определении цен на товары и услуги важно сохранять прозрачность и учитывать привычки покупателей. Добавьте возможность видеть цену в местной валюте со всеми применимыми налогами и сборами. Например, технология GeoIP помогает определять местоположение покупателей и автоматически отображать цены в их местной валюте.
Важно помнить также и о том, что конкурентоспособная цена в одной стране может оказаться несоразмерно высокой в другой. Очень важно, чтобы вы локализовали расчёт цен для каждого целевого рынка, основываясь на экономическом положении региона, себестоимости продукции и расходах на обслуживание именно в этой стране.
Локализация способа оплаты является одним из важнейших факторов при принятии решения о покупке товара. Сочетание глобальных и локальных вариантов оплаты определенно повысит коэффициент конверсий. А использование локальной системы обработки платежей повышает рейтинг доверия, то есть способствует росту положительного отношения местной аудитории к вашему сайту.
Источник: 2CheckoutСогласно статистике, предпочтения по платёжным системам широко варьируются от региона к региону.
Хотя около 86% мировых онлайн-платежей осуществляются с помощью кредитных карт и PayPal, в Китае 79% онлайн-заказов совершаются с использованием Alipay или WeChatPay. Поэтому при выходе на китайский рынок советуем предложить эти два варианта покупателям, чтобы получить более высокий коэффициент конверсии. В Бразилии очень популярны Boleto и карты с возможностью оплаты в рассрочку: на их долю приходится более 50% онлайн-заказов. В Европе востребован SEPA Direct Debit, а японские покупатели предпочитают Konbini.
Конечно, настроить различные платёжные системы под каждую страну, где вы продаёте товары, достаточно сложная задача. Если вы планируете расширить свою деятельность в различных регионах, предпочтительнее использовать международную систему электронных платежей, к примеру, 2Checkout.
Такая система даёт ряд преимуществ:
Интеллектуальная маршрутизация платежей позволяет перенаправлять платежи между различными платежными шлюзами. Она служит в качестве механизма переключения при сбое и повышает скорость авторизации карт.
Система Account Updater, разработанная совместно Visa и MasterCard, которая автоматически обновляет номера и срок действия карт клиентов на основании информации от банка-эмитента.
Логика повторных попыток позволяет свести к минимуму сбои и восстановить до 20% неудачных транзакций;
Управление возвратными платежами и возмещением средств поможет уменьшить число таких случаев, обеспечивает точные и своевременные платежи, а также соответствие всех сумм списания денежных средств фактической стоимости товаров.
Независимо от того, где вы находитесь: в России, США или любой другой стране, вам придётся платить налог на добавленную стоимость (НДС) по каждой транзакции и другие налоги. Ситуация усложняется ещё тем, что по отношению к потребителям и бизнесу применяются различные правила.
Вы должны взимать правильную сумму налога для каждого рынка, а затем перечислять эти налоги соответствующим налоговым органам. К счастью, этот процесс можно автоматизировать: это легко сделать, если вы пользуетесь системой GeoIP, определяющей автоматически местоположения пользователя. А налоговые калькуляторы помогут немного разобраться в области налогообложения.
Однако для компаний, которые хотят сосредоточиться на маркетинге и продаже своих продуктов и услуг по всему миру, партнёрство с компанией, которая возьмет на себя все юридические и налоговые вопросы, будет наилучшим вариантом.
Нормативно-правовое соответствие это ещё один важный пункт для компаний, которые выходят на мировой уровень.
Генеральный регламент ЕС о защите персональных данных (GDPR), Закон штата Калифорния о защите конфиденциальности потребителей (CCPA), Федеральный закон О персональных данных это лишь примеры законодательной базы, которая регулирует порядок сбора, хранения и использования компаниями личных данных потребителей в различных странах.
Источник: 2CheckoutБолее того, Бразилия также приняла новый закон о конфиденциальности, который вносит радикальные изменения в существующие стандарты защиты данных. Изменения затрагивают все работающие в Бразилии компании, имеющие как физическое, так и только экономическое присутствие в стране.
Для обеспечения полного соответствия требованиям рекомендуется сотрудничать с e-commerce платформой, которая помогает обеспечить соблюдение стандартов различных законов о конфиденциальности.
Естественно, когда клиент разочарован или имеет претензии к качеству вашего продукта, он предпочтёт пообщаться с представителем службы поддержки на своём родном языке. Заранее позаботьтесь о локализации справочной документации и различных руководств для пользователей. Служба поддержки на родном языке и локализованная документация помогут сформировать положительный образ вашего продукта или услуги в новом регионе.
Мы советуем сделать отдельный телефонный номер и завести отдельную почту для каждого региона. Если у вас нет бюджета, чтобы содержать команду техподдержки пользователей, то вы можете использовать простой и удобный вариант страницу F.A.Q. с наиболее популярными вопросами от пользователей. Электронная почта также отличный вариант.
Важно, чтобы клиенты своевременно получали информацию о своих заказах: письма с подтверждением и приветственные письма должны быть идеально переведены, а данные о заказе структурированы и содержать все нужные сведения о предмете покупки, цене, способе оплаты и доставки.
Кроме того, локализация контента для социальных сетей и создание уникального профиля компании может стать важной частью вашей стратегии выхода на новые рынки.
В 2020 году стало очевидно, что потенциал e-commerce рынка невероятно большой. Для предприимчивых бизнесменов сейчас сложились идеальные условия, чтобы вывести продукт или услугу на новые рынки и увеличить свой доход. И качественная локализация это один из ключей к успеху на мировом рынке.
Нужно понимать, что учесть все культурные, социальные и экономические нюансы в разных странах сложная и трудоёмкая задача. Но иностранные партнеры, специализирующиеся в сфере электронной торговли, могут помочь создать положительный образ бренда для пользователей в каждом регионе.
Профессиональное агентство по локализации поможет сориентироваться в особенностях зарубежных рынков, чтобы можно было сосредоточиться исключительно на обновлении и улучшении продуктов и повышении лояльности клиентов.
Каждый бизнес по-своему уникален: тестируйте различные подходы к клиентам, чтобы понять, что лучше всего сработает для вас.
Перевод статьи выполнен в Alconost. Alconost занимаетсялокализацией игр,приложений и сайтовна более 70 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики, продающие, имиджевые ролики, тизеры, эксплейнеры, трейлеры для Google Play и App Store.
На сегодняшний день Facebook Ads это самый эффективный инструмент для привлечения потенциальных клиентов и генерации продаж. Это, в свою очередь, приводит к росту конкуренции на рекламной площадке, а также к росту стоимости размещения объявления. Теперь чтобы показать рекламное объявление своей целевой аудитории и получить переход на сайт, приходится платить больше.
Отличным способом повысить эффективность рекламной кампании является социальное доказательство или social proof. О том, что это такое, и как использовать его для улучшения показателей рекламных кампаний в Facebook, расскажем в данной статье.
Social Proof (социальное доказательство) это психологическое явление, заключающееся в том, что люди при принятии каких-либо решений руководствуются действиями других, предполагая, что это правильно. Социальное доказательство может проявляться в мнении, поведении, оценках других людей, на которые мы склонны опираться в принятии решений.Если говорить конкретно про Facebook, то СД являются просмотры, лайки, комментарии, репосты.
Зачастую признание другими людьми побуждает покупать сильнее, чем конкретные аргументы и рациональная выгода. Именно поэтому Social proof является распространенным инструментом, который активно используют маркетологи и продавцы.
В действительности на финальное решение клиента о покупке влияет множество факторов: доверие к магазину / бренду, простота навигации на сайте, товары (их актуальность, качество и wow-фактор), а также ряд психологических аспектов, среди которых немаловажную роль играет social proof.
Креативные возможности, связанные социальным доказательством, позволяют значительно повлиять на увеличение конверсии сайта, а также повысить эффективность рекламы в Facebook (и других рекламных площадках).
Далее мы расскажем, как добиться увеличения кликабельности рекламных объявлений в Facebook, благодаря использованию инструмента социального доказательства.
В прошлом году Facebook пересмотрел показатели измерения эффективности рекламной кампании. Теперь релевантность рекламного объявления определяется тремя показателями, среди которых значится коэффициент вовлеченности (Engagement Rate).
ОценкаEngagement Rateпомогает сравнить ожидаемый коэффициент вовлеченности вашей рекламы и других объявлений, которые таргетированы на ту же аудиторию. Ожидаемый коэффициент вовлеченности это вероятность того, что пользователь нажмет на объявление, раскроет его, отреагирует на него, оставит комментарий или поделится им.
Высокий показатель вовлеченности говорит о том, что ваше рекламное объявление пришлось по вкусу / интересам целевой аудитории, на которую была настроена реклама.
Facebook использует этот показатель наряду сконверсиейикачествомобъявления, чтобы убедиться в пользе рекламы для пользователя. Если все показатели в норме, то стоимость показа рекламы ЦА будет снижена. Социальное доказательство, в свою очередь, помогает поддерживать эти показатели на высоком уровне. Далее расскажем, как этого добиться.
При создании рекламы в Facebook Ads Manager, платформа присваивает каждому объявлению уникальный идентификатор post ID.
Если вы решите продублировать одно из успешных объявлений, то ему будет присвоен новый идентификационный номер. Таким образом, все лайки, репосты, реакции (элементы социального доказательства) не будут перенесены на новое объявление.
Хорошая новость заключается этом, что способ сохранить накопленные социальные доказательства при дублировании объявления все же есть, что можно сделать, связав новое объявление с исходным.
Стандартная структура рекламной кампании с несколькими группами объявлений выглядит следующим образом:
В одной кампании у вас есть несколько групп объявлений. В каждой
группе объявлений как минимум одно объявление (с уникальным
идентификатором). Не смотря на то, что объявление может быть
абсолютно одинаковым во всех группах, для каждого адсета в ленте
Facebook создается отдельный пост.
Спустя определенное время работы кампании, у вас будет с десяток, а
то сотню объявлений с разным количеством реакций, среди которых
несколько лидеров. Далее вы запускаете новые группы с объявлениями,
ранее показавшими себя лучше всего (с помощью дублирования или
создания объявления заново), но теряете всю накопленную по ним
статистику (показы, лайки, комментарии, репосты).
А что если мы скажем, что вы можете сохранить все социальные
доказательства в виде реакций при запуске новых групп
объявлений?
В результате внедрения нехитрой механики мы можем прийти к иной
схеме, где вместо разных объявлений в каждой группе, у вас есть
одно объявление с единым идентификатором. Соответственно, все
показатели вовлеченности будут накапливаться на одном и том же
объявлении, что значительно повысит доверие к рекламному объявлению
и его кликабельность.
Структура кампании будет выглядеть следующим образом:
Стоит отметить, что данный метод применим только для новостной ленты Facebook и Instagram, где и вовлеченность можно увидеть в форме реакций: лайки, репосты, комментарии.
Итак, переходим непосредственно к механике. Откройте свой Facebook Ads Manager и следуйте простым указаниям:
Шаг 1: Выбираем объявление
Вам необходимо заранее найти объявление с наибольшим количеством показов и самым высоким CTR, которое вы хотите использовать повторно. Выберите объявление, на которое вы хотите направить все рекламные объявления и нажмитеEdit.
Шаг 2: Получаем ID объявления
В разделеAd Previewнажмите
кнопкуShare Preview, затем Facebook Post with
Comments.(Есливы размещаете объявление в Instagram, то
нажмитеInstagram Post with Comments).
После загрузки объявления в новой вкладке вы получите URL-адрес. Выделите и скопируйтевторую часть цифр после /posts/.
При работе с объявлением в Instagram, у вас будет всего одна последовательность цифр, которую нужно будет также выделить и скопировать.
Шаг 3: Применяем ID объявления
На данном этапе вам нужно либо создать новую группу объявлений или
скопировать уже существующую (что быстрее). Измените в них
необходимые параметры (возрастной диапазон, страну, пол, интересы и
т. д.) и переходите на уровень рекламных объявлений.
НажмитеEdit, а затем вместо Create Ad нажмите наUse Existing Post.
НажмитеEnter Post IDи вставьте ID объявления из Шага 2.
НажмитеSubmitи необходимое вам объявление загрузится в новую группу объявлений.
Шаг 4: Дублируем группы
Теперь дублируем новую группу с нужным нам
объявлением и меняем разные настройки таргетинга при необходимости.
Таким образом вы быстро создадите несколько групп с одним и тем же
объявлением (с одним и тем же Post ID). Если вы сделали все верно,
то вы увидите то самое объявление с уже накопленными показами и
реакциями.
Как вы поняли, сохранение социальных доказательств имеет высокое значение при тестировании одного объявления в разных группах и при масштабировании рекламных кампаний в Facebook. Обязательно попробуйте использовать описанный выше метод, и вы точно заметите, как показатели кампаний начнут постепенно улучшаться.
Мы новенькие на Хабр, но у нас уже достаточно внушительный опыт в сфере eCommerce, которым мы с удовольствием готовы делиться. Наша команда действительно старается публиковать самые интересные и актуальные материалы , которые помогут вам быть в курсе текущих трендов и новостей в сфере eCommerce. Мы всегда рады новым читателям и с радостью продолжим делиться своими наблюдениями и наработками. Если статья была полезна, то мы будем благодарны, если вы поддержите наш канал комментарием.