Plone4.1 - 还能更快些吗?

来源:互联网 发布:直销软件52loser 编辑:程序博客网 时间:2024/04/30 00:22

原文链接: http://blog.hannosch.eu/2011/04/plone-41-is-it-any-faster.html



Plone4.1已经到了它最后的beta阶段,马上就将最后发布。现在又是时候看看它在性能方面的改进了。

 

Plone4.0我们关注于改进Plone显示速度内存消耗二进制文件的处理。这些改进有利于任何规模的站点。

 

Plone4.1的性能改进中我们有了不同的关注点:索引(catalog)。索引与搜索、内容列表、portlet列表、站点标签、网站地图、引用引擎、UUID查询等n多方面有关。

 

对于中等规模的内容项少于10000的站点,性能问题不大。但是一旦你的站点规模上升到几万甚至上百万的内容项之后,性能开始迅速下降。

 

过去几年中许多公司社区成员已经开始着手解决这个问题。到目前为止这些改进都只以附加产品的形式提供(add-on component),良莠不齐。在Plone4.1中我们将一些稳定的已经过考验的代码集成进了Plone核心。

 

这些改进可以归为两个大的方面:改进索引中数据的存储和优化内部搜索算法。

 

在存储方面我们添加了两个特别的索引类型:一个UUID索引和一个boolean索引。它们将默认生效并且在你升级Plone版本的时候更新你站点中已存在的索引。我们还更新了几乎所有旧索引,以更高效的存储索引数据。减少索引存储所占尺寸并且降低在并行写操作时的冲突错误。

 

在搜索方面最大的改变是引入了查询计划(query plan)。所有的搜索在运行时将收集信息,根据这些信息,后续的搜索将以更优化的方式执行。这个过程是完全透明的,不需要任何配置。你可以在ZMI中通过索引工具提供的报表检查所有的搜索计划和慢查询(slow catalogquery)。

 

这些工作到底对性能有什么改进呢?

 

对于一个小型或者空的Plone站点,上述改进基本上没有导致任何性能提高。好消息是也没有导致任何性能下降。

 

为了清楚说明到底有哪些影响,我将一个大型的真实Plone站点稍作调整,使它分别运行于默认安装的Plone4.0Plone4.1上。真实站点原来已经应用了上面说过的一些改进,我将这些改进一一剔除掉,以获得一个真实的比较。这个站点有差不多250000个内容对象,大多数是已发布的内容。它用了LingualPlone,有许多的portlet列出最近更新的内容和相关内容,所以许多页面都做了很多的索引查询。当每个索引查询都更快一点,积累起来你就可以看到效果了。

 

在下图中我提供了首页(front page)、一个每种语言有4000多条目的新闻存档页、一个普通的页面和它的编辑页的性能对比。

 Plone4.0 4.1性能对比图


 

对于做了多个索引查询或查询基于大量内容的页面我们得到了2-4倍的性能提高。对于一个甚至没有显示导航树的编辑页,改进就少得多。但是仅仅是显示页面顶标签和语言选择就有1.4倍左右的改进。

 

我在自己主频为3GHz和内存为8GBiMac上做的上述测试,数据来自于一个直接的文件存储(file storage)。实际上所有的操作所需数据都来自于内存中的ZODB缓存或内存中的操作系统磁盘缓存。

 

在真实环境下性能改进将更为明显,当你从数据库中读取更少的对象,减少了通过网络对数据库进行实际的读取和对磁盘进行读取之后。你还可以减少ZODB缓存的尺寸而不至于降低性能。由此释放出来的内存可以用来添加更多的Zope实例或者降低运行一个Plone站点所需的硬件投资。

 

当然对于任何真实生产环境的影响将有很大不同。上述数据不反映任何真实的使用情况,因为在大多数情况下访问者都是从反向代理服务器中读取到缓存的内容,而不是直接从Plone读取。随着plone.app.caching被包含进Plone4.1,设置更有效的缓存将变得更为容易。

 

在这个领域我们还有很多的改进可做。但是使用Plone4.1你将可以不再需要任何定制开发即可轻松运行一个包含几万内容项的站点,当然以集群方式部署所需的管理知识还是必要的。

 

 

-------------------------------------------------------

anzsoft        专业Plone/Zope技术及服务提供商

Samespace 智能表单+工作流 快速业务开发平台