在你回答这个问题之前,我从来没有开发出足够流行的东西来获得高服务器负载。把我当作(叹息)一个刚刚降落在地球上的外星人,尽管我知道 PHP 和一些优化技术。
我正在用 PHP 开发一个工具,如果效果好的话,它可以吸引很多用户。然而,虽然我完全有能力开发程序,但在制作可以处理巨大流量的东西时,我几乎一无所知。所以这里有几个问题(也可以随意把这个问题变成一个资源线程)。
目前我计划在 PHP5 中使用 MySQLi 功能。但是,我应该如何设置与用户和内容相关的数据库?我真的 需要 多个数据库吗?目前,一切都混杂在一个数据库中——尽管我一直在考虑将用户数据传播到一个数据库,将实际内容传播到另一个数据库,最后将核心站点内容(模板母版等)传播到另一个数据库。我的理由是,将查询发送到不同的数据库将减轻它们的负载,因为一个数据库 = 3 个负载源。如果它们都在同一台服务器上,这仍然有效吗?
我有一个模板系统,用于构建页面和换出变量。主模板存储在数据库中,每次调用模板时都会调用它的缓存副本(html 文档)。目前我在这些模板中有两种类型的变量——静态变量和动态变量。静态变量通常是诸如页面名称、站点名称之类的东西——这些东西不会经常改变;动态变量是在每次页面加载时发生变化的东西。
我对此的问题:
假设我对不同的文章有评论。哪个是更好的解决方案:每次加载页面时存储简单的评论模板并呈现评论(来自数据库调用)或将评论页面的缓存副本存储为 html 页面 - 每次添加/编辑/删除评论页面被重新缓存。
有没有人有任何关于在 PHP 上运行高负载站点的提示/指针。我很确定这是一种可行的语言——Facebook 和 Yahoo! 给予它很大的优先权 - 但有什么我应该注意的经验吗?
没有两个网站是一样的。你真的需要一个像jmeter和 benchmark 这样的工具来看看你的问题点在哪里。您可以花费大量时间猜测和改进,但在衡量和比较您的更改之前,您不会看到真正的结果。
例如,多年来,MySQL 查询缓存是我们所有性能问题的解决方案。如果您的网站速度很慢,MySQL 专家建议打开查询缓存。事实证明,如果您的写入负载很高,缓存实际上会很严重。如果你在没有测试的情况下打开它,你永远不会知道。
并且不要忘记您从未完成缩放。处理 10req/s 的站点需要更改以支持 1000req/s。如果你足够幸运需要支持 10,000req/s,那么你的架构也可能看起来完全不同。