打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Drupal性能优化相关模块,Memcache
drupal性能问题一直以来都是Drupaler们最大的难题,在平台设计方面,可扩展性和高性能从来都是难以平衡的问题。
drupal平台本身的优劣本文不做讨论,就drupal的性能问题,这里列几个实战总结经验,以供参考。
1. 使用静态页面缓存(Boost模块)
静态页面是最快的,没有之一!
因此静态页面缓存是最佳选择,尽量把页面动态的部分独立处理,用ajax/iframe调用,整个页面是静态页面,部分用ajax刷新(当然用shtml也可以)。 Boost模块经过稍微调整和修改,可以设置某些Roles(比如一般认证用户)也读取静态缓存(apache/nginx的rewrite),并且可以很好的工作在Apache和Nginx上面,并使某些角色,比如管理员,不读取静态页面。对于一个普通网站,90%以上的都属于普通认证用户和匿名用户,因此,经过这样修改可以大大提高性能。
具体如何使用Boost模块已经如何让登录用户也使用Boost模块,可以参考这篇文章,让Drupal/Boost模块发挥到极致
Boost 模块地址http://drupal.org/project/boost
Ajax建议使用drupal的高效Ajax Callback模块High-performance JavaScript callback handler
这里给出了nginx的boost设置文件,仅供参考。
1011121314151617181920212223242526272829303132333435363738394041 ###Nginx-BOOST set $boost ""; set $boost_query "_";  if ( $request_method = GET ) { set $boost G; } if ($http_cookie !~ "DRUPAL_ADMIN") { set $boost "${boost}D"; } if ($query_string = "") { set $boost "${boost}Q"; } if ( -f $document_root/cache/normal/$http_host$request_uri$boost_query$query_string.html ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/normal/$http_host/$request_uri$boost_query$query_string.html break; } if ( -f $document_root/cache/perm/$http_host$request_uri$boost_query$query_string.css ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/perm/$http_host/$request_uri$boost_query$query_string.css break; } if ( -f $document_root/cache/perm/$http_host$request_uri$boost_query$query_string.js ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/perm/$http_host/$request_uri$boost_query$query_string.js break; } ###END-BOOST
2. opcode
Drupal 需要load相当多的PHP文件,所以opcode是必须的,MUST!
实践证明eAccelerator比APC和xCache好一点,注意:APC的某个版本在NFS环境下有bug,不能正确缓存,所以建议使用eAccelerator。
3. Memcache memcache是LAMP平台居家必备的缓存服务器
最好多个memcache集群使用,Memcache可以使用Drupal的Memcache模块,支持多个集成。
注意:当Memcache不在本机,那么需要占用网络带宽,并且Drupal的缓存数据比较大,比如theme信息,node-type信息等,再每页请求都要加载,这样读取cache的流量就非常大。
比如,每次读取cache 500K,那么1千次访问就需要占用流量500M,这个流量相当不小。建议把这部分不经常修改的cache保存在本机某个cache目录下面,可以把cache目录mount到内存上面,这样会大大提高缓存的效率。
memcache模块的主页 http://drupal.org/project/memcache
此外,如果一台主机上有多个memcache实例,参考了网上的一片文章,http://www.sunchis.com/html/db/memcached/2011/0909/361.html
自定义启动和停止的脚本,不必再kill和逐个启动memcache。
50515253545556575859606162636465666768697071727374757677787980818283848586878889#!/bin/sh # # Startup script for the server of memcached # # processname: memcached # pidfile: /etc/memcached/memcached.pid # logfile: /etc/memcached/memcached_log.txt # memcached_home: /etc/memcached # chkconfig: 35 21 79 # description: Start and stop memcached Service  MEMCACHED_HOME=/etc/memcached export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib  # Source function library . /etc/rc.d/init.d/functions  RETVAL=0  prog="memcached" basedir=/etc/memcached cmd=${basedir}/bin/memcached  # 绑定侦听的IP地址 ipaddr=`/sbin/ifconfig eth0|sed -n '2p'|awk '{print $2}'|cut -c 6-30`  # 设置memcached启动参数 port=11210 # 服务端口基数,使用11210 + i的方式 threads=4 # 在服务器上运行memcached进程的最大进程数 user=`whoami` # 运行程序的用户身份 max_memory=128 # default: 64M | 最大使用内存 max_simul_conn=1024 # default: 1024 | 最大同时连接数 #maxcon=51200 #growth_factor=1.3 # default: 1.25 | 块大小增长因子 #thread_num=6 # default: 4 #verbose="-vv" # 查看详细启动信息 #bind_protocol=binary # ascii, binary, or auto (default) start() { echo -n $"Starting $prog: " for((i=1;i
4. 使用CDN
要想使页面加载较快,必须使用CDN。(原理请查阅相关文档)
CDN Drupal有两个模块 Parallel 和 CDN,Parallel比较简单,推荐使用。但是Parallel目前已经并入CDN模块,所以还是得要下载CDN模块http://drupal.org/project/cdn
5. 数据库结构合理、分表、分库
首先告诫一点:不要使用content-profile模块。
该模块把profile信息存储成一种你node-type,问题是这样会导致node表比较大,但是profile的node除了uid之外其他都是无用信息。加入一个网站有上百万、千万用户,再有很多文章(node),这样node表将会非常大,尤其是一个user有很多profile的node,比如5个,这样node表就会有5倍的user数量的node。导致查询node、user都没法处理,views之类的工具更是没法用,因为views生成的SQL将会非常慢。
把user相关表分出去,到独立的数据库,这样可以方便其他站点,比如子站,共享用户信息。
对于大型网站,不推荐使用太多第三方模块,因为大多模块都是基于node,如果跟node没有关系的独立数据,建议自己写模块来读写,这样方便数据的拆分和优化,又减轻了node表的压力。所以再使用模块前,必须了解模块的工作机制。
6. 服务器
Web服务器建议,推荐使用HAProxy/Varnish作为前端代理,Nginx作为Web服务器,php-fpm作为FastCGI处理PHP程序,当然也可以使用Apache作为PHP后端处理,但是不推荐使用apache作为Web节点服务器。
Drupal有一个Varnish相关的模块http://drupal.org/project/varnish
7. 使用Drupal的Pressflow版本
Drupal本身没有太多考虑性能的优化,Pressflow是一个专门针对Drupal的优化版本,包括支持Mysql Master-Slave等等。对于大型网站,选择Pressflow是必须的。
http://pressflow.org/
8. 其他相关模块
模块
版本
缓存类型
效率
匿名 / 注册
更新状态
1.Boost5.x, 6.x对匿名用户直接调用文件缓存非常高匿名用户6.xyes
5.xno
2.Javascript Aggregator5.x, 6.x文件中等全部Yes
3.Cache Router5.x-beta, 6.x-rc, 7.x-beta数据库、文件、PHP opcode和内存根据设置从中等到非常高根据设置Yes
4.CDN6.x, 7.x服务器高全部Yes
5.CacheExclude5.x, 6.x数据库中等匿名用户Yes
6.CSS Gzip6.x文件中等全部Yes
7.Memcache API and Integration5.x, 6.x内存高大部分匿名用户Yes
8.Block Cache5.x-dev数据库中等全部Yes
9.Block Cache Alter6.x数据库中等全部Yes
10.Term Lower Name6.x数据库中等全部更新较少
11.Path Cache6.x根据设置中等全部更新较少
12.Advanced Cache5.x, 6.x-dev数据库中等大部分注册用户Yes
13.Authcache6.x-rc数据库、文件、PHP opcode和内存根据设置从中等到非常高全部匿名用户,大多数注册用户Yes
14.Previous/Next API6.x-dev数据库中等全部较少更新
15.fastpath_fscache4.7.x-dev, 5.x-rc, 6.x-dev对匿名用户调用文件缓存(避开db)High匿名用户Yes
16.Varnish6.x-dev, 7.x-devReverse proxy(虚拟内存)非常高全部注册用户,大部分匿名用户测试阶段
17.High-performance JavaScript callback handler6.x, 7.xJavascript Callback中等全部Yes
18.Apache Solr6.x-dev, 7.x-dev全文检索高主要对于搜索页面的提高Yes
最后一提的是关于性能分析
PHP中debug和性能分析推荐使用xdebug和xhprof,两个模块都可以详细都列出函数执行都步骤以及时间,相比较而言xhprof比较轻量级一下,可以下载drupal的xhprof模块来配合使用,效果更加~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何在Drupal中生成PDF? | Drupal China
不使用views,如何自定义节点列表显示页面 | Drupal China
Boost模块-用drupal来建大网站的得力助手
Drupal常用开发工具(二)——Drupal for Firebug
memcache的最佳实践方案
Memcached 集群架构方面的问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服