我们正在开发一个带有apache tomcat服务器集群和负载均衡器的web应用服务器。我们的数据库是mySQL,我们在项目中使用了spring框架。
其中一个需求是能够维持10K的并发用户请求。
现在,这导致了一个真正的问题,因为在每个请求句柄中,我们执行以下操作:
1)开始事务
2)从DB获取数据(如果需要)
3)转换数据
4)将数据持久化回DB
显然,这是此过程的主要IO瓶颈。如果我们使用内存中的DB,它将显着提高性能。
更明显的是,现在的服务器可以保持很高的流量,并且可以做我上面提到的所有事情。因此,必须有一个更好的架构来处理这些请求,对吗?
有什么想法吗?参考资料?
谢谢
发布于 2014-07-20 17:00:53
如果您的数据库访问中存在IO瓶颈,则应使用缓存。常见的开源java缓存有Ehcache、Infinispan (前身是JBoss缓存或Hazelcast )。
当大多数请求是只读的并且涉及相同的数据时,缓存可以提供显著的性能改进。如果每个请求都读取和写入一个不同的元素,则增益会小得多。
有不同的缓存体系结构,这取决于数据是否主要是只读访问的,是否有单个web服务器或集群等。根据您的应用程序要求,您的里程将有所不同……你得自己试一试。
发布于 2014-07-20 17:19:23
正如@Serge指出的那样,缓存在处理只读数据时非常有效。我从来没有遇到过有10k并发写入的项目需求。如果您的需求是以某种方式存储会话数据以从已完成的节点恢复,您可以看看Apache Zookeeper。但是,由于您的问题更多地是关于减少数据库访问,因此最好的提示是查看ehcache。它也可以用作冗余存储节点。既然你是usibg Spring,那就来看看onboard @cachable的特性。也许你的解决方案是缓存整个请求。
另一种选择是在主/从模式中使用Maria db。
https://stackoverflow.com/questions/24848463
复制相似问题