14
DRUPAL 高性能网站最佳实践 Drupal性能优化经验分享 赵高欣 (Robbin Zhao) [email protected] [email protected] Saturday, 15 October, 11

Drupal高性能网站架构分享-Drupal Beijing Meetup

Embed Size (px)

DESCRIPTION

Drupal 北京聚会slides 之 Drupal高性能网站架构。 At Drupal meetup in Beijing. Drupal Performance Optimizations 原始文件可以从 http://www.drupal001.com 下载 By Robbin Zhao (赵高欣)

Citation preview

Page 1: Drupal高性能网站架构分享-Drupal Beijing Meetup

DRUPAL高性能网站最佳实践Drupal性能优化经验分享

赵高欣 (Robbin Zhao)[email protected]@zinch.com

Saturday, 15 October, 11

Page 2: Drupal高性能网站架构分享-Drupal Beijing Meetup

内容纲要⼀一. 使用运行最快的语言二. 使用最高效的PHP三. 使用最快的Drupal发行版四. 让数据都在内存中处理五. 让距离不再遥远六. 保证数据的合理性七. Drupal性能相关模块八. 展望、问题及讨论

Saturday, 15 October, 11

Page 3: Drupal高性能网站架构分享-Drupal Beijing Meetup

使用运行最快的语言

从图中我们可以看到,不同的语言,运行速度差异是非常大的。

???

语言跟Drupal有什么关系呢?

Let’s continue ...

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 4: Drupal高性能网站架构分享-Drupal Beijing Meetup

使用运行最快的语言

Web开发中必须的语言 -》 HTML

HTML是WEB开发中最快的语言,没有之一!

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 5: Drupal高性能网站架构分享-Drupal Beijing Meetup

使用Boost静态化你的Drupal站点!Boost模块经过稍微调整和修改。1. 匿名用户使用静态HTML页面2. 设置某些角色(普通认证用户)也使用静态HTML缓存。

对于一个普通网站,90%以上的都属于普通认证用户和匿名用户,因此,经过这样修改可以大大提高性能。

使用运行最快的语言Web开发中尽量缓存静态页面,尽量把页面动态的部分独立处理,用ajax/iframe调用,整个页面是静态页面的,少量动态用ajax刷新。国内的QQ、SINA,已及Google等网站都采用这种技术。

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 6: Drupal高性能网站架构分享-Drupal Beijing Meetup

用Boost模块配合NFS网站架构图

详情参阅:Drupal性能优化之-将Boost模块用到极致http://www.drupal001.com/2011/09/drupal-boost-tips/

使用运行最快的语言

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 7: Drupal高性能网站架构分享-Drupal Beijing Meetup

使用最高效的PHPPHP面临的问题

1. PHP本身的速度比较慢(参见前面插图)2. PHP框架,Drupal/Zend等,加载相当多的PHP文件,降低执行速度。(每次请求都要加载)

!!!OPCODE推荐使用eAccelerator。注意:APC的某个版本在NFS环境下有bug,不能正确缓存。

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 8: Drupal高性能网站架构分享-Drupal Beijing Meetup

使用最快的DRUPAL发行版Drupal本身性能问题

1. 本身的一些代码性能不高2. SQL没有优化、数据库不支持主从以及Views使用中的一些问题等。

官方网站 http://pressflow.org/

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 9: Drupal高性能网站架构分享-Drupal Beijing Meetup

让数据都在内存中处理能在内存中处理的决不能放到外存中!! 使用缓存!

⼀一般情况下,我们使用memcache。大型站点,使用分布式memcache,并且memcache常常和Application不在同⼀一台服务器上面。

对于大型Drupal站点,这里会有⼀一个性能问题:内部网络IO。

由于Drupal的某些缓存比较大,比如theme-registry, content-type-info, locale翻译信息,对于⼀一个较复杂的站点,这几个缓存加起来至少1M以上,大到3-5M。如果⼀一个request需要3M的缓存,那么1000request需要3G的流量,这样即便是内网的IO,也会造成很大的瓶颈。

可以先把这样的数据缓存在本机的内存/硬盘中,减少网络请求。本机内存允许的话,将目录挂载到内存上。参考文章:http://www.drupal001.com/2011/10/drupal-custom-cache-tips/

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 10: Drupal高性能网站架构分享-Drupal Beijing Meetup

让距离不再遥远

请使用CDN加速你的网站。

Drupal CDN模块 http://www.drupal.org/project/cdn

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 11: Drupal高性能网站架构分享-Drupal Beijing Meetup

保证数据的合理性

数据最重要!

(大型站点)1. 不清楚的模块谨慎使用。(content_profile)2. 多一些custom模块。(脱离node)3. CCK字段不要共享。4. ...

content-profile模块使用node作为user的profile,把user和node关联起来,数据库结构及其不合理。查询慢,不能分离user到单独服务器。cck字段共享,drupal会把这个字段单独拿出来,做一个独立到表。比较慢,也不合理。

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 12: Drupal高性能网站架构分享-Drupal Beijing Meetup

DRUPAL性能相关模块模块 描述

Boost 静态缓存

Varnish 反向代理、缓存。

Javascript Aggregator Javascript加载。

Memcache API and Integration$ Memcache集成。

Block Cache Block缓存。

CacheExclude$ 缓存策略。

High-performance JavaScript callback handler Ajax callback处理。

Apache Solr 全文搜索。

No Anonymous Users 匿名用户session处理。

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11

Page 13: Drupal高性能网站架构分享-Drupal Beijing Meetup

展望、问题、 讨论关于Drupal性能的思考:

1. 模块/代码动态加载。 比如:autoload,函数的命名必须和模块一致。2. node/cck用独立的表处理每中内容类型。 横向扩展表,数据共享,node类型共享。3. PHP on jvm || PHP c/c++ Quercus, HipHop(Facebook)4. Drupal7 CCK性能问题 每一个独立字段,单独分配一张数据库表,性能如何?

Drupal与高性能网站架构 http://www.drupal001.com

Saturday, 15 October, 11