避免在每个客户端http请求上加载文档的最佳方法是什么? 将所有这些加载的文档保存在内存中是否合乎逻辑? 如果是,是否需要一个线程池,每个线程都持有一个文件? 如果不是,还有其他选择吗?
(使用Java - Tomcat - Ubuntu)
答案 0 :(得分:1)
我会在tomcat前放置另一台服务器来进行缓存。如果你自己实现这个,你一定会遇到问题。设置可能如下所示:
Client
→Varnish Caching Server
→Apache HTTP Server
→Tomcat
如果您需要HTTPS,可以考虑在Varnish之前放置另一台服务器,因为它不支持SSL(我记得)。那么它可能是这样的:
Client
→Pound
→Varnish Caching Server
→Apache HTTP Server
→Tomcat
您可以使用某种规则语言广泛配置Varnish。它会很好地为你服务。
Pound只是一个小型反向代理,可用于终止SSL和/或负载平衡。
链接:
Apache:http://httpd.apache.org/
答案 1 :(得分:0)
如果您正在通过外部程序处理文档,那么您可以做的事情并不多 除了某处的缓存处理结果。另一种选择是热切地预处理文档并存储所有可能的查询结果以供以后检索。
在每个请求上分配外部进程显然是最糟糕的选择。
由于您的数据是在网络应用程序中处理的,并且是不可变的,您可以只是mmap 文件到字节缓冲区并再次工作。这样你就可以节省装载量 在JVM中分配数据。
由于您的查询不会更改数据,因此无需将它们推送到单独的线程 - 它们可以直接从提供http请求的不同线程访问数据