Консультации по отслеживанию архитектуры приложений на базе Node.js

Я пытаюсь решить свою проблему с архитектурой приложения, основанного на node.js. У меня есть некоторые идеи, но мне интересно, что вы думаете.

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

Прежде всего, я думаю об отправке запроса с помощью ajax с веб-сайтов на мой сервер и после анализа данных на моем сервере node.js, отправке этих данных в учетную запись панели управления через socket.io. Каждое событие со своего сайта пользователь будет видеть на дашборде «в полете». Как вы думаете, эта концепция верна? Не будет ли каждый запрос ajax слишком дорогим? Может быть, мне следует подумать о другом способе отправки данных на мой сервер?

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


person corey    schedule 20.08.2017    source источник


Ответы (1)


Вы пытаетесь разработать классическое аналитическое приложение, которое собирает данные из разных источников и показывает некоторую аналитику на основе этих данных, например, Google Analytics и так далее.

Does every ajax request will not be too much costly? 
Maybe I should think about another way to send data to my server?

Для веб-приложений это стандартный способ отправки данных с клиента на сервер. Конечно, протокол Http имеет больше накладных расходов по сравнению с UDP, WebSockets или протоколами на них, но он не требует дополнительных настроек безопасности, прост в использовании и масштабировании. Веб-сокеты требуют постоянного поддержания TCP-соединения и их сложнее масштабировать. Вы можете найти множество сообщений о сравнении этих протоколов, например здесь.

В соответствии с этим вопросом ваше приложение будет прокси-сервером событий с веб-сайтов на другие веб-приложения, где они будут каким-то образом анализироваться. Каждое событие будет иметь некоторую информацию, такую ​​как тип (логин, щелчок), URL-адрес, пользователь, дата и так далее. Он может работать до некоторой нагрузки. Судя по всему, у вас будут проблемы на стороне браузера, принимающего более 100 событий (запросов) в секунду даже через WebSockets. JS с однопоточной моделью исполнения не так хорош для аналитики (фильтрация, расчет, агрегация). Я думаю, что вам не нужно передавать события на панель инструментов как есть, было бы полезнее отправлять некоторые агрегированные данные, такие как количество новых событий, гистограммы событий и так далее. Итак, в этом случае вам нужно выполнить аналитику на стороне сервера (приложение node.js).

Я рекомендую вам также ознакомиться с подходом CQRS, в котором сохраняются данные (события) и их извлечение (запрос ) разделен для достижения хорошей производительности как для операций записи (регистрация событий), так и для операций чтения (получение событий или некоторых аналитических операций). Очевидно, вам может понадобиться использовать какую-то базу данных для аналитики, например, Mondo DB, возможно, Redis и так далее.

person Vasyl Zv    schedule 26.08.2017