服务器IO瓶颈 - 如何减少数据库读/写并仍然保留我的数据?

时间:2014-07-20 07:48:31

标签: java mysql spring concurrency

我们正在开发一个带有apache tomcat服务器集群和负载均衡器的Web应用程序服务器。 我们的数据库是mySQL,我们在项目中使用spring框架。

其中一项要求是能够维持10K并发用户请求。

现在,这导致了一个真正的问题,因为在每个请求句柄中我们都在执行以下操作:

1)开始交易

2)从DB获取数据(如果需要)

3)转换数据

4)将数据持久保存回数据库

现在,显然这是此过程的主要IO瓶颈。如果我们使用内存数据库,它将显着提高性能。

更明显的是,现在服务器可以保持高流量并完成我上面提到的所有事情。那么必须有一个更好的架构来处理这些请求吗?

有什么想法吗?引用?

由于

2 个答案:

答案 0 :(得分:1)

如果数据库访问中存在IO瓶颈,则应使用缓存。常见的开源java缓存是EhcacheInfinispan(formelly JBoss缓存或Hazelcast

当大多数请求是只读且涉及相同数据时,缓存可以提供显着的性能提升。如果每个请求读取和写入不同的元素,则增益会小得多。

有不同的缓存架构,具体取决于数据是否主要是只读访问,是否有单个Web服务器或群集等。根据您的应用程序要求,您的里程会有所不同......您必须自己尝试。< / p>

答案 1 :(得分:1)

正如@Serge指出的那样,缓存对只读数据有很大帮助。我从未体验过10k并发写入的项目要求。如果您的要求是以从完成的节点恢复的方式存储会话数据,您可以查看Apache Zookeeper。但是,由于你的问题更多是关于数据库访问减少,你最好的提示是看看ehcache。它也可以用作冗余存储节点。既然你是usibg Spring就看看板载的@cachable功能。也许你的解决方案是缓存整个请求。

另一种选择是在主/从模式下使用Maria db。