Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 我应该使用什么webserver/mod/技术来服务内存中的所有内容?_Windows_Unix_Optimization_Webserver_Lookup Tables - Fatal编程技术网

Windows 我应该使用什么webserver/mod/技术来服务内存中的所有内容?

Windows 我应该使用什么webserver/mod/技术来服务内存中的所有内容?,windows,unix,optimization,webserver,lookup-tables,Windows,Unix,Optimization,Webserver,Lookup Tables,我有很多查找表,我将从中生成我的webresponse 我认为使用Asp.net的IIS使我能够在内存中保留静态可查找表,我可以使用它快速提供我的响应 然而,是否也有非.net解决方案可以做到这一点 我看过fastcgi,但我认为它启动了X个进程,任何人都可以处理Y个请求。但从定义上讲,这些过程是相互屏蔽的。我可以将fastcgi配置为只使用一个进程,但这会影响可伸缩性吗 任何使用PHP或任何其他解释语言的东西都不会飞,因为它也是cgi或fastcgi绑定的,对吗 我知道memcache可能是一

我有很多查找表,我将从中生成我的webresponse

我认为使用Asp.net的IIS使我能够在内存中保留静态可查找表,我可以使用它快速提供我的响应

然而,是否也有非.net解决方案可以做到这一点

我看过fastcgi,但我认为它启动了X个进程,任何人都可以处理Y个请求。但从定义上讲,这些过程是相互屏蔽的。我可以将fastcgi配置为只使用一个进程,但这会影响可伸缩性吗

任何使用PHP或任何其他解释语言的东西都不会飞,因为它也是cgi或fastcgi绑定的,对吗

我知道memcache可能是一种选择,但这需要另一个(本地)套接字连接,我宁愿避免这种连接,因为内存中的一切都会快得多

该解决方案可以在WIndows或Unix下工作。。。这没什么大不了的。唯一重要的是会有很多请求(现在是100/秒,一年内会增长到500/秒),我想减少处理请求所需的Web服务器数量

当前的解决方案是使用PHP和memcache完成的(偶尔会对SQL server后端造成影响)。尽管Apache速度很快(无论如何对于php来说),但当超过50/秒时,它确实存在问题

我在这个问题上悬赏,因为我没有看到足够的回答来做出明智的选择


目前,我正在考虑使用Asp.net或fastcgi与C(++)。

听起来您应该使用内存中的键值数据存储,例如,如果您打算在将来拥有多个web服务器,那么您肯定应该使用集中式内存存储。Redis在这种情况下尤其理想,因为它支持列表、集合和有序集合等高级数据结构。它的速度也相当快,在入门级的Linux系统中,它可以每秒获得110000台,81000台。如果你沿着这条路走,我有一个可以简化访问的方法

为了使用共享内存,您需要在同一进程中“始终运行”的应用程序服务器。在这些情况下,您可以使用静态类或共享的“应用程序”缓存。最流行的“应用服务器”是任何Java servlet容器(如Tomcat)或ASP.NET


现在移动到访问内存而不是磁盘将产生显著的性能节省,如果这个性能对您很重要,那么我认为您不想考虑使用解释语言。在处理请求、网络IO、解析协议设置工作线程等时,总会有开销。决定使用进程外(位于同一主机上)共享内存存储与内存内共享内存存储相比,完成请求所需的总时间可以忽略不计。

首先,让我试着和你一起思考你的直接问题:

-对于您所追求的性能,我认为要求对查找表进行共享内存访问是过分的。例如,memcache开发人员对预期性能的评价是:“在高速网络(或本地访问)的快速机器上,memcache每秒可以轻松处理200000多个请求。”

-您当前可能受到cpu时间的限制,因为您正在动态生成每个页面。如果可能的话:缓存,缓存,缓存!缓存frontpage并每分钟或五分钟重建一次。对于已登录的用户,缓存他们可能在会话中再次访问的特定于用户的页面。例如:对于一个动态页面来说,每秒50个请求并不太糟糕,在一个相当普通的服务器上,varnish这样的反向代理可以每秒服务一个静态页面。我最好的建议是考虑使用or设置反向代理。

-如果您仍然需要动态生成大量页面,请使用a避免每次运行脚本时都必须编译php代码。据维基百科称,这将使性能提高2到10倍。

-mod_php是运行php的最快方式。

-除了使用fastcgi,您还可以编写一个apache模块,并将数据保存在与Web服务器本身共享的内存空间中。这可能非常快。但是,我从来没有听说过有人这样做来提高性能,这是一个非常不灵活的解决方案。

-如果您转向更多的静态内容或采用fastcgi方式:比apache更快。

-还是不够快?例如可以非常快。


第二:你不是第一个遇到这种挑战的人,幸运的是,一些较大的鱼很友善地与我们分享他们的“把戏”。我想这超出了你的问题范围,但看到这些家伙是如何解决他们的问题的,这真的很令人鼓舞,我决定分享我所知道的材料。

请看关于facebook架构的演示文稿,以及关于“构建可扩展的web服务”的演示文稿,其中包含一些关于flickr设计的说明。

此外,facebook还列出了他们开发和贡献的一个网站,此外,他们还分享了自己网站上的笔记。他们的一些性能改进技巧:
-一些性能改进的自定义设置,如udp上的memcache。
-是一个php-to-optimized-c++编译器。Facebook工程师声称cpu使用率降低了50%。

-使用“更快的语言”实现计算密集型服务,并使用将所有内容连接在一起。

@Tumblow:感谢您的想法和评论。我提供的东西不是网页,而是类似于广告的东西。它非常轻量级,但不可能使用代理缓存。我调查了facebook和他们的所有工具,他们肯定就在最前线做最先进的东西。我想你对memcache有一点看法。如果它能够处理本地网络上的200k连接,那么它肯定能够处理我们从外部世界获得的预期流量。这