﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gavin&#039;s Blog &#187; Drupal</title>
	<atom:link href="http://laigw.name/tag/drupal/feed" rel="self" type="application/rss+xml" />
	<link>http://laigw.name</link>
	<description>Keep it simple, stupid. Simplicity is beauty.</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:14:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>写在公司成立一周“月”的一天</title>
		<link>http://laigw.name/post/328.html</link>
		<comments>http://laigw.name/post/328.html#comments</comments>
		<pubDate>Sat, 20 Jun 2009 05:45:02 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[mksns]]></category>
		<category><![CDATA[SNS]]></category>

		<guid isPermaLink="false">http://laigw.name/?p=328</guid>
		<description><![CDATA[    很久没更新过自己的博客了，今天就来篇流水账吧，呵呵。
    6月20日，是公司成立一周“月”的一天。还清晰记得一个月前的这一天，我们是怎样早早来到好办公室布置，接着怎样迎接宾客，怎样搞开业仪式，怎样去巴西烤肉腐败，怎样从王总手中接过红包。。。转眼间，一个月时间过去了，我们似乎经历了很多事情，但细细想想似乎又不多。我们所做的，归根到底就是一件事：接受着新工作文化的熏陶，包括工作态度与工作方式。态度上，我们都渐渐的抛弃了被动式的“应付”型心态，变成主动的、心平气和的去把工作做好；工作方式上，我们慢慢习惯了计划导向，不断反馈修正的工作方式。我们已不仅仅满足于把事情“做完”，更要把事情“做好”，“追求卓越”定会成为我们公司的企业文化之一。

    今天是周六，本可以睡个大懒觉的。但可能是昨天晚上比较早睡的缘故，今早像往常一样早早就起床了。习惯性的洗了个澡，然后就开电脑上了一阵子网。实在无聊得很，想着想着就跑去Office了。怎么说，Office也比家里凉快多了，^_^
    去到Office，给自己的一天计划就是：抛开一切杂事，老老实实做回一天程序员，把准备用于SNS社区建设的程序框架MKSNS按照新思路确定下来。MKSNS是自己参考了Drupal的架构，结合多个SNS实际项目，专门针对SNS领域而开发的一个framework，将会应用于公司未来几个SNS型网站的开发，并在实践中完善该framework。Drupal是当今PHP领域公认的架构最完美的开源CMS，同时也是一个Web OS。但再完美的东西也有疵瑕，Drupal也不例外，她也有一些为人诟病的地方，比如程序运行效率不高，系统过于复杂、灵活，程序员学习曲线较陡等等。MKSNS的目标正是要吸收Drupal框架中优秀的东西，摒弃不好或者没必要的部分，并且专门针对SNS系统而开发。它像Lucene那样，不会是一个完整的Web系统，而仅仅是一个底层framework，利用此framework可以方便的实现出能精准化需求的Web系统来。
    或许是周六没人打扰的缘故，今天在构思、coding MKSNS的过程中，发觉自己异常的投入，以致于期间Boss问到几个问题，都没能及时从思考中回过神来。这种投入的感觉真好！设计实现Web framework还是个蛮有挑战性的工作。由于是一个Web系统的底层部分，需要对整个Web处理流程有非常清晰的理解，同时还要对可能的业务需求进行抽象、归纳等分析工作，最后还要将所有的分析工作进行代码实现。今天一直coding到晚上8点，才想起要下楼去吃饭。一天下来，基本上按照新思路确定了MKSNS的主体部分，剩下的工作，就是在一些细节的处理上了。
    看着已经轮廓初现的MKSNS，想想一周“月”的一天还真没白过到，安慰了，呵呵！
]]></description>
		<wfw:commentRss>http://laigw.name/post/328.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP沉思录之六：Drupal的性能问题</title>
		<link>http://laigw.name/post/202.html</link>
		<comments>http://laigw.name/post/202.html#comments</comments>
		<pubDate>Wed, 19 Nov 2008 03:49:55 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[沉思录]]></category>

		<guid isPermaLink="false">http://www.laigw.name/?p=202</guid>
		<description><![CDATA[本文发表在《程序员》杂志2008年第11期 
PHP沉思录之六：Drupal的性能问题
左轻侯
    Drupal是一个基于PHP的开源CMS系统，也是我认为技术上实现得最好的一个PHP应用。Drupal的架构非常优秀，通过微内核+plugin的方式，实现了极佳的扩展性，从而使Drupal远远超出一般的CMS这一范畴。从这个意义上来说，把Drupal称为Web OS似乎更加合适一些。关于Drupal，有太多的话可以说，也许我会在以后的时间里写一篇文章对它进行专门的讨论。但是在本文中，我想讨论的，是Drupal社区中的每一个人都会面对，但不是每一个人都对其有清晰认识的问题，即Drupal的性能问题。

    因为客户需求，我曾经对Drupal做过比较全面的测试。当时的环境是双服务器（DB server+Web Server），硬件配置都是单CPU+4G。数据库里面有几千条Node记录。用JMeter对各种情况下（开/关各种cache模块，logged user/anonymous user）不同页面的读取和写入操作都进行过测试。
测试的结果可能和很多人印象中不一样。两个主要的结果如下：
    1. Logged user和anonymous user的性能差距非常大。同一个页面，logged user的RPS(Requests per second)一般不超过20，而启用了cache的anonymous user的RPS在100多，当使用了file-based cache以后，甚至能超过300。
    2. 数据库压力相对较小。由于Drupal把大量可配置的内容都放在数据库中，因此往往容易产生这样一种印象，即Drupal对数据库要求应该是很高的。但事实上，无论是cache还是非cache模式，DB server的压力都相当小（CPU在10%以下），而Web Server的CPU在80%以上。跟踪所有的db query的执行时间后，也证明了这一点（全部db query的执行时间只占页面生成时间的一小部分）。 
    经过反复的测试和思考，我得出了一些结论。很明显，Drupal在大量logged user并发情况下的瓶颈，在于执行Drupal代码的CPU时间，而不是在于数据库或者其他地方。之所以出现这样的情况，和PHP本身的执行机制和Drupal的实现方式有关。Drupal在生成一个非cached的页面时，不管这个页面多么简单，都要执行一个完整的bootstrap过程，即使只启用了最少的模块，这个过程也要调用几十个PHP文件，执行成千上万行PHP代码。而PHP的机制又决定了没有任何PHP代码或者对象能够驻留内存，每次响应请求都必须执行完整的初始化工作。而anonymous user之所以快，是因为Drupal在执行cached page的时候，不会执行完整的bootstrap过程，它先检查是否cached page，是的话就读取缓存，然后结束工作。这样当然就快了。
以这个结论为前提，可以解释一些事情：
    1. 为什么Drupal的性能在各种环境下相差并不多。无论是双服务器，单服务器，甚至内存非常小的虚拟机，logged user的RPS值往往总是在10~20之间。数据库里面有几百条，或者几十万条记录，影响也不大。因为瓶颈并不在于DB或者内存，而是在于执行代码的过程。
    2. [...]]]></description>
		<wfw:commentRss>http://laigw.name/post/202.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

