代码之家  ›  专栏  ›  技术社区  ›  Toad

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

  •  4
  • Toad  · 技术社区  · 14 年前

    我有很多lookuptables,从中我将生成我的WebResponse。

    我认为使用ASP.NET的IIS可以使我在内存中保持静态可查找性,我可以使用静态可查找性快速提供响应。

    但是,是否也有可以做到这一点的非.NET解决方案?

    我看过fastcgi,但我认为这会启动x进程,任何人都可以处理y请求。但从定义上讲,这些过程是相互屏蔽的。我可以将fastcgi配置为只使用1个进程,但这是否具有可伸缩性?

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

    我理解memcache可能是一个选项,尽管这需要另一个(本地)套接字连接,我宁愿避免这种连接,因为内存中的所有东西都会更快。

    该解决方案可以在Windows或Unix下工作…没关系。唯一重要的是会有很多请求(现在是100/秒,一年内会增长到500/秒),我希望减少处理它所需的WebServer数量。

    当前的解决方案是使用php和memcache完成的(偶尔还会碰到SQL Server后端)。尽管它速度很快(无论如何对于PHP来说),但是当50/秒的时间过去时,Apache会遇到真正的问题。

    我对这个问题很慷慨,因为我没有看到足够的回答做出明智的选择。

    目前,我正在考虑使用C(++)的ASP.NET或FastCGI。

    2 回复  |  直到 14 年前
        1
  •  5
  •   mythz    14 年前

    听起来您应该像 Redis 如果您打算在将来拥有多个Web服务器,那么肯定要使用一个集中的内存存储。Redis在这种情况下尤其理想,因为它支持高级数据结构,如列表、集合和有序集合。它的速度也相当快,在入门级的Linux系统中,它可以获得110000台/秒,81000台/秒。 Check the benchmarks .如果你走那条路,我有 c# redis client 这样可以简化访问。

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

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

        2
  •  1
  •   TinkerTank    14 年前

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

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

    -由于动态生成每个页面,您当前可能受到CPU时间的限制。如果可能:缓存,缓存,缓存!缓存你的FrontPage,每分钟或每五分钟重建一次。对于已登录的用户,缓存他们在会话中可能再次访问的特定于用户的页面。例如:对于动态页面来说,每秒50个请求并不算太糟糕,可以使用反向代理(如Varnish) thousands 在一个相当普通的服务器上,每秒静态页面的数量。我最好的提示是使用 varnish squid .

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

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

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

    -如果您转向更静态的内容或使用fastcgi方式: lighthttpd 比阿帕奇快。

    -还是不够快? in-kernel webservers TUX 可能非常快。


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

    this 关于Facebook架构的演示,以及 this 关于“构建可伸缩的Web服务”的演示文稿,其中包含有关Flickr设计的一些说明。

    此外,Facebook还列出了 impressive toolset 他们已经发展和贡献了,而且,他们在 architecture . 它们的一些性能改进技巧:
    -一些性能改进的自定义 memcache ,例如UDP上的memcache。
    - hiphop 是一个php-to-optimized-c++编译器。Facebook工程师声称CPU使用率降低了50%。
    -以“更快的语言”实现计算密集型服务,并使用 thrift .