【问题标题】:Using Zend Framework for highload projects将 Zend 框架用于高负载项目
【发布时间】:2011-04-16 05:16:49
【问题描述】:

Zend Framework 是一个很好的框架,但不是很快。 您能否判断是否值得将 Zend Framework 用于高负载项目,例如,可以包含大约十或十万用户的电子邮件营销服务? 使用 Zend Framework 是否可以达到可接受的性能? 有没有人有这样的经历? 非常感谢。

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    就我所见,Zend Framework 性能的权威性辩护和性能优化建议来自 Padraic Brady:

    PHP Framework Benchmarks: Entertaining But Ultimately Useless

    特别注意他对性能优化的四项建议:

    1. 不要使用 Zend_Application。虽然 Zend_App 非常适合在标准化结构中创建一致的复杂引导程序,但它不会对基线性能没有显着的性能影响。更直接的引导程序(在 Zend_App 到来之前是 ZF 的典型方式)要快得多,也可以在没有配置文件的情况下完成。

    2. 跳过使用 ViewRenderer 插件。如果没有 ViewRenderer,您需要手动配置 Zend_View 并将 render() 调用添加到控制器。这实际上非常简单,而且速度相当快 - 快速从来都不是 ViewRenderer 基因的一部分。

    3. 使用自动加载。从框架库中剥离 require_once 调用,以便忽略不需要的文件。将 Zend_Loader_Autoloader 的使用替换为不那么疯狂的自动加载器功能。事实上,祈祷 Zend_Loader 从未被使用过——它执行了很多文件操作,迄今为止,我从未向我解释过这些操作有任何价值。

    4. 预加载所有内容(Symfony 2 Preview 可以!)。它会为您购买一些性能 cookie 并平衡速度基线。使用简单的预加载脚本并不难。

    【讨论】:

    • 您能否指定如何在不使用 Zend_Application 的情况下定义“更直接的引导程序”?谢谢
    • 什么是预加载?能举个例子吗?
    • Padraic 帖子中的 cmets 建议对于常用的类,创建基于类映射的自动加载器,而不是基于文件的自动加载器。更好的是,将所有常用类聚合到一个文件中并一次加载它们,从而在下游使用这些类时无需自动加载。
    【解决方案2】:

    我们已经在很多高流量网站中使用了 ZF,到目前为止我们还没有遇到任何问题。不过,我们确实必须跳过一些低悬的箍。

    一些建议:

    • 使用 Zend_Queue 帮助批量发送邮件
    • 尽可能使用 Zend_Cache
    • 使用插件加载器缓存
    • 剥离 require_once 调用以支持自动加载
    • 删除不需要的组件。 (如建议的那样,您不需要 CLI / 邮件的 MVC 堆栈)
    • 我们选择 Sphinx 来支持 Zend_Search_Lucene(极大的性能提升)

    我们的底线是:开发时间比硬件昂贵得多。代码的灵活性和更高的重用性完全胜过我们必须处理的任何轻微的性能损失。在大多数情况下,性能开销是非常固定的。

    【讨论】:

      【解决方案3】:

      你问:

      是否有可能使用 Zend Framework 获得可接受的性能?有没有人有这样的经历?

      是的,我曾使用过拥有数百万用户的网站。但是您确实需要使用技术来处理高负载。缓存等...

      CDN 可以提供很大帮助。考虑使用云进行开发。开始使用 Amazon 可能会很痛苦,但如果需要,它可以帮助您扩展。

      我想我的意思是,该框架可能会降低您的性能,但有助于使维护成为可能并更快地构建它(一旦您克服了学习曲线)。然后,您必须评估需要采取哪些措施来提高性能(尽管从一开始就计划明显的问题会很有帮助)。

      【讨论】:

      • 感谢您的回复。我们正在尝试做的应用程序将处理数万甚至数十万用户。它将通过 SAAS 进行电子邮件营销。
      • 你觉得框架的选择是否很关键?
      • 在我看来,数据库和文件系统将成为瓶颈。与我一起工作的人怀疑 Zend 框架对于高负载项目是否足够好,并建议使用 Yii 或类似的东西。在我看来,框架对系统性能的影响并不大。但也许我错了。
      • 我们也将使用 CDN、云、缓存。
      • 听起来您将面临的最大问题将是一次发送所有这些电子邮件。您将不得不使用排队和可能的 cron 来一次处理 X 封电子邮件。 Zend Framework 不会减慢您的速度。您为访问者使用 MVC 堆栈。我编写了自己的系统来加载使用 cron 时需要的 Zend 部分,而不是整个堆栈。如果你雇佣了合适的人,Zend Framework 会很好用。听起来你和你一起工作的人都有使用 Yii 的经验。虽然我不同意他们关于 ZF 的说法,但请按照他们喜欢的方式工作。
      【解决方案4】:

      我知道有几家公司在高性能/高负载场景中使用采埃孚。我不知道哪些我可以说,哪些我不能说,但其中一些是必须处理流行电视节目的媒体公司。其他人处理现场体育赛事。其他是需要为内部组织服务的价值数十亿美元的公司。因此,许多运行高负载站点的公司都在使用 ZF。我们的一个案例研究是 Fox Interactive (http://framework.zend.com/about/casestudies),我知道还有其他几个客户将它用于高性能网站。

      Zend Framework MVC 开箱即用,速度很快。我的博客在没有缓存的情况下大约 100 毫秒后返回,并且在我的首页上发生了相当多的事情。我可能会通过一些内部缓存将其降至 50 毫秒(整页缓存可以将其降至个位数毫秒,但不会触及 ZF)。

      【讨论】:

        【解决方案5】:

        赞同乔的回答。我还看到 ZF 部署在处理数百万个请求的几个站点上,但尚未遇到问题。在处理如此大量的流量时,最好使用框架之外的其他策略,包括但不限于缓存和使用 CDN。

        我发现大多数框架会为每个请求调用或创建许多类实例,我认为这就是导致人们说框架 X 很慢而没有任何实际经验的原因。使用加速器和缓存可以轻松减轻您在那里受到的任何影响。

        如果您已经雇佣了一个开发人员团队,我建议您使用他们觉得最舒服和最有经验的东西。最好的情况是他们能够针对该框架调整代码。

        【讨论】:

          【解决方案6】:

          很多框架,实际上是任何框架,都用于构建和管理项目开发,但生成的项目“只是”php、html、css 等,与任何其他 php 网站相同。那么你有什么证据,这是针对其他框架和非框架构建站点的真实时间,而不是轶事证据,证明 Zend 项目站点很慢。

          编辑——下面的答案—— 我不认为框架使用的结构会损害性能。可能更多的是PHP是否可以接受的问题,然后是网站设计和加载优化说JavaScript等增加了多少“开销”。我想使用Yui指南来缩小JavaScript和CSS并将它们加载到正确的顺序并确保 PHP 代码高效会有所帮助。您还可以使用其他标准的东西,例如 DB Caching 和 Zend Accelerator 来加快速度。需要注意的一件事是数据库连接。使用 ORM 层可能会产生影响。

          但是回到关于框架的原始问题,我认为这类似于询问使用 Eclipse 或 Textmate 是否会影响生成网站的速度。

          【讨论】:

          • 您认为使用 Zend Framework 可以为此类项目实现可接受的性能吗?
          • 我并没有说框架不好,相反我认为使用框架非常有用。我的意思是具体的框架。我想知道它是否值得在高负载项目中使用。
          • Zend Framework 对我来说似乎是一个不错的框架,不知道性能如何。
          • 可以,但是没有好的通用框架。有些工具在某些情况下更有用,而在其他情况下则不可接受。我想也许有一些关于使用框架进行高负载应用程序的建议。可能有人使用 Zend 框架进行高负载项目,如果有的话,可以谈谈针对 Zend 框架进行优化的方法。
          猜你喜欢
          • 2011-08-21
          • 1970-01-01
          • 2013-07-10
          • 2014-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-03
          • 2014-08-04
          相关资源
          最近更新 更多