java - 跟踪 Spring Web 应用程序上的用户 Activity

标签 java spring

我有一个使用 Spring 框架用 Java 编写的 Web 应用程序。 我想存储用户 Activity ,例如页面访问、操作、交互等。 我读到,通常这是通过为每个跟踪方面创建一个表来完成的。我想知道是否有更好的方法使用 Spring 框架来做到这一点,比如拦截所有请求并触发一些操作。 您建议使用哪种技术来存储所有这些信息?我知道我正在使用 MySql 数据库,通过 JPA 与其交互。但是,由于我对这类事情真的很陌生,所以我不知道是否应该使用 NoSql 数据库还是继续使用现有的 MySql 数据库。这个奇迹来自这样的想法:这种数据流将比来自更传统操作(例如登录、创建、删除等)的正常数据流大得多。 希望自己能解释清楚……如果不告诉我,我会尝试添加更多细节。

[编辑1]

网络应用程序是一种电子商务。到目前为止,它还没有那么多用户,但它会(以数千为单位)。

用户跟踪的目标只是对他们进行分析,以便为他们提供更好、更定制的服务。例如,如果看到用户正在查看某个特定类别的许多项目,我可以向他展示更多此类项目。

我不太关心性能,我的意思是,它不必那么快。

我知道我只有一个数据库,所有内容都存储在其中。我不知道用这种数据流为其充电是否会降低其性能。

应用程序在 AWS ElasticBeanstalk 上运行,数据库在 AWS RDS 上。

最佳答案

总的来说,这是一个非常广泛的主题。

我想到以下考虑因素:

  1. 每段时间有多少请求传递到微服务?如果用户数量较少(即数据库中的记录数量),那么可以使用 MySQL 方法,表不会很大。但请注意,有时无论如何都应该清洁

  2. 延迟重要吗?有时必须非常快速地处理请求,向数据库添加跃点来保存用户首选项可能会出现问题

  3. 您想如何使用此类信息?您是否打算使用仪表板(在这种情况下,Micrometer + Prometheus/InfluxDB 和 Grafana 可以是一个很好的解决方案)。您是否计划实际按照请求数量向用户收费,并能够将每月账单以 PDF 格式发送到他们的电子邮件或提供对此类信息的 Web 访问(例如 AWS 所做的)?

  4. 速率限制器怎么样?您是否打算拒绝某些频繁且来自同一用户的请求?

  5. 有多少实例会“添加”此类信息?如果您有数千个微服务现在必须写入 MySQL,该怎么办 - 它可能无法承受这样的负载(除了其设置的常规负载之外)?

解决方案的范围可能会有所不同。 您可以在内存中对每个用户的请求进行批处理,并将消息发送到 Kafka 中,然后使用 kafka 流对其进行聚合。通过这种方法,您将最大限度地减少添加处理对现有解决方案的影响,并部署一些其他服务来处理如此大量的数据。

另一个选项:也许您可以创建一个异步填充的日志文件并将信息存储在那里。然后您可能想要添加一些“代理”/side-car 容器(例如logstash)并将数据流式传输到某些存储中。另一个可能与该领域相关的项目是 Apache Flume,它允许您构建管道。

对于计费,您可能会使用专门的系统,AFAIK spring 没有这样的东西,通常这些是您可以集成的现成产品。

对于速率限制,您可以考虑:Resilience4j 或使用 redis 解决它

关于java - 跟踪 Spring Web 应用程序上的用户 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158731/

相关文章:

java - 使用 JDBC 滚动策略对表格数据进行分页是否会导致性能下降?

java - 关于字符串中的括号

java - JTree、setUserObject()、toString()

java - 如何在Spring应用程序中访问图像文件夹

java - 如何恢复 Spring Boot 1.5 中的默认异常映射?

java - 使用 Hibernate/Spring/JUnit 设置和拆除复杂的数据库状态

java - 与编码相关的数据库连接错误

javascript - Java中有没有JavaScript风格的Collection

java - Fitnesse 上的定制 fixture

java - Spring @validated 没有级联到字段