我们是否应该为高可伸缩性的网站使用PHP框架?

8
我们正准备建立一个潜在高伸缩性的网站。如果规模扩大,我们希望为此做好准备!我们决定使用PHP、Apache和MySQL。我们应该使用某种PHP框架(如PHPulse、CodeIgniter、CakePHP、Zend等),还是从头开始构建更好? 这个网站的性质类似于Facebook,但主要是文本数据(不是很多图片、视频)。该网站将托管在云端。
你有什么推荐吗?
谢谢...

我不确定你的意思是什么。问题更多地是指框架在可扩展性方面是否会成为问题(而不是是否有帮助)。是否有专门用于可扩展性的框架? - Cartoonle
据我所知,没有。没有任何主要的框架支持分布式代码或高性能查询(如果您定义您的意图而不是让我们猜测,那也会有所帮助)。另请参见以前关于此问题的混乱讨论http://stackoverflow.com/questions/132056/what-is-the-best-php-mvc-framework-for-scalability。 - mario
为什么还要使用PHP呢?它已经逐渐退出历史舞台了。其他编程语言,如Python、Ruby和C#,拥有更好的网站开发工具。 - Benbob
6个回答

7
这个问题已经被问了很多次。普遍的共识是要做你能做的事情。不要担心从一开始就使它过于可扩展,只需稍微考虑一下即可。试图从一开始就构建过于可扩展的系统会让你筋疲力尽,最终可能会放弃。
如果由于巨大的流行度而开始出现问题,那太好了!这意味着你已经足够受欢迎,并有足够的收入来开始担心支付更昂贵的托管和更高端的编程/数据库框架和引擎。

到目前为止,我还没有使用过任何框架(所有东西都是手工制作的)。但这个网站必须无瑕疵(至少我希望能接近这个标准: ))。这是一个大项目,团队很小,时间有限,所以我认为这次实施框架是一个好主意。它带来了一些基于良好实践的概念,因此我不必处理它们。稍后当页面增长时,如果需要,我可以用更合适的概念替换它们。 - Cartoonle
1
通过框架,我指的是PHP并且跨越到预编译的DLL,例如eBay,而通过引擎,我指的是MYSQL。巨大的网站通常不使用MYSQL,而是使用高端性能为基础的数据库引擎。 - Craig White

3

是的,我在highscalability.com上读到了那些“庞大的网站架构”,但我认为在这个阶段以这种方式开始是不可能的。在这个阶段,我们应该建立一个更简单的架构,但保持开放的大门。这样我们就可以逐步优化它。 - Cartoonle
你自己编写的代码,你就要对它负责。你是否期望编写自己的库、为其编写文档并维护它们?框架让你专注于业务逻辑,忘记其他繁琐的事情。当然,有些框架和模板语言很糟糕。但是,有时候使用框架可以获得更好的工具。良好的文档、集成的单元测试、内置的缓存和表单库以及一个社区可以帮助你,因为你的代码将在某种程度上被标准化。编写自己的框架只会浪费时间。我相信 Facebook 没有过早地进行优化。 - Benbob

1

如果你知道你很快就需要扩展它,那么最好使用现有的经过验证的框架,而不是从头开始构建自己的框架。这并不是为了可扩展性,而是为了简化以后的工作,并更有信心地确保样板代码足够好。

另一方面,如果你从未使用过任何提到的框架,你可能需要权衡一下需要克服初始学习曲线所需的时间。


实现一个框架不应该是一个大问题...或者说我错过了什么吗?我已经写了很多代码,从来没有害怕使用/学习新东西。 - Cartoonle
@Cartoonle:如果你感觉能够胜任,那就不必担心。我最喜欢的事情之一就是从头开始编写API或框架,而除此之外的工作基本上都是修复和更新遗留代码。但是,避免编写某些已经在知名框架中达到一定成熟度的任务也有好处。并且,在某个时刻当你需要快速实现某个功能时,你可以受益于使用现有的工具包、插件和其他公开可用的东西。 - vgru

1

在确保领域层与其他代码的耦合度尽可能小的同时,比平时投入更多的精力-这样你应该能够为其他层识别的问题留下改变的空间。

可以使用框架来快速启动应用程序,但要注意不要使用它们自己的CRUD实用程序(例如CI)。

如果决定使用ORM解决方案,则最好选择一个可以与许多框架配合使用的方案。


我已经决定去无状态化... - Cartoonle
抱歉,我没有仔细阅读您的帖子 - 所以我猜这只是选择一个提供最佳云存储钩子的框架的问题。 - Cups

0
如果你从头开始构建每一件事情,那么肯定需要时间,但只有你才会知道代码的内部逻辑。相反,如果你使用框架,你将获得快速开发,但在这种情况下,你正在使用任何人都可以打开的代码构建你的网站,这意味着更容易被黑客攻击。每种方法都有其优点和缺点。无论如何,你可以查看PHP最好的框架Top 10 frame works of PHP。而我会推荐Code Igniter

关于安全性,通常是相反的。使用模糊不清的安全性被认为比使用公开可用的解决方案更弱。 - vgru
@Groo,但事实是,所有开源CMS(Joomla、Drupal)、开源论坛(SMF)比起从头开始实现自己的代码(经过充分测试)更容易被黑客攻击。 - Muhammad Ummar
PHPulse呢?它自称是最快的…… - Cartoonle
+1,Ummar 说得很好,开源意味着容易被黑客攻击。 - Imran Naqvi

-1

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

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

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

如果你想要一个真正可扩展的Web应用程序,你将不得不走出Apache、MySQL的范围,并开始使用像Nginx和非关系型数据库这样的工具。

现在,最好的做法是不要过早地担心问题。只需确保您选择的任何框架都是松散耦合的,以便您可以执行诸如切换数据库层之类的操作。像瘟疫一样避免使用CodeIgniter,它根本不是模块化的,也没有ORM和非常差的表单库。我建议使用Django(Python),有许多公司提供云托管服务。我见过一家商店从PHP切换到Python,他们非常喜欢它。在选择托管时,不要认为必须锁定在PHP上。

编辑,回复Cartoonle Django。但如果你真的想要PHP,也许Symfony,但它以速度慢而闻名。Kohana就像CI一样,但更加社区驱动和面向对象,因此一些CodeIgniter的主要缺陷早在Kohana中就得到了解决。我也听说过Cake的好处,但从未尝试过。至于CodeIgniter,是的,很多人喜欢它,它很简单,但为了丑陋的快捷方式而放弃了很多好的软件模式。我曾经与它一起工作了一年,过了一段时间后,团队中的每个人都同意我们太多地重新发明轮子,需要其他东西。当你使用它一段时间后,问题开始浮出水面。我们辩论了一段时间,最终选择了Django。这是一个艰难的决定,但通过更高的生产力得到了回报。此外,Google也在使用它,我认为这说明了很多问题。

Python是计算机科学101课程和专业领域中使用的仅有语言之一。Python的目标之一是使计算机科学教学变得容易。它并不可怕,打开终端,输入python,然后尝试一下。还有很多好用的工具,比如pip,类似于PHP-pear,但也可以与git、gzip、hg以及其他格式一起使用,除了美妙的Python包存储库。

此外,还有大量的Python包可供使用,我在PHP中几乎看不到这种情况。http://djangopackages.com/

至少通过完成教程来给它一个机会,只需要大约2个小时。它带有内置的Web服务器,因此除了Python本身之外,无需设置任何内容。

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


我听说过Django很不错,但是我以前从未使用过Python,所以它可能不是最适合我的选择。 - Cartoonle
有趣的是你这么讨厌CodeIgniter……很多人都推荐它并且它具备我所需要的一切(我想)。你会推荐哪个PHP框架胜过CodeIgniter? - Cartoonle
请看我上面的回复。基本上,我认为在将 Django 作为 Python 炒作之前,你应该仔细了解它,但我也提供了一些 PHP 的替代方案。 - Benbob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接