我们应该为一个高度可扩展的网站使用 PHP 框架吗? [关闭]

Posted

技术标签:

【中文标题】我们应该为一个高度可扩展的网站使用 PHP 框架吗? [关闭]【英文标题】:Should we use PHP framework for a high scalable web site? [closed] 【发布时间】:2011-08-24 17:37:11 【问题描述】:

我们正在准备建立一个具有高规模潜力的网站。如果规模来了,我们要做好准备!我们决定使用 php、Apache 和 mysql。我们应该使用某种 PHP 框架(PHPulse、CodeIgniter、CakePHP、Zend,...),还是从头开始构建一切更好? 网站的性质将类似于 Facebook,但主要是文本数据(图像、视频不多)。网站将托管在云端。

你会推荐什么?

问候...

【问题讨论】:

我不确定你的意思是什么。这个问题更像是该框架在可扩展性方面是否存在问题。 (如果有帮助的话)。是否有专门用于可扩展性的框架? 我不知道。没有一个主要框架可以帮助,例如分布式代码或高性能查询(如果您定义您的意图而不是让我们猜测,也会有所帮助)。另请参阅之前关于 ***.com/questions/132056/… 的 lari fari 讨论 为什么还要麻烦 PHP。它在出去的路上。 Python、Ruby、C# 等其他语言有更好的网站开发工具。 【参考方案1】:

这个问题已经被问过很多次了。普遍的共识是做你能做的。不要担心从一开始就让它变得太可扩展,只要稍微记住它。从一开始就尝试构建过于可扩展的内容会让人筋疲力尽,而且您很可能会放弃。

如果您确实因为大受欢迎而开始遇到问题,那就太好了!然后,您就足够受欢迎,并有望赚取足够的收入,开始不必担心为更昂贵的托管和更高端的编程/数据库框架和引擎付费。

【讨论】:

到目前为止我还没有使用过任何框架(一切都是手工制作的)。但是这个网站真的必须完美无瑕(至少我想接近那个:))。这是一个大项目,团队小,时间有限,所以我认为这次实施框架会是个好主意。它带来了一些基于良好实践的概念,因此我不必处理它们。稍后当页面增长时,如果需要,我可以用更合适的概念替换这些概念。 通过框架,我指的是 PHP,并转而使用预编译的 DLL,例如 eBay,通过引擎,我指的是 MYSQL。大型网站通常不使用 MYSQL,而是使用基于高端性能的数据库引擎。【参考方案2】:

如果您知道很快需要对其进行扩展,那么最好使用现有的经过验证的框架,而不是从头开始构建自己的框架。与其说是可扩展性,倒不如说是为了简化您以后的工作,并对样板代码功能足够好更有信心。

另一方面,如果您从未使用过任何上述框架,您可能会考虑权衡您需要超过初始学习曲线的时间。

【讨论】:

实现一个框架应该不是那么大的问题......或者?我错过了什么吗?我身后有相当多的代码行,而且我从不害怕使用/学习新东西。 @Cartoonle:如果你愿意,这不是问题。没有什么比从头开始编写 API 或框架更让我开心的了,除此之外的任何事情基本上都是修复和更新遗留代码。但是避免对一些在众所周知的框架中已经达到一定成熟度的任务进行编码是有好处的。在某些时候,当您快速需要某个功能时,您可以从使用现有工具包、插件和其他公开可用的东西中受益。【参考方案3】:

如果你从头开始构建每一个东西,那么肯定需要时间,但只有你知道代码的内部逻辑。相反,如果您使用框架,您将获得快速开发,但在这种情况下,您正在使用对任何人开放的代码创建您的网站,这意味着更多的机会被黑客入侵。每种方法都有自己的优点和缺点。无论如何,您可以查看 php Top 10 frame works of PHP 的最佳框架。我会推荐Code Igniter

【讨论】:

关于安全性,通常是完全相反的。隐蔽性的安全性被认为比使用公开可用的解决方案要弱。 @Groo,但事实上,所有开源 CMS(Joomla、drupal)、开源论坛(SMF)对黑客来说都更开放,而不是你自己实现代码(经过全面测试)从头开始。 PHPulse 怎么样?它称自己是最快的…… +1,Ummar 的优点是开源对黑客开放。【参考方案4】:

比平时付出更多努力,确保您的域层与其余代码尽可能松散耦合 - 这样,如果您发现其他层存在问题,您应该能够敞开大门进行更改。

一定要使用框架来启动和运行,但要小心使用他们自己的 CRUD 实用程序(CI,我在看着你)。

如果您决定要使用 ORM 解决方案,那么也许可以选择一个可以很好地与许多框架配合使用的解决方案。

【讨论】:

我已经决定去无国籍... 抱歉,我没有正确阅读您的帖子 - 所以我想这是选择一个能够提供最佳云存储挂钩的框架的问题。【参考方案5】:

从头开始构建它。控制每一位有助于优化。 Facebook 甚至控制了它的 php 编译器:http://developers.facebook.com/blog/post/358/

不要使用框架,因为 PHP 已经是框架和模板引擎:http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

使用一些缓存库,例如 memcached。我不确定你是否可以在云上使用它,或者云可能会提供自己的缓存系统。

【讨论】:

是的,我在 highscalability.com 上读过那些“巨大的网站架构”,但我认为在这个阶段以这种方式开始是不可能的。在这个阶段,我们可能应该构建一个更简单的架构,但要敞开大门。所以我们以后可以一步步优化。 你创造它,你拥有它。您是否希望编写自己的库、记录它们维护它们。一个框架可以让你完全专注于业务逻辑而忘记其他的废话。当然,周围有一些糟糕的框架和模板语言。但有时你确实会通过框架获得更好的工具。良好的文档、集成的单元测试、内置的缓存和表单库,以及可以帮助您的社区,因为您的代码将在某种程度上标准化。编写自己的框架只是浪费时间。我确定 facebook 没有过早优化。【参考方案6】:

我会说不,因为今天有更好的语言。 Python、Ruby 和 C# 具有比 php 更好的命名空间和开发工具。

然而,你真正的问题不是语言。它将是数据库层,因为这将更加集中。您可以使用 memcached 来减少数据库的负载。如果您使用 ORM,请检查它是否具有运行直接查询和运行批量插入或使用联接而不是延迟加载查询来获取相关对象的所有能力。

您还应该使用队列来加快页面加载速度。如果您有可以在页面请求之外完成的缓慢操作,则将它们推入队列并稍后处理它们,可能在不同的服务器上。电子邮件和图像大小调整就是一个很好的例子。

如果您想要一个真正可扩展的 Web 应用程序,您将不得不跳出 Apache、MySQL 泡沫,开始使用 nginx 和非关系数据库等工具。

目前,最好的办法是在问题出现之前不要过分担心。只需确保您选择的任何框架都是松散耦合的,这样您就可以执行诸如切换数据库层之类的操作。避免像瘟疫一样的 codeigniter,它根本不是模块化的,没有 ORM 和一个非常糟糕的表单库。我会推荐 Django(python),有很多公司为它做云托管。我见过一家商店从 PHP 切换到 Python,他们最终非常喜欢它。不要以为您必须被锁定在 PHP 中,尤其是在您选择托管时。

编辑、回复 Cartoonle 姜戈。但如果你真的想要 PHP,也许是 Symfony,但它以速度慢着称。 Kohana 与 CI 类似,但更多的是社区驱动和 OOP,因此 codeigniter 的一些主要缺陷很早就在 kohana 中得到了解决。我也听说过关于蛋糕的好消息,但我自己从未尝过。至于 codeigniter,是的,很多人都喜欢它,它很简单,但缺乏很多好的软件模式,而支持丑陋的快捷方式。我用它工作了一年,一段时间后,团队中的每个人都同意我们重新发明***太多了,需要其他东西。当您使用它一段时间后,问题就会开始冒泡。我们争论了一会儿,最终最终还是选择了 Django。这是一个艰难的决定,但以更高的生产力得到了回报。加上谷歌使用它,我认为这说明了很多。

说真的,python 是 comp sci 101 课程和专业中使用的唯一语言之一。 python 的目标之一是让 comp sci 的教学变得容易。没那么可怕,打开一个终端,输入python 然后玩一玩。它周围也有很多不错的工具,比如 pip,它类似于 PHP-pear,但也适用于 git、gzip、hg 和许多其他格式,除了精彩的 python 包存储库。 它周围还有一堆包,我真的看不到 PHP 那么多。 http://djangopackages.com/

至少给它一个机会做教程,这需要大约 2 个小时。它带有一个内置的网络服务器,所以除了 python 本身没有什么需要设置的。

http://docs.djangoproject.com/en/1.3/intro/overview/

【讨论】:

我听说过关于 Django 的好消息,但我以前从未使用过 Pyton,所以它可能不是我的最佳选择。 有趣的是你这么讨厌 CodeIgniter ......很多人都在推荐它,它有我需要的一切(我认为)。除了 CodeIgniter,你会推荐哪个 PHP 框架? 见我上面的回复。基本上我认为你应该在将 django 视为 python 炒作之前正确检查它,但我也提供了一些 PHP 替代品。

以上是关于我们应该为一个高度可扩展的网站使用 PHP 框架吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

应用程序的最佳 PHP 框架 [关闭]

swoole是啥意思

可扩展,低开销,高性能的Java持久性框架

如何扩展 Yii 框架类以及放置文件的位置

PHP的Mhash扩展函数的学习

我应该将 AngularJS 与 PHP 框架混合使用吗? [关闭]