我尝试解决基于node.js的应用程序架构问题。我有一些想法,但我想知道你的想法。
好吧,我的应用程序将存储来自客户网站的活动, 将由客户定义的活动,例如。登录网站,点击产品,点击类别菜单等。这些活动将传递到我的应用程序,之后,我会向客户仪表板显示动态以进行分析或用于其他目的。
首先,我考虑将ajax从网站发送到我的服务器,并在解析我的node.js服务器上的数据后,通过socket.io将该数据发送到仪表板帐户。用户将在“飞行中”的仪表板上看到来自他网站的每个事件。你觉得这个概念还可以吗?每个ajax请求都不会太昂贵吗?也许我应该考虑另一种将数据发送到我的服务器的方法?
答案 0 :(得分:1)
您正在尝试设计经典分析应用程序,该应用程序汇集来自不同来源的数据,并显示对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应用程序,这是将数据从客户端发送到服务器的标准方法。当然,与UDP,WebSockets或协议相比,Http协议具有更多的开销,但它不需要额外的安全配置,易于使用和扩展。 WebSockets需要始终保持TCP连接,并且难以扩展。你可以找到很多关于比较这些协议的帖子,比如here。
根据这个问题,您的应用程序将成为从网站到另一个网络应用程序的事件的代理,在那里它们将以某种方式进行分析。每个事件都会有类型(登录,点击),网址,用户,日期等信息。它可以工作到一些负载。显然,即使通过WebSockets,浏览器端也会遇到每秒接受100多个事件(请求)的问题。具有单线程执行模型的JS不太适合分析(过滤,计算,聚合)。我认为您不需要将事件按原样传递到仪表板,发送一些聚合数据(如新事件计数,事件直方图等)会更有用。因此,在这种情况下,您需要在后端(node.js app)执行分析。
我建议您同时查看CQRS approach存储数据(事件)及其检索(查询)的位置,以便为写入(日志事件)和读取(检索事件或某些分析)获得良好的性能)操作。显然你可能需要使用一些数据库来做分析,比如Mondo DB,也许是Redis等等。