我有一个终端服务器监控项目。在后端,我使用Spring MVC,MyBatis和PostgreSQL。基本上我从DB查询会话信息并发送回前端并将其显示给用户。但是有一些大的查询(比如搜索总用户数,总会话数等),这会在用户打开网站时降低系统速度,所以我想将这些查询作为异步任务进行,这样网站就可以快速打开而不是等待用于查询。此外,我会定期从DB(每小时)检查终端服务器状态,如果终端服务器出现故障或平均负载过高,我会通知管理员。我不知道我应该使用什么,也许AKKA,或任何其他方式来做这两个工作(1.do异步大查询2.做一些定期查询)?请帮助我,谢谢!
答案 0 :(得分:0)
您可以在必要时使用Spring和缓存来实现此目的。
如果您要显示的数据不是实时"实时",但它可以是"接近实时"您可以定期从数据库中读取数据并对其进行缓存。然后,您的应用程序将从缓存中读取。
您可以探索不同的方法。 您可以尝试在PostgreSQL中创建一个物化视图,它将保存您需要的统计数据。根据您的要求,您必须了解如何处理刷新间隔等。
另一种方法是使用应用程序级缓存 - 您可以利用Spring(Spring docs)。您可以在启动时填充缓存并根据需要进行刷新。
利用Spring(Spring docs)@Scheduled
注释,可以再次实现每小时运行的任务。
回答你的问题 - 不要使用Akka - 你拥有在Spring生态系统中完成任务所需的所有工具。
答案 1 :(得分:0)
Akka在这里并不是很相关,它是针对事件驱动的编程模型,它处理并发问题以构建高度可伸缩的多线程应用程序。
您可以使用Spring task scheduler定期运行大量查询。如果您想保持简单,只需在全局应用程序上下文中存储总用户数,总会话数等数据即可解决问题。并使用spring scheduler定期从数据库更新此数据。您也可以将它存储在单独的数据库表中,以便在初始化时轻松加载此数据。
我真的不明白为什么你需要" memcached","物化视图"," Websockets"和其他重要的技术和框架,用于缓存一小组数据。您只需在应用程序上下文中维护一组全局参数,并根据需要使用计划任务更新它们。