我们正在开发一个带有apache tomcat服务器集群和负载均衡器的Web应用程序服务器。 我们的数据库是mySQL,我们在项目中使用spring框架。
其中一项要求是能够维持10K并发用户请求。
现在,这导致了一个真正的问题,因为在每个请求句柄中我们都在执行以下操作:
1)开始交易
2)从DB获取数据(如果需要)
3)转换数据
4)将数据持久保存回数据库
现在,显然这是此过程的主要IO瓶颈。如果我们使用内存数据库,它将显着提高性能。
更明显的是,现在服务器可以保持高流量并完成我上面提到的所有事情。那么必须有一个更好的架构来处理这些请求吗?
有什么想法吗?引用?
由于
答案 0 :(得分:1)
如果数据库访问中存在IO瓶颈,则应使用缓存。常见的开源java缓存是Ehcache,Infinispan(formelly JBoss缓存或Hazelcast。
当大多数请求是只读且涉及相同数据时,缓存可以提供显着的性能提升。如果每个请求读取和写入不同的元素,则增益会小得多。
有不同的缓存架构,具体取决于数据是否主要是只读访问,是否有单个Web服务器或群集等。根据您的应用程序要求,您的里程会有所不同......您必须自己尝试。< / p>
答案 1 :(得分:1)
正如@Serge指出的那样,缓存对只读数据有很大帮助。我从未体验过10k并发写入的项目要求。如果您的要求是以从完成的节点恢复的方式存储会话数据,您可以查看Apache Zookeeper。但是,由于你的问题更多是关于数据库访问减少,你最好的提示是看看ehcache。它也可以用作冗余存储节点。既然你是usibg Spring就看看板载的@cachable功能。也许你的解决方案是缓存整个请求。
另一种选择是在主/从模式下使用Maria db。