对于像 reddit 这样的网站,每个主题都有很多赞成/反对票和很多评论,我应该怎么做?
Lighttpd/Php 还是 Lighttpd/CherryPy/Genshi/SQLAlchemy?
对于数据库,什么会更好/最快的 MySQL(4.1 或 5?)或 PostgreSQL?
我无法回答 MySQL/PostgreSQL 问题,因为我对 Postgres 的经验有限,但我的硕士研究项目是关于使用 CherryPy 的高性能网站,我认为如果你使用 CherryPy 作为你的地点。它可以轻松扩展到商品硬件上的数千个同时用户。
当然,对于 PHP 也可以这样说,我不知道有任何合理的基准来比较 PHP 和 CherryPy 的性能。但是,如果您想知道 CherryPy 是否可以处理每秒大量请求的高流量站点,答案肯定是肯定的。
理想的设置将接近此:
简而言之,nginx是一个快速、轻量级的 webserver/front-proxy,它有一个独特的模块,可以让我们直接从memcached的 RAM 存储中获取数据,而无需访问磁盘或任何动态 webapp。当然,如果请求的 URL 还没有被缓存(或者如果它已经过期),请求会像往常一样继续到 webapp。天才之处在于,当 webapp 生成响应时,它的一个副本会转到 memcached,准备好被重用。
所有这一切不仅完全适用于网页,而且适用于 AJAX 查询/响应。
在文章中,'back' 服务器是 http,并专门讨论 mongrel。如果后面是 FastCGI 和其他(更快?)框架,那就更好了;但它的重要性要小得多,因为 nginx/memcached 团队承担了大部分负载。
请注意,如果您的 AJAX 流量的 url 方案设计良好(最好是 REST,恕我直言),您可以将大部分数据库放在 memcached 中,并且任何 POST(将传递给应用程序)都可以抢先更新缓存。
在数据库问题上,我会说 PostgreSQL 比 MySQL 具有更好的扩展性和更好的数据完整性。对于小型站点,MySQL 可能会更快,但据我所知,随着数据库大小的增长,它会显着减慢。(注意:我从未将 MySQL 用于大型数据库,因此您可能应该对它的可扩展性获得第二意见。)但是 PostgreSQL 的扩展性肯定很好,并且对于高流量站点来说是一个不错的选择。
将需要更多数据。Jeff 有几篇关于相同问题的文章,答案是等到遇到性能问题。
首先 - 谁在托管,他们有什么可用的?您的内部人才技能组合是什么?你打算聘请外部公司吗?他们推荐什么?带有愿意学习新框架的团队的全新项目?
第二件事是做一些模型——界面是如何工作的。它需要加载和持久化哪些数据?这个想法是保持网络和数据库之间的流量朝下。例如,没有大量查询的健谈页面。等等
一旦您对数据需求和流程有了更好的了解 - 然后进行数据库设计。有很多规则要遵循,但更好的规则之一是遵循规范化规则(是的,我是数据库专家,为什么?)
现在您已经构建了几个页面 - 运行您的测试。你有问题吗?是的,现在看看它是什么。页面服务或数据库拉动?衡量然后选择行动方案。
我会选择 nginx + php + xcache + postgresql