Веб-сайт Click stream stream + клиент 360 с использованием AWS Kinesis Firehose

Мы пытаемся реализовать поток посещений нашей электронной коммерции на AWS. Поток кликов будет отслеживать все действия, совершаемые «анонимными» пользователями. Анонимные пользователи отслеживаются с помощью UUID, сгенерированного во время их первого посещения и сохраненного в файле cookie. Мы использовали пример AWS здесь, чтобы предложить архитектуру решения, как на схеме ниже:

введите здесь описание изображения

Теперь 2 вопроса:

  1. Различные страницы в электронной коммерции имеют разные данные о посещениях. Например, на странице просмотра элемента мы также хотели бы отправить информацию, связанную с элементом, такую ​​как itemId. Или на странице оформления заказа мы хотели бы, чтобы информация о заказе была привязана к данным о кликах. Должны ли мы иметь отдельные потоки доставки Firehose для разных страниц, чтобы поддерживать пользовательские данные о посещениях? Или мы должны отправить общую запись потока кликов (с возможными нулевыми значениями для некоторых атрибутов) в поток доставки FH?

  2. В какой-то момент наши анонимные пользователи становятся идентифицированными (например, они входят в систему, чтобы мы знали их User_ID). Поэтому мы хотели бы связать {UUID и User_ID}, чтобы иметь возможность иметь представление клиента 360. Должны ли мы рассматривать отдельный поток потока + отдельную корзину S3 для отслеживания сопоставлений UUID + User_ID? Должны ли мы использовать Athena для отображения агрегированных отчетов для клиента 360? Должны ли мы агрегировать данные и создать измерение клиентов в Redshift? Что было бы хорошим решением для этого?

С уважением, Лина

[Обновление]: Является ли следующая диаграмма приемлемым решением вопроса? введите здесь описание изображения




Ответы (1)


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

Чтобы сделать это надежно, вам придется использовать несколько потоков Kinesis.

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

Отказ от ответственности: личное мнение: я бы посоветовал вам перенести это в Kinesis Firehose, чтобы у вас была возможность начать загрузку данных в redhift с минимальными изменениями процесса на более позднем этапе, и в то же время также создать резервную копию данных в S3 для холодного хранения/резервного копирования. Учитывая объем, Athena может оказаться не лучшим выбором для выполнения аналитических запросов к данным. Вы можете посмотреть на использование внешних таблиц Redhift, в которых данные все еще лежат на S3. Что касается стоимости самого экземпляра Redshift, теперь вы можете приостановить работу кластера. Прочитайте объявление здесь< /а>.

Чтобы обратиться к обновленной архитектурной диаграмме, которую вы добавили, вы можете полностью пропустить Glue. Kinesis может напрямую загружать данные в S3, и вы можете определить внешние таблицы с помощью спектра RedShift.

Общий подход заключается в загрузке данных в Redshift, а также их резервном копировании на S3. Потом на Redshift можно периодически удалять старые данные (скажем больше года назад). Это уравновешивает стоимость и производительность, поскольку запрос будет более производительным для данных, лежащих в Redshift.

Что касается преобразований, вы можете напрямую использовать Lambdas с Kinesis Firehose. Подробнее об этом читайте здесь.

Редактировать 1: добавлено мнение об использовании Redshift и почему это будет полезно и экономически выгодно.

Редактировать 2: добавлены подробности об упрощении новой предлагаемой архитектуры.

person Mayank Raj    schedule 14.07.2020
comment
Спасибо @Mayank. Но мы не используем потоки Kinesis Data, нас не интересует аналитика в реальном времени на данный момент.. Будем использовать Kinesis Firehose... Так что шардов там не будет.. - person Lina; 14.07.2020
comment
Это же обоснование применимо и к этому. Это та же самая задача — найти золотую середину между стоимостью и производительностью. Кроме того, я бы посоветовал вам попробовать пожарный шланг. Я обновил свой ответ по причине, почему я так говорю. - person Mayank Raj; 14.07.2020
comment
Спасибо, Мьянак ... Я только что обновил вопросы ... Итак, вторая диаграмма является приемлемым решением вопроса? (скажем, у нас есть разделение s3, и формат файла в клее будет паркетным). Клей будет использоваться в Redshift Spectrum для создания внешних таблиц, а затем мы сможем соединить эти таблицы и получить конечную таблицу просмотра 360 градусов. .. это сработает? - person Lina; 14.07.2020
comment
@Lina, я обновил ответ, указав, как можно еще больше оптимизировать архитектуру. Если ответ действительно касается вашего вопроса, не возражаете ли вы принять его. Таким образом, другие, кто наткнулся на это, могут легко найти решение. Ваше здоровье. - person Mayank Raj; 14.07.2020