本文试图解决基于Node.js的应用程序的体系结构问题。我有一些想法,但我想知道你的想法。
嗯,我的应用程序将从客户网站存储活动,活动将由客户定义,例如。登录网站,点击产品,点击类别菜单等,这些事件将传递到我的应用程序,之后,我显示活动到客户仪表板进行分析或其他目的。
首先,我考虑通过ajax从网站向我的服务器发送请求,并在解析node.js服务器上的数据后,通过socket.io将该数据发送到dashboard帐户。用户将看到每个事件从他的网站仪表板“在航班上”。你觉得这个概念行吗?每个ajax请求的代价不会太大吗?也许我应该考虑另一种方法来向我的服务器发送数据?
您正在尝试设计经典的分析应用程序,它从不同的来源收集数据,并在这些数据上显示一些分析,如Google Analytic等等。
Does every ajax request will not be too much costly?
Maybe I should think about another way to send data to my server?
对于web应用程序,这是从客户端向服务器发送数据的标准方式。当然,Http协议与UDP,WebSockets或其上的协议相比有更多的开销,但它不需要额外的安全配置,易于使用和扩展。WebSockets要求始终保持TCP连接,并且更难扩展。你可以在这里找到很多关于比较这些协议的帖子。
根据这个问题,您的应用程序将是从网站到另一个web应用程序的事件代理,在那里它们将以某种方式被分析。每个事件都会有一些信息,比如类型(登录,点击),url,用户,日期等等。它可以工作到一些负载。显然,即使通过WebSockets,在浏览器端每秒接受100个事件(请求)也会有问题。单线程执行模型的JS对于分析(过滤,计算,聚合)不是那么好。我认为您不需要将事件原样传递给仪表板,发送一些聚合数据(如新事件计数,事件直方图等)会更有用。因此,在本例中,您需要在后端(Node.js应用程序)执行分析。
我还建议您研究一下CQRS方法,其中存储数据(事件)和它们的检索(查询)是分开的,以便在写(日志事件)和读(检索事件或一些分析)操作中都获得良好的性能。显然,您可能需要使用一些数据库来进行分析,比如Mondo DB,也许Redis等等。