【问题标题】:Is perl the fastest way to write a high performance page?perl 是编写高性能页面的最快方法吗?
【发布时间】:2011-04-08 09:40:16
【问题描述】:

我受到了 Slashdot 的启发,听说它使用非常有限的服务器来支持大量用户快速响应。还有一个叫slashcode的网站,不知道slashdot有没有用它的源码。

我想知道 Perl 是否是编写高性能网页的最佳选择?我知道使用 Apache 或 IIS 会产生很多开销?

有什么想法、书籍、论文、教程吗?

【问题讨论】:

  • 一个好的架构比语言更重要。这包括缓存、数据库、文件存储等其他层。
  • 是的,slashcode 是 Slashdot 后面的代码。它使用 Apache+mod_perl。

标签: performance perl webserver


【解决方案1】:

我将假设“高性能”是指生成一个页面所需的实时时间以及它可以同时提供多少服务。

编程语言不像您的服务器和算法那么重要。您可能想查看The C10k Problem,它是一系列新技术和技术改进,旨在允许单个 Web 服务器同时处理超过 10,000 个并发连接。像 Nginxlighttpd 网络服务器和 varnish 缓存之类的东西来自这个项目。

使用非常轻量级、非常快速、非常模块化的 Web 服务器(不是 Apache 和 IIS)以及在其前面的非常轻量级、非常快的缓存来避免必须处理两次相同的事情,从而获得巨大的胜利。对于一个高并发的服务器,即使缓存几秒钟也可以为你节省成百上千的进程。通过将静态页面分割成一系列 AJAX 请求,您可以缓存更多的静态位和片段,而不受频繁更改的位的影响。

不要使用将您的程序嵌入 Web 服务器的 mod_blah,而是使用将您的程序放入自己的小型应用程序服务器的 FastCGI 或类似方法。这允许它们独立于 Web 服务器运行,可能在远程机器上并具有负载平衡。这让您可以轻松扩展处理能力。

最终,您将对应用程序代码中真正重要的部分进行微优化,使其达到语言的重要性,但您可以专注于真正重要的部分,而不必仅仅根据原始性能来完成整个项目。

【讨论】:

    【解决方案2】:

    无论您的代码有多快,在某些时候瓶颈将不再是您的代码,而是开始成为网络服务器本身。

    【讨论】:

      【解决方案3】:

      只要您不使用 CGI 界面 [1] 与 Web 服务器通信,在 99% 的情况下,该语言不会对性能产生明显影响。例外情况是您正在执行繁重的后端处理,而不是简单地从数据库中抓取一些东西,轻轻按摩它,然后将其发送给用户 - 如果您正在做那种事情,那么您如果可能的话,最好异步执行它并将结果填充到数据库中以便稍后进行轻微按摩和查看。

      原因很简单,网络连接和数据传输时间将比程序的执行时间长得多,这甚至都不好笑。如果与服务器建立网络连接并在每个方向进行数据传输需要 2 秒,那么没人会关心服务器上的处理是在 2 秒的网络活动之上增加 0.1 秒还是 0.2 秒。

      [1] 请注意,我在这里谈论的是普通 CGI“启动一个新进程来服务每个传入请求”模型,不是 Perl CGI 模块 (CGI.pm/use CGI )。有一些方法可以use CGI,同时还可以利用一个长生命周期的进程,该进程在其生命周期内处理多个请求。

      【讨论】:

        【解决方案4】:

        对于高流量应用来说,架构和系统设计比语言选择更重要。

        但是选择一种语言并不是您应该做的第一件事,除非您打算从头开始编写所有内容。

        您应该选择一个工具集。

        如果您想尽快获得一些东西,请查看现有的 Web 应用程序。什么满足您的需求?它的可定制性如何?它是否满足您的性能/可扩展性要求?如果是这样,您使用的语言将是您的应用使用的语言。

        如果您在现有应用程序中找不到合适的匹配项,请查看不同的框架,Catalyst、Rails、Squatting、Camping、Jifty、Django。有a nice list of them on Wikipedia

        您应该能够找到一个可以完成这项工作的框架,其中有很多。挑选一些竞争者,然后选择一个。您使用的语言将是您的框架使用的语言。

        【讨论】:

          【解决方案5】:

          真的没有“高性能页面”这样的东西。这就像问最快的汽车是什么(如果你看够了Top Gear,你就会知道这不是一个简单的答案)。你必须考虑你真正想做的事情(即特定的任务),你必须做什么才能做到这一点,以及哪些工具最适合。

          你打算让很多人做很多小事,还是更少人做真正的大事?这一切会立即发生(即峰值),还是将是持续的需求?您是发回小块数据还是提供非常大的文件?

          假设每个部分都尽可能快。这当然是一个幻想,但无论如何都要考虑一下。现在一切都尽可能快了,根据它们的相对速度对每个部分进行排名。最慢的部分是什么?是磁盘访问吗?网络IO?套接字可用性?

          如果您还没有考虑到这一点,那么除了您的技能之外,该语言可能并没有那么重要。

          那里有很多关于网络性能的书籍。 :)

          【讨论】:

            【解决方案6】:

            serverfault 上的This post 建议您可以将扩展模块写入nginx 以提供动态内容。

            此类模块需要编译为本机机器码,因此很可能比运行 Perl 更快。

            【讨论】:

            • 谢谢,但我不想使用 C/C++ 编写网页,python 可能是首选...看起来 web.py 不错?
            【解决方案7】:

            我认为它不会比 PHP、Python、Ruby、Java 或 C# 等其他常见选择更快。

            【讨论】:

            • mod_perl 允许与 Apache 紧密集成(您的程序成为 Apache 内部的子程序),因此它可能会更快。
            • @Alexandr Ciornii 哇,感谢您的反对。但是,没有证据表明 Perl 在 Apache 上的性能比 PHP、Python、Perl 等更高。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多