Toa*_*oad 4 unix windows optimization webserver lookup-tables
我有很多查找表,我将从中生成我的webresponse.
我认为使用Asp.net的IIS使我能够在内存中保留静态查找表,我可以用它来快速提供我的响应.
然而,是否还有非.net解决方案可以做同样的事情?
我看过fastcgi,但我认为这会启动X进程,任何人都可以处理Y请求.但是根据定义,这些过程彼此屏蔽.我可以将fastcgi配置为仅使用1个进程,但这是否具有可伸缩性含义?
任何使用PHP或任何其他解释语言的东西都不会飞,因为它也是cgi或fastcgi绑定的吗?
我理解memcache可能是一个选项,虽然这将需要另一个(本地)套接字连接,我宁愿避免,因为内存中的所有内容都会快得多.
该解决方案可以在WIndows或Unix下运行......它并不重要.唯一重要的是会有很多请求(现在100 /秒,一年增长到500 /秒),我想减少处理它所需的网络服务器数量.
当前的解决方案是使用PHP和memcache(以及偶尔命中SQL服务器后端)完成的.尽管速度很快(对于php来说),但是当50 /秒通过时,Apache会遇到真正的问题.
我已经对这个问题给予了赏金,因为我没有看到足够的回应做出明智的选择.
目前我正在考虑使用Asp.net或fastcgi和C(++).
听起来你应该使用像Redis这样的内存中键值数据存储,如果你打算将来拥有多个Web服务器,那么你肯定会使用集中存储器.Redis在这种情况下特别理想,因为它支持列表,集合和有序集等高级数据结构.它也非常快,它可以在入门级Linux机箱中获得110000 SET /秒,81000 GET /秒.检查基准.如果沿着那条路走下去,我有一个可以简化访问的c#redis客户端.
为了使用共享内存,您需要一个在同一进程中"始终运行"的应用程序服务器.在这些情况下,您可以使用静态类或共享的"应用程序"缓存.最流行的"应用程序服务器"是任何Java servlet容器(例如Tomcat)或ASP.NET.
现在转移到访问内存而不是磁盘将产生显着的性能节省,如果这个性能对你很重要,而不是我认为你不想考虑使用解释性语言.在处理请求,网络IO,解析协议设置工作线程等时总会有开销.决定使用进程外(在同一主机上)共享内存存储器与内存存储器相比可忽略不计比较完成请求所需的总时间.