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