<?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>Computer, Electron and Technology &#187; 开发</title>
	<atom:link href="http://www.donevii.com/post/tag/%e5%bc%80%e5%8f%91/feed" rel="self" type="application/rss+xml" />
	<link>http://www.donevii.com</link>
	<description>DoneVII CET &#38; CPPLITE</description>
	<lastBuildDate>Sun, 17 Jan 2010 05:32:08 +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://www.donevii.com/post/894.html</link>
		<comments>http://www.donevii.com/post/894.html#comments</comments>
		<pubDate>Wed, 08 Jul 2009 03:39:57 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=894</guid>
		<description><![CDATA[　　在过去半年里，陈炎伟连续“吃”进了6套房子，现在该是“收网”的时候了，他粗粗地算了一笔账：运气好的话，6套房子一转手就能赚到100万元现金。 
　　在福州楼市摸爬滚打了近8年的... ]]></description>
			<content:encoded><![CDATA[<p>　　在过去半年里，陈炎伟连续“吃”进了6套房子，现在该是“收网”的时候了，他粗粗地算了一笔账：运气好的话，6套房子一转手就能赚到100万元现金。 </p>
<p>　　在福州楼市摸爬滚打了近8年的陈炎伟很少在同一时间“吃”进这么多，哪怕2006年福州房价“跳跃式”上涨的那会儿，他最多只“吃”过5套房子。 </p>
<p>　　“今年比任何时候都不一样，宽松的信贷和低利率的政策大环境，再加上开发商消化库存抛售的小环境，这都是难得的时机。”陈炎伟说，以他手中一套今年年初“吃”进的100平方米的商品房计算，开盘价每平方米5000元，总价50万元，贷款八成。6月底，这套房子的均价已经涨到了7000元，通过转按揭的方式将房子“卖”给自己，再次贷款八成，减去交易过程中的各种税费，就已经从银行赚到了十七八万元的差价。 </p>
<p>　　“今年上半年，很多人都这么干，连开发商自己也这么干，银行睁一只眼，闭一只眼。房价暴涨是件很自然的事。”陈炎伟说。 </p>
<p>　　据统计数据显示，作为二线城市的福州5月份新开盘商品房均价已突破每平方米8000元的“防线”，进入7月，其上涨势头依然凶猛。 </p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/295.html" title="项目管理实战之团队管理 (2007-01-15)">项目管理实战之团队管理</a> (0)</li>
	<li><a href="http://www.donevii.com/post/229.html" title="设计模式之Life time controller模式 (2006-11-27)">设计模式之Life time controller模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/228.html" title="设计模式之Double Checked Locking模式 (2006-11-27)">设计模式之Double Checked Locking模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/96.html" title="角色设计简介 (2006-10-19)">角色设计简介</a> (0)</li>
	<li><a href="http://www.donevii.com/post/535.html" title="苹果放弃 IPhone 已发布软件的 NDA 协议 (2008-10-02)">苹果放弃 IPhone 已发布软件的 NDA 协议</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/894.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>团购 textmate</title>
		<link>http://www.donevii.com/post/882.html</link>
		<comments>http://www.donevii.com/post/882.html#comments</comments>
		<pubDate>Tue, 30 Jun 2009 07:22:27 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[software & hardware]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=882</guid>
		<description><![CDATA[发现 zend studio for eclipse 和 netbeans 越来越不好用，越来越大（慢）。
快速开发还是转向 textmate ，正好 twitter.com/fire9 在组织团购，报名等待了，大概一人 200 多 RMB。
报名入口

	相关文章
	
	项目... ]]></description>
			<content:encoded><![CDATA[<p>发现 zend studio for eclipse 和 netbeans 越来越不好用，越来越大（慢）。</p>
<p>快速开发还是转向 textmate ，正好 twitter.com/fire9 在组织团购，报名等待了，大概一人 200 多 RMB。</p>
<p><a href="http://bit.ly/16cVvt" title="textmate 团购报名">报名入口</a></p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/295.html" title="项目管理实战之团队管理 (2007-01-15)">项目管理实战之团队管理</a> (0)</li>
	<li><a href="http://www.donevii.com/post/229.html" title="设计模式之Life time controller模式 (2006-11-27)">设计模式之Life time controller模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/228.html" title="设计模式之Double Checked Locking模式 (2006-11-27)">设计模式之Double Checked Locking模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/96.html" title="角色设计简介 (2006-10-19)">角色设计简介</a> (0)</li>
	<li><a href="http://www.donevii.com/post/535.html" title="苹果放弃 IPhone 已发布软件的 NDA 协议 (2008-10-02)">苹果放弃 IPhone 已发布软件的 NDA 协议</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/882.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>上海13层大厦整体倒塌后的网友经典汇总贴</title>
		<link>http://www.donevii.com/post/871.html</link>
		<comments>http://www.donevii.com/post/871.html#comments</comments>
		<pubDate>Sun, 28 Jun 2009 11:45:26 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=871</guid>
		<description><![CDATA[1、今天早上那声巨响难道不是雷 ，是这个房子？
　　　　
　　　　2、再把它扶起来又可以卖了&#8230;..
　　　　
　　　　3、扶起来，洗洗干净继续卖
　　　　
　　　　4、这是开发商的行为... ]]></description>
			<content:encoded><![CDATA[<p>1、今天早上那声巨响难道不是雷 ，是这个房子？<br />
　　　　<br />
　　　　2、再把它扶起来又可以卖了&#8230;..<br />
　　　　<br />
　　　　3、扶起来，洗洗干净继续卖<br />
　　　　<br />
　　　　4、这是开发商的行为艺术吗!<br />
　　　　<br />
　　　　5、现在变成只有天窗的联体别墅了~<br />
　　　　<br />
　　　　6、我国多了两个支柱产业：倒塌楼房预测业、扶楼业（扶大厦于已倾）。<br />
　　　　<br />
　　　　7、新闻上说“除了”有个工人死亡外，“无”人员伤亡<br />
　　　　<br />
　　　　8、支持保留现场，以飨后代<br />
　　　　<br />
　　　　9、大楼说是它自己不小心摔倒的,它还说从哪里跌倒了,还会再从哪里爬起来.放心住吧.<br />
　　　　<br />
　　　　10、2009年流行词汇:一座楼说：“我倒！！！”于是他真的倒了<br />
　　　　<br />
　　11、一小撮不明争相的 混凝土 这么不和血！！<br />
　　　　<br />
　　12、房子没有倒，它只是在做腑卧撑而已！<br />
　　<br />
　　13、变形金刚到上海了。<br />
　　<br />
　　14、还好楼距还凑和，要不然成骨牌了。<br />
　　<br />
　　15、由于都不买房，没有入住，重心偏高，等居民都欢欣鼓舞的入住进去就能压住了。。。。<br />
　　<br />
　　16、房子离河边太近，<br />
　　　　会不会是河里的螃蟹钻地打洞破坏土层结构<br />
　　　　导致楼房整体倒塌呢？<br />
　　<br />
　　17、站起来是楼房 倒下去是绿坝<br />
　　<br />
　　18、第一次见到房倒得这么有性格的<br />
　　<br />
　　19、高层不流行了，规划局同意改成躺好死卖。<br />
　　<br />
　　20、站着商品房，躺下骨灰盒！</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/295.html" title="项目管理实战之团队管理 (2007-01-15)">项目管理实战之团队管理</a> (0)</li>
	<li><a href="http://www.donevii.com/post/229.html" title="设计模式之Life time controller模式 (2006-11-27)">设计模式之Life time controller模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/228.html" title="设计模式之Double Checked Locking模式 (2006-11-27)">设计模式之Double Checked Locking模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/96.html" title="角色设计简介 (2006-10-19)">角色设计简介</a> (0)</li>
	<li><a href="http://www.donevii.com/post/535.html" title="苹果放弃 IPhone 已发布软件的 NDA 协议 (2008-10-02)">苹果放弃 IPhone 已发布软件的 NDA 协议</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/871.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>管理者，请你远离产品开发/设计部门[转]</title>
		<link>http://www.donevii.com/post/740.html</link>
		<comments>http://www.donevii.com/post/740.html#comments</comments>
		<pubDate>Mon, 12 Jan 2009 13:03:53 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/740.html</guid>
		<description><![CDATA[先说一个身边真正发生过的故事，可能大家会对故事情节感觉非常熟悉。
一家小型电子商务公司，管理者就是公司的创始人，他有些技术开发背景。因为产品面向海外市场，他也比较关注产品... ]]></description>
			<content:encoded><![CDATA[<p>先说一个身边真正发生过的故事，可能大家会对故事情节感觉非常熟悉。</p>
<p>一家小型电子商务公司，管理者就是公司的创始人，他有些技术开发背景。因为产品面向海外市场，他也比较关注产品设计与可用性。由于他对自己的技术、设计能力的自信，总是对开发部与设计部成员的能力持怀疑态度，经常插手他们的工作。</p>
<p>一次，开发人员就新产品需求、设计文档的要求，提出开发方案A。这位管理者看后，以其经验判断认为不理想，并给出方案B。开发人员觉得方案B有些问题，但一时又没有找到有说服力的例证，无奈只好以此方案进行开发。</p>
<p>果然，在开发过程中，由于管理者仓促间所提出方案，在设计上确实存在不合理的疏漏，导致项目出现了一些问题。当开发人员想方设法将问题一一解决后，突然发现，这个DEBUG后的开发方案B，已经变得与他们最初提出的方案A并无二致。</p>
<p>而此时，该项目已经严重超期，那位管理者还为此非常不满，认为是开发人员能力的问题导致的。此后，管理者对开发工作的介入变得更多，而开发人员也开始变<br />
化，一部分对领导的这种超权行为越来越不满意，矛盾变得更加激化，后面工作中的沟通变得更加困难；另一部分则变得越来越没有积极性，领导要求怎么做就怎么<br />
做。</p>
<p>刚好看到UCDChina.com中的一篇文章《<a href="http://ucdchina.com/blog/?p=4" target="_blank">管理者不应直接参与产品的开发与设计</a>》，感觉说得太有道理了。上面这个故事，可以用来充实文章的论据。</p>
<p>其实团队管理者关注团队产品的成败，是非常正常的心态。他们插手设计、开发工作，无非是希望把产品更得更好，动机是无庸质疑的。尽管如此，还是不建议管理<br />
者过多的介入具体的开发与设计工作，即使是领域专家型的管理者，过多的插手具体设计、开发工作，也得不到预期的结果，可能对于项目来说，往往事与愿违，由<br />
此产生的恶性干扰多于良性的指导，这是得不偿失的。</p>
<p>为什么会这样？原因很多：</p>
<p>1、因为管理者与团队成员的权重不同，有管理者参与的项目，往往不能非常公平地对待其它项目涉众。尽管，管理者本意是以其对项目的理解和自身的经验，为设<br />
计、开发团队提供一些指导和建议，至少也会增加一种思路。但往往事与愿违，管理者介入后，一般会导致所有项目涉众的思维模式，会被管理者所左右，就因为他<br />
是团队的管理者。</p>
<p>大家想想，是否经常遇到这样的情况，设计、开发人员深思熟虑后形成的方案，经常因为管理者的一点儿质疑，而被否决；而管理者的灵光一闪，都可能形成一个决<br />
策，如果其它团队成员想到推翻它，必须经过周密、详实的举证与论述，这本就不公平，对项目也绝对没有好处，这会影响到团队成员的思路，甚至导致他们逐渐推<br />
动思考的动力。</p>
<p>2、因为技术背景与对项目的关注点不同，管理者与设计、开发人员会处在不同层面，看问题角度肯定是不同的。其实，能从多个不同角度看待产品，这本来是好事，可以把问题考虑得更全面一些。但如果以管理者的角度，去干扰设计、开发中的问题，那就是另外一码儿事了。</p>
<p>《论语•泰伯》：“子曰：不在其位，不谋其政。”</p>
<p>这句话说得非常好，这不是推卸责任意思，而恰恰是出于更负责的角度考虑。为了便于理解，这里把“位”理解为“职位”。</p>
<p>每个职位有不同的职责，职责会影响人的立场，不同立场、知识背景的人理解、处理同一个问题，其结果肯定是不一样的。也许管理者认为自己可以做到“换位思考<br />
”，即便如此也是搁靴搔痒的状态，其结果绝对差强人意。比如，管理者明白不能让UI设计师去考虑代码优化的问题，那又为什么自己去犯同样的错误呢？</p>
<p>正所谓术业有专攻，专业的工作还是让专业的人去做，那才可能达到令人满意的结果。</p>
<p>3、有人说，在IT行业，许多管理者都是优秀程序员或策划、设计师出身，这种领域专家型的管理者插手做具体设计、开发工作，应该有对项目、对团队成员有帮助。</p>
<p>其实不然，前面提到的两点问题，对于这样的管理者也依然存在。而且，文章开头提到的那位管理者也曾经是开发人员，本身也是位不错的产品设计师。为什么团队成员在他的指导下，项目进展依然不顺利呢？</p>
<p>从事过产品设计、程序开发工作的朋友应该很清楚，这样的工作需要投入大量的时间与精力，这是一个反复尝试与迭代的过程。好的设计与优秀的编码，绝对不是通<br />
过纸上谈兵或灵光一闪就可以得到的（当然，这个世界是有天才存在的，也许他们拍拍脑袋就可以把产品设计得非常完美，程序编码也可以没有任何BUG，但毕竟<br />
这种天才少得没有说服力）。有的时候，即使写好伪代码，也不能百之百的确保业务逻辑没问题。</p>
<p>而团队的管理者，往往事务缠身，他们没有精力（也不应该）深入于其中任何一项具体工作，那样就会犯下过于关注细节的管理大忌。而浅尝辄止的心态，恰恰又是做好设计与开发工作的大忌。这样看来，管理者兼顾设计、开发工作，并取得好的结果，根本是一项不可能完成的任务。</p>
<p>当然，领域专家型的管理者是可遇而不可求的，他丰富的经验与思路都是对团队成员有帮助的，但仅此而已，具体的设计、开发工作还是应该让设计师和程序员来做。</p>
<p>基于上面分析，如果管理者仍执意要插手设计与开发工作，就必须保证自己的观点（或决策）是100%准确与全面的，这样才不会对项目有负面影响。</p>
<p>当然，这样的要求是不合理的，也没有人敢做此承诺，所以，管理者们还去做好本职工作吧，那里才是发挥你们特长的地方。好的管理者，要懂得放权，要对团队成员应该有足够的信任，相信他们的工作能力，也相信他们的工作态度。正所谓：用人不疑，疑人不用。</p>
<p>如果管理者实在想参与设计、开发工作，那就干脆转行吧。</p>
<p>转自：http://blog.sina.com.cn/s/blog_564cabe30100bxmb.html</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/504.html" title="google背后的分布式架构 (2008-09-23)">google背后的分布式架构</a> (0)</li>
	<li><a href="http://www.donevii.com/post/9.html" title="flickr对javascript干的好事 (2006-08-17)">flickr对javascript干的好事</a> (0)</li>
	<li><a href="http://www.donevii.com/post/124.html" title="C++资源之不完全导引 (2006-10-26)">C++资源之不完全导引</a> (0)</li>
	<li><a href="http://www.donevii.com/post/171.html" title="泛型：类型化缓存(I) (2006-11-05)">泛型：类型化缓存(I)</a> (0)</li>
	<li><a href="http://www.donevii.com/post/61.html" title="有漏洞的Web 2.0 (2006-09-01)">有漏洞的Web 2.0</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/740.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么是真正的产品经理[转自5G]</title>
		<link>http://www.donevii.com/post/737.html</link>
		<comments>http://www.donevii.com/post/737.html#comments</comments>
		<pubDate>Thu, 08 Jan 2009 09:28:54 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/737.html</guid>
		<description><![CDATA[这个文章是对产品经理比较合理的解释了，写得很务实。
&#8212;&#8212;- 淫荡的分隔线 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
很多论坛（含此处）都在探... ]]></description>
			<content:encoded><![CDATA[<p>这个文章是对产品经理比较合理的解释了，写得很务实。</p>
<p>&#8212;&#8212;- 淫荡的分隔线 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>很多论坛（含此处）都在探讨何为产品经理，产品经理该干什么？<br />n多人也处于不明白产品经理为何物的蛮荒时代。<br />我本人从市场研究做起，后来是可用性测试，然后是产品设计师，再后来是产品经理，我自认为我对产品经理的理解强于大多数人，可以为你们解答疑惑。</p>
<p>背景：很多人的title都是产品经理，但是我要说的是真正意义上的产品经理，这种产品经理责任重大，能力超强，待遇超高。就算你目前不是这种产品经理，那么这也应该是你努力的方向。我下面说的产品经理指的都是这种产品经理</p>
<p>一、判断一下此人是不是产品经理<br />定义：产品经理，顾名思义，该人能够对产品负全责。<br />判断方法： 看指标、 看责任、看工作方式<br />1.看指标：以用户数（极个别时候用PV）作为考核指标，否则一定不是产品经理！产品的意义就在于留住用户，所以用户数是评价产品的最核心标准。你对产品所做的一切努力都会体现在用户数上。<br />2.看责任：产品经理需要对产品负全责。我举个例子，如果产品出现技术问题，比如奥运期间访问量大增，造成服务器负载过大，以至于当机，影响了用户访问，领导第一个骂谁？骂你？恭喜，你是一名真正的产品经理。产品经理显然应该了解服务器的最大载荷以及在中国各地的分布情况，网通和电信、铁通、校园网等链路的具体情况也理所当然的应该是产品经理的职责范畴。<br />3. 看工作方式：产品经理会一直运营一款（最多两款）产品，如果你看到一个人以项目的方式参与产品的某个阶段，工作完后就去做另一款产品 ，那么毫无疑问，此人非产品经理也。</p>
<p>二、产品经理的职责<br />对产品负全责，谁都会说。但是怎么才叫负全责呢？所谓的负全责是对“整个产品生命周期负责”。从市场调查、产品规划、概念设计、功能设计、产品逻辑设计、原型设计、交互设计、界面设计、技术环节的沟通、项目管理、产品上线、上线后的运营管理、产品推广、对外合作、产品改版升级&#8230;&#8230;总之，从产品诞生开始一直到产品推出市场，再到市场运营，再到改版，知道产品退出市场。这一切都应该是由一名产品经理全权负责。他对产品的方方面面都很了解。一个PM在一款产品上做3、5年是很平常的。</p>
<p>三、产品经理的典型工作<br />我随便罗列一些我的日常工作吧，尽量按照产品生命周期写。<br />1. 规划阶段：竞品分析、产品整体规划<br />2. 设计阶段：产品一期概念设计、功能、交互、原型设计、技术可行性分析、可用性测试、形成需求文档<br />3. 开发阶段：项目排期、项目跟进、产品一期单元测试、产品一期上线<br />4.运营阶段：产品一期运营（内容运营、技术运营、运营人员工作安排，周末值班人员安排）、市场营销与推广（寻找合作机会，参与合作谈判——通常与市场部合作，签署合作法律文件——通常与公司法务部合作，监督合作推广的执行，分析推广效果ROI等等）、运营数据分析、一期改版意见、产品二期概念设计、产品二期需求文档草案<br />5. 产品二期设计阶段：产品二期需求文档、产品二期技术论证<br />6. 产品二期开发阶段 &#8230;&#8230;.<br />&#8230;&#8230;&#8230;&#8230;<br />&#8230;&#8230;..<br />&#8230;&#8230;.</p>
<p>四、哪些职位被误认为是产品经理：<br />1. UE设计：这个东西最害人。产品设计师绝不是产品经理，请大家务必记住这一点。产品设计师管理的是设计过程，而产品经理管理的是整个产品的所有环节。目前有很多UE从业者——多是设计师——最容易将二者混淆<br />2. 项目经理：项目经理的职责是保证项目顺利按需求上线，别的不管。而产品经理要自始至终的管理一款产品。<br />3. 产品运营：运营是产品经理最主要的只能，但不是全部</p>
<p>五、产品经理的核心技能<br />“控制”是产品经理的核心技能。<br />要对产品的一切细节了然于胸，要对产品涉及到的方方面面有所了解，要能够控制产品团队（设计、技术、运营等一切环节），要有高超的沟通能力和技巧，要有极强的成功欲望和非常主动的做事态度。</p>
<p>六、总结<br />所以真正意义上的产品经理是很难得的，压力是很大的，待遇是很高的，人才是很稀有的:)&nbsp; <br />头顶产品经理title的人99%不具备产品经理的资质<br />也许你认为我写的这些要求太高了，但事实上一名合格的产品经理的确应该具备的基本素质。<br />希望大家共同努力，朝这个目标发展。<br />压力是巨大的，困难时巨大的，成就是巨大的:0</p>
<p>重申一遍，产品经理管理的是产品，不是人！<br />产品经理没有直接管理业务支持方（包括美工、技术、客服、市场）的权利，这是产品经理制度的管理学基础，这个是不能动摇的。如果产品经理有权利支配支持方，那是事业部制度。而事业部制度的核心是独立核算，自己是一个独立的利润中心 + 成本中心。但是产品经理制不是这样的，产品经理只是利润中心，不是成本中心。即便是有了产品管理团队，他们一般那也是和其他业务共用基础性资源：如美工、技术开发、市场合作等。但是不排除个别产品使用一些成本性资源，但是那不是常态。比如我们有一个产品招了个专职BD，但是大家都知道这个BD是临时归产品经理管，他最终还是会被市场部招安的。</p>
<p>原文地址：http://www.5gme.com/space-19213-do-thread-id-6631-page-1.html</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/387.html" title="[转]嵌入式系统 Boot Loader 技术内幕 (2008-01-14)">[转]嵌入式系统 Boot Loader 技术内幕</a> (0)</li>
	<li><a href="http://www.donevii.com/post/78.html" title="[转]C/C++/Perl/汇编/Java效率比较 (2006-10-11)">[转]C/C++/Perl/汇编/Java效率比较</a> (0)</li>
	<li><a href="http://www.donevii.com/post/113.html" title="SOA and Web services 新手入门 (2006-10-24)">SOA and Web services 新手入门</a> (0)</li>
	<li><a href="http://www.donevii.com/post/504.html" title="google背后的分布式架构 (2008-09-23)">google背后的分布式架构</a> (0)</li>
	<li><a href="http://www.donevii.com/post/44.html" title="ACE自适配通信环境 (2006-08-23)">ACE自适配通信环境</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/737.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2008年度“雷动中国”十大局长颁奖词</title>
		<link>http://www.donevii.com/post/709.html</link>
		<comments>http://www.donevii.com/post/709.html#comments</comments>
		<pubDate>Thu, 25 Dec 2008 14:19:07 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/709.html</guid>
		<description><![CDATA[1、周久耕&#160; &#160; 南京市江宁区房产局长

此主题相关图片如下：

【颁奖词】
他身披名牌西装，腕勒江诗丹顿，座驾卡迪拉克，嘴喷九五至尊，在全国对高房价一片讨伐之声的背景下，他宣... ]]></description>
			<content:encoded><![CDATA[<p>1、周久耕&nbsp; &nbsp; 南京市江宁区房产局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img style="cursor: pointer;" src="http://upfile.cat898.com/UploadFile/2008-12/2008122581725621.jpg" onload="thumbImg(this)" alt="" width="600" height="400" /><br />
【颁奖词】<br />
他身披名牌西装，腕勒江诗丹顿，座驾卡迪拉克，嘴喷九五至尊，在全国对高房价一片讨伐之声的背景下，他宣称要为老百姓负责，坚决查处胆敢降价的开发商，此<br />
种精神是何种精神？！是根本不把民意当回事儿的官僚精神，是敢逆潮流而动的泼皮精神，是誓与高房价共存亡的流氓精神！ <br />
&nbsp; &nbsp; <br />
2、王显亮&nbsp; &nbsp; 陕西乾县科技局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581658280.jpg" onload="thumbImg(this)" alt="" width="289" height="197" /><br />
【颁奖词】 应该说，他说了大实话，可是实话实说的代价就是里外不是人，这位史上最牛考生撕下了..教育最后的遮羞布，也现形了一张最精彩最鞭辟入里的群丑像！<br />
3、叶树养&nbsp; &nbsp;广东韶关公安局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581712267.jpg" onload="thumbImg(this)" alt="" width="450" height="338" /><br />
【颁奖词】 他从村支书干起，见证了共和国所有基层组织的领导位子，他以豪宅内的3000万元现金告诉了广大网民：肥猪不是一天就能胖起来的，深谙官场伎俩的他也以一个小小记事本让韶关的整个官场都瑟瑟发抖！<br />
4、刘光明&nbsp; &nbsp;鞍山市国税局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/200812258154882.jpg" onload="thumbImg(this)" alt="" width="96" height="126" /><br />
【颁奖词】 她拥有鞍山市最美的屁股，她花500万走遍世界遍寻美容大师把自己浑身上下美了个透，每年8、9亿的税收漏洞谁能奈何？靠的就是这官场经营双字诀：送和睡，贪财的就送你钱，贪色的就陪你睡，真是屠龙一出、谁与争锋？！&nbsp;&nbsp;<br />
5、林嘉祥&nbsp; &nbsp;深圳市海事局党组书记、副局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581534142.jpg" onload="thumbImg(this)" alt="" width="444" height="450" /><br />
【颁奖词】 他不是一个随便的人，可他随便起来就不是人，他以言行奉劝全国网民，屁民怎么能和大官斗，要小心啊，他会慢慢收拾你们的！<br />
6、胡可&nbsp; &nbsp; 四川大足县交通局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/200812258142880.jpg" onload="thumbImg(this)" alt="" width="300" height="200" /><br />
【颁奖词】&nbsp;&nbsp;他让默诵“蜀道难难于上青天”的列祖列宗赞叹真乃孝感天地，因为一条高标准豪华公路已经修到了古蜀乡间祖坟，他让全国多少“无风一身土，下雨两脚泥”的“村村通”工程相形见绌，这样的有孝心有胆识的干部不培养就是和祖宗们的在天之灵过不去！<br />
7、金某&nbsp; &nbsp; 内蒙古黄河工程局局长&nbsp;&nbsp;<br />
&nbsp; &nbsp;徐某&nbsp; &nbsp; 湖北天门市园林局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581630578.jpg" onload="thumbImg(this)" alt="" width="469" height="351" /><br />
【颁奖词】 古人云：当官不予民做主不如回家卖红薯，这两位局长大人没给小民们做主，倒被小民们给做了，年终了，发钱了，当官的小心了。<br />
8、李长江&nbsp; &nbsp; 国家质量监督局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581435914.jpg" onload="thumbImg(this)" alt="" width="140" height="166" /><br />
【颁奖词】毒饺子是人家栽赃陷害，那么毒奶，毒米，毒面，毒油，毒蔬菜、——请问当今中国还有哪个是没毒的？！他以他多年一贯的官僚主义作风为自己带来了引咎辞职的下场，但人民也知道，他充其量也就是个“祭旗”的。<br />
9、陈功&nbsp; &nbsp;&nbsp;&nbsp;济南铁路局局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581645683.jpg" onload="thumbImg(this)" alt="" width="500" height="333" /><br />
【颁奖词】 72条鲜活的生命，416名无辜者的鲜血，他用他管理之下的“混乱的施工文件和调度命令”为“人祸”这个词语做了今年最好的注解。<br />
10、邱晓华&nbsp; &nbsp;国家统计局原局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/2008122581615973.jpg" onload="thumbImg(this)" alt="" width="350" height="500" /><br />
【颁奖词】 他一年多前因收受贿赂、生活腐化堕落、涉嫌重婚犯罪而锒铛入狱，而一年多后的今天竟然再次发光发热，以高级研究员之尊出书出名，何其风光也哉！司法不彰的当今，真应了那句话：我是革命一块砖，哪里需要哪里搬！ <br />
评委会特别大奖&nbsp;&nbsp;25位民政局长<br />
<img src="http://work.cat898.com/skins/default/filetype/jpg.gif" onload="thumbImg(this)" alt="" width="6" height="6" /><br />
此主题相关图片如下：<br />
<img src="http://upfile.cat898.com/UploadFile/2008-12/200812258162102.jpg" onload="thumbImg(this)" alt="" width="400" height="300" /><br />
【颁奖词】 25封自称“堂妹”的性爱照敲诈信，让我们领略了25位民政局长的群体形象，如果说“苍蝇不叮无缝的蛋，屎壳郎独爱滚粪球”之类的话对他们稍有不公，那么局长大人们的小辫子为什么总是野火烧不尽春风吹又生？！</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/208.html" title="司马南：中国是一个什么样的国家 (2006-11-17)">司马南：中国是一个什么样的国家</a> (0)</li>
	<li><a href="http://www.donevii.com/post/371.html" title="凯尔西气质类型测试 (2007-12-19)">凯尔西气质类型测试</a> (0)</li>
	<li><a href="http://www.donevii.com/post/174.html" title="[转载]在职程序员为啥比不过在野程序员 (2006-11-06)">[转载]在职程序员为啥比不过在野程序员</a> (0)</li>
	<li><a href="http://www.donevii.com/post/298.html" title="[转]与豆瓣网杨勃聊天（续） (2007-01-31)">[转]与豆瓣网杨勃聊天（续）</a> (0)</li>
	<li><a href="http://www.donevii.com/post/402.html" title="[转] 移动互联网的终端革命 (2008-05-02)">[转] 移动互联网的终端革命</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/709.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>userfly 功能</title>
		<link>http://www.donevii.com/post/669.html</link>
		<comments>http://www.donevii.com/post/669.html#comments</comments>
		<pubDate>Tue, 09 Dec 2008 06:04:59 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/669.html</guid>
		<description><![CDATA[在 2006 年为了给刘剑提供 UE 分析的依据，自己开发了一个记录用户鼠标移动轨迹的东西。今天在 twitter 里看到有人在介绍国外的 userfly ，忽然感觉很有趣。
userfly 除了在记录移动轨迹外，还记... ]]></description>
			<content:encoded><![CDATA[<p>在 2006 年为了给刘剑提供 UE 分析的依据，自己开发了一个记录用户鼠标移动轨迹的东西。今天在 twitter 里看到有人在介绍国外的 userfly ，忽然感觉很有趣。</p>
<p>userfly 除了在记录移动轨迹外，还记录了同一 session 所浏览的页面和键盘的按键情况。只要加个 keyboard event handler 就能完成这个工作，不过 userfly 能整合这些功能，提供一体化的服务还是不错的。</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/295.html" title="项目管理实战之团队管理 (2007-01-15)">项目管理实战之团队管理</a> (0)</li>
	<li><a href="http://www.donevii.com/post/229.html" title="设计模式之Life time controller模式 (2006-11-27)">设计模式之Life time controller模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/228.html" title="设计模式之Double Checked Locking模式 (2006-11-27)">设计模式之Double Checked Locking模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/96.html" title="角色设计简介 (2006-10-19)">角色设计简介</a> (0)</li>
	<li><a href="http://www.donevii.com/post/535.html" title="苹果放弃 IPhone 已发布软件的 NDA 协议 (2008-10-02)">苹果放弃 IPhone 已发布软件的 NDA 协议</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/669.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>七个受用一生的心理寓言</title>
		<link>http://www.donevii.com/post/553.html</link>
		<comments>http://www.donevii.com/post/553.html#comments</comments>
		<pubDate>Thu, 09 Oct 2008 07:12:25 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/553.html</guid>
		<description><![CDATA[（一）成长的寓言：做一棵永远成长的苹果树&#160;
一棵苹果树，终于结果了。&#160;第一年，它结了10个苹果，9个被拿走，自己得到1个。对此，苹果树愤愤不平，于是自断经脉，拒绝成长。第二... ]]></description>
			<content:encoded><![CDATA[<p><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: ������; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">（一）成长的寓言：做一棵永远成长的苹果树<span class="Apple-converted-space">&nbsp;</span></p>
<p>一棵苹果树，终于结果了。<span class="Apple-converted-space">&nbsp;</span><br />第一年，它结了10个苹果，9个被拿走，自己得到1个。对此，苹果树愤愤不平，于是自断经脉，拒绝成长。第二年，它结了5个苹果，4个被拿走，自己得到1个。“哈哈，去年我得到了10％，今年得到20％！翻了一番。”这棵苹果树心理平衡了。<span class="Apple-converted-space">&nbsp;</span><br />但是，它还可以这样：继续成长。譬如，第二年，它结了100个果子，被拿走90个，自己得到10个。<span class="Apple-converted-space">&nbsp;</span><br />很可能，它被拿走99个，自己得到1个。但没关系，它还可以继续成长，第三年结1000个果子……<span class="Apple-converted-space">&nbsp;</span><br />其实，得到多少果子不是最重要的。最重要的是，苹果树在成长！等苹果树长成参天大树的时候，那些曾阻碍它成长的力量都会微弱到可以忽略。真的，不要太在乎果子，成长是最重要的。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】你是不是一个已自断经脉的打工族？<span class="Apple-converted-space">&nbsp;</span><br />刚开始工作的时候，你才华横溢，意气风发，相信“天生我才必有用”。但现实很快敲了你几个闷棍，或许，你为单位做了大贡献没人重视；或许，只得到口头重视但却得不到实惠；或许……总之，你觉得就像那棵苹果树，结出的果子自己只享受到了很小一部分，与你的期望相差甚远。<span class="Apple-converted-space">&nbsp;</span><br />于是，你愤怒、你懊恼、你牢骚满腹……最终，你决定不再那么努力，让自己的所做去匹配自己的所得。几年过去后，你一反省，发现现在的你，已经没有刚工作时的激情和才华了。<span class="Apple-converted-space">&nbsp;</span><br />“老了，成熟了。”我们习惯这样自嘲。但实质是，你已停止成长了。<span class="Apple-converted-space">&nbsp;</span><br />这样的故事，在我们身边比比皆是。<span class="Apple-converted-space">&nbsp;</span><br />之所以犯这种错误，是因为我们忘记生命是一个历程，是一个整体，我们觉得自己已经成长过了，现在是到该结果子的时候了。我们太过于在乎一时的得失，而忘记了成长才是最重要的。<span class="Apple-converted-space">&nbsp;</span><br />好在，这不是金庸小说里的自断经脉。我们随时可以放弃这样做，继续走向成长之路。<span class="Apple-converted-space">&nbsp;</span><br />切记：如果你是一个打工族，遇到了不懂管理、野蛮管理或错误管理的上司或企业文化，那么，提醒自己一下，千万不要因为激愤和满腹牢骚而自断经脉。不论遇到什么事情，都要做一棵永远成长的苹果树，因为你的成长永远比每个月拿多少钱重要。<span class="Apple-converted-space">&nbsp;</span></p>
<p>（二）动机的寓言：孩子在为谁而玩<span class="Apple-converted-space">&nbsp;</span></p>
<p>一群孩子在一位老人家门前嬉闹，叫声连天。几天过去，老人难以忍受。<span class="Apple-converted-space">&nbsp;</span><br />于是，他出来给了每个孩子25美分，对他们说：“你们让这儿变得很热闹，我觉得自己年轻了不少，这点钱表示谢意。”<span class="Apple-converted-space">&nbsp;</span><br />孩子们很高兴，第二天仍然来了，一如既往地嬉闹。老人再出来，给了每个孩子15美分。他解释说，自己没有收入，只能少给一些。15美分也还可以吧，孩子仍然兴高采烈地走了。<span class="Apple-converted-space">&nbsp;</span><br />第三天，老人只给了每个孩子5美分。<span class="Apple-converted-space">&nbsp;</span><br />孩子们勃然大怒，“一天才5美分，知不知道我们多辛苦！”他们向老人发誓，他们再也不会为他玩了！<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】你在为谁而“玩”<span class="Apple-converted-space">&nbsp;</span><br />这个寓言是苹果树寓言的更深一层的答案：苹果树为什么会自断经脉，因为它不是为自己而“玩”。<span class="Apple-converted-space">&nbsp;</span><br />人的动机分两种：内部动机和外部动机。如果按照内部动机去行动，我们就是自己的主人。如果驱使我们的是外部动机，我们就会被外部因素所左右，成为它的奴隶。<span class="Apple-converted-space">&nbsp;</span><br />在这个寓言中，老人的算计很简单，他将孩子们的内部动机“为自己快乐而玩”变成了外部动机“为得到美分而玩”，而他操纵着美分这个外部因素，所以也操纵了孩子们的行为。寓言中的老人，像不像是你的老板、上司？而美分，像不像是你的工资、奖金等各种各样的外部奖励？<span class="Apple-converted-space">&nbsp;</span><br />如将外部评价当作参考坐标，我们的情绪就很容易出现波动。因为，外部因素我们控制不了，它很容易偏离我们的内部期望，让我们不满，让我们牢骚满腹。不满和牢骚等负性情绪让我们痛苦，为了减少痛苦，我们就只好降低内部期望，最常见的方法就是减少工作的努力程度。<span class="Apple-converted-space">&nbsp;</span><br />一个人之所以会形成外部评价体系，最主要的原因是父母喜欢控制他。父母太喜欢使用口头奖惩、物质奖惩等控制孩子，而不去理会孩子自己的动机。久而久之，孩子就忘记了自己的原初动机，做什么都很在乎外部的评价。上学时，他忘记了学习的原初动机———好奇心和学习的快乐；工作后，他又忘记了工作的原初动机———成长的快乐，上司的评价和收入的起伏成了他工作的最大快乐和痛苦的源头。<span class="Apple-converted-space">&nbsp;</span><br />切记：外部评价系统经常是一种家族遗传，但你完全可以打破它，从现在开始培育自己的内部评价体系，让学习和工作变成“为自己而玩”。<span class="Apple-converted-space">&nbsp;</span></p>
<p>（三）规划的寓言：把一张纸折叠51次<span class="Apple-converted-space">&nbsp;</span></p>
<p>想象一下，你手里有一张足够大的白纸。现在，你的任务是，把它折叠51次。那么，它有多高？<span class="Apple-converted-space">&nbsp;</span><br />一个冰箱？一层楼？或者一栋摩天大厦那么高？不是，差太多了，这个厚度超过了地球和太阳之间的距离。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】<span class="Apple-converted-space">&nbsp;</span><br />到现在，我拿这个寓言问过十几个人了，只有两个人说，这可能是一个想象不到的高度，而其他人想到的最高的高度也就是一栋摩天大厦那么高。<span class="Apple-converted-space">&nbsp;</span><br />折叠51次的高度如此恐怖，但如果仅仅是将51张白纸叠在一起呢？<span class="Apple-converted-space">&nbsp;</span><br />这个对比让不少人感到震撼。因为没有方向、缺乏规划的人生，就像是将51张白纸简单叠在一起。今天做做这个，明天做做那个，每次努力之间并没有一个联系。这样一来，哪怕每个工作都做得非常出色，它们对你的整个人生来说也不过是简单的叠加而已。<span class="Apple-converted-space">&nbsp;</span><br />当然，人生比这个寓言更复杂一些。有些人，一生认定一个简单的方向而坚定地做下去，他们的人生最后达到了别人不可企及的高度。譬如，我一个朋友的人生方向是英语，他花了十数年努力，仅单词的记忆量就达到了十几万之多，在这一点上达到了一般人无法企及的高度。<span class="Apple-converted-space">&nbsp;</span><br />也有些人，他们的人生方向也很明确，譬如开公司做老板，这样，他们就需要很多技能———专业技能、管理技能、沟通技能、决策技能等等。他们可能会在一开始尝试做做这个，又尝试做做那个，没有一样是特别精通的，但最后，开公司做老板的这个方向将以前的这些看似零散的努力统合到一起，这也是一种复杂的人生折叠，而不是简单的叠加。<span class="Apple-converted-space">&nbsp;</span><br />切记：看得见的力量比看不见的力量更有用。<span class="Apple-converted-space">&nbsp;</span><br />现在，流行从看不见的地方寻找答案，譬如潜能开发，譬如成功学，以为我们的人生要靠一些奇迹才能得救。但是，在我看来，东莞恒缘心理咨询中心的咨询师毛正强说得更正确，“通过规划利用好现有的能力远比挖掘所谓的潜能更重要。”<span class="Apple-converted-space">&nbsp;</span></p>
<p>（四）逃避的寓言：小猫逃开影子的招数<span class="Apple-converted-space">&nbsp;</span></p>
<p>“影子真讨厌！”小猫汤姆和托比都这样想，“我们一定要摆脱它。”<span class="Apple-converted-space">&nbsp;</span><br />然而，无论走到哪里，汤姆和托比发现，只要一出现阳光，它们就会看到令它们抓狂的自己的影子。<span class="Apple-converted-space">&nbsp;</span><br />不过，汤姆和托比最后终于都找到了各自的解决办法。汤姆的方法是，永远闭着眼睛。托比的办法则是，永远待在其他东西的阴影里。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】<span class="Apple-converted-space">&nbsp;</span><br />这个寓言说明，一个小的心理问题是如何变成更大的心理问题的。<span class="Apple-converted-space">&nbsp;</span><br />可以说，一切心理问题都源自对事实的扭曲。什么事实呢？主要就是那些令我们痛苦的负性事件。<span class="Apple-converted-space">&nbsp;</span><br />因为痛苦的体验，我们不愿意去面对这个负性事件。但是，一旦发生过，这样的负性事件就注定要伴随我们一生，我们能做的，最多不过是将它们压抑到潜意识中去，这就是所谓的忘记。<span class="Apple-converted-space">&nbsp;</span><br />但是，它们在潜意识中仍然会一如既往地发挥作用。并且，哪怕我们对事实遗忘得再厉害，这些事实所伴随的痛苦仍然会袭击我们，让我们莫名其妙地伤心难过，而且无法抑制。这种疼痛让我们进一步努力去逃避。<span class="Apple-converted-space">&nbsp;</span><br />发展到最后，通常的解决办法就是这两个：要么，我们像小猫汤姆一样，彻底扭曲自己的体验，对生命中所有重要的负性事实都视而不见；要么，我们像小猫托比一样，干脆投靠痛苦，把自己的所有事情都搞得非常糟糕，既然一切都那么糟糕，那个让自己最伤心的原初事件就不是那么疼了。<span class="Apple-converted-space">&nbsp;</span><br />白云心理医院的咨询师李凌说，99％的吸毒者有过痛苦的遭遇。他们之所以吸毒，是为了让自己逃避这些痛苦。这就像是躲进阴影里，痛苦的事实是一个魔鬼，为了躲避这个魔鬼，干脆把自己卖给更大的魔鬼。<span class="Apple-converted-space">&nbsp;</span><br />还有很多酗酒的成人，他们有过一个酗酒而暴虐的老爸，挨过老爸的不少折磨。为了忘记这个痛苦，他们学会了同样的方法。<span class="Apple-converted-space">&nbsp;</span><br />除了这些看得见的错误方法外，我们人类还发明了无数种形形色色的方法去逃避痛苦，弗洛伊德将这些方式称为心理防御机制。太痛苦的时候，这些防御机制是必要的，但糟糕的是，如果心理防御机制对事实扭曲得太厉害，它会带出更多的心理问题，譬如强迫症、社交焦虑症、多重人格，甚至精神分裂症等。<span class="Apple-converted-space">&nbsp;</span><br />真正抵达健康的方法只有一个———直面痛苦。直面痛苦的人会从痛苦中得到许多意想不到的收获，它们最终会变成当事人的生命财富。<span class="Apple-converted-space">&nbsp;</span><br />切记：阴影和光明一样，都是人生的财富。<span class="Apple-converted-space">&nbsp;</span><br />一个最重要的心理规律是，无论多么痛苦的事情，你都是逃不掉的。你只能去勇敢地面对它，化解它，超越它，最后和它达成和解。如果你自己暂时缺乏力量，你可以寻找帮助，寻找亲友的帮助，或寻找专业的帮助，让你信任的人陪着你一起去面对这些痛苦的事情。<span class="Apple-converted-space">&nbsp;</span><br />美国心理学家罗杰斯曾是最孤独的人，但当他面对这个事实并化解后，他成了真正的人际关系大师；美国心理学家弗兰克有一个暴虐而酗酒的继父和一个糟糕的母亲，但当他挑战这个事实并最终从心中原谅了父母后，他成了治疗这方面问题的专家；日本心理学家森田正马曾是严重的神经症患者，但他通过挑战这个事实并最终发明出了森田疗法……他们生命中最痛苦的事实最后都变成了他们最重要的财富。你，一样也可以做到。<span class="Apple-converted-space">&nbsp;</span></p>
<p>（五）行动的寓言———螃蟹、猫头鹰和蝙蝠<span class="Apple-converted-space">&nbsp;</span></p>
<p>螃蟹、猫头鹰和蝙蝠去上恶习补习班。数年过后，它们都顺利毕业并获得博士学位。不过，螃蟹仍横行，猫头鹰仍白天睡觉晚上活动，蝙蝠仍倒悬。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】<span class="Apple-converted-space">&nbsp;</span><br />这是黄永玉大师的一个寓言故事，它的寓意很简单：行动比知识重要。<span class="Apple-converted-space">&nbsp;</span><br />用到心理健康中，这个寓言也发人深省。<span class="Apple-converted-space">&nbsp;</span><br />心理学的知识堪称博大精深。但是，再多再好的心理学知识也不能自动帮助一个人变得更健康。其实，我知道的一些学过多年心理学的人士，他们学心理学的目的之一就是要治自己，但学了这么多年以后，他们的问题依旧。<span class="Apple-converted-space">&nbsp;</span><br />之所以出现这种情况，一个很重要的原因是，他们没有身体力行，那样知识就只是遥远的知识，知识并没有化成他们自己的生命体验。<span class="Apple-converted-space">&nbsp;</span><br />我的一个喜欢心理学的朋友，曾被多名心理学人士认为不敏感，不适合学心理学。但事实证明，这种揣测并不正确。他是不够敏感，但他有一个非常大的优点：知道一个好知识，就立即在自己的生命中去执行。这样一来，那些遥远的知识就变成了真切的生命体验，他不必“懂”太多，就可以帮助自己，并帮助很多人。<span class="Apple-converted-space">&nbsp;</span><br />如果说，高敏感度是一种天才素质，那么高行动力是更重要的天才素质。<span class="Apple-converted-space">&nbsp;</span><br />这个寓言还可以引申出另一种含义：不要太指望神秘的心理治疗的魔力。最重要的力量永远在你自己的身上，奥秘的知识、玄妙的潜能开发、炫目的成功学等等，都远不如你自己身上已有的力量重要。我们习惯去外面寻找答案，去别人那里寻找力量，结果忘记了力量就在自己身上。<span class="Apple-converted-space">&nbsp;</span><br />切记：别人的知识不能自动地拯救你。<span class="Apple-converted-space">&nbsp;</span><br />如果一些连珠的妙语打动了你，如果一些文字或新信条启发了你。那么，这些别人的文字和经验都只是一个开始，更重要的是，你把你以为好的知识真正运用到你自己的生命中去。<span class="Apple-converted-space">&nbsp;</span><br />犹太哲学家马丁·布伯的这句话，我一直认为是最重要的：<span class="Apple-converted-space">&nbsp;</span><br />你必须自己开始。假如你自己不以积极的爱去深入生存，假如你不以自己的方式去为自己揭示生存的意义，那么对你来说，生存就将依然是没有意义的。<span class="Apple-converted-space">&nbsp;</span></p>
<p>（六）放弃的寓言：蜜蜂与鲜花<span class="Apple-converted-space">&nbsp;</span></p>
<p>玫瑰花枯萎了，蜜蜂仍拼命吮吸，因为它以前从这朵花上吮吸过甜蜜。但是，现在在这朵花上，蜜蜂吮吸的是毒汁。<span class="Apple-converted-space">&nbsp;</span><br />蜜蜂知道这一点，因为毒汁苦涩，与以前的味道是天壤之别。于是，蜜蜂愤不过，它吸一口就抬起头来向整个世界抱怨，为什么味道变了？！<span class="Apple-converted-space">&nbsp;</span><br />终于有一天，不知道是什么原因，蜜蜂振动翅膀，飞高了一点。这时，它发现，枯萎的玫瑰花周围，处处是鲜花。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】<span class="Apple-converted-space">&nbsp;</span><br />这是关于爱情的寓言，是一位年轻的语文老师的真实感悟。<span class="Apple-converted-space">&nbsp;</span><br />有一段时间，她失恋了，很痛苦，一直想约我聊聊，希望我的心理学知识能给她一些帮助。我们一直约时间，但快两个月过去了，两人的时间总不能碰巧凑在一起。<span class="Apple-converted-space">&nbsp;</span><br />最后一次约她，她说：“谢谢！不用了，我想明白了。”<span class="Apple-converted-space">&nbsp;</span><br />原来，她刚从九寨沟回来。失恋的痛苦仍在纠缠她，让她神情恍惚，不能享受九寨沟的美丽。不经意的时候，她留意到一只小蜜蜂正在一朵鲜花上采蜜。那一刹那间，她脑子里电闪雷鸣般地出现了一句话：“枯萎的鲜花上，蜜蜂只能吮吸到毒汁。”<span class="Apple-converted-space">&nbsp;</span><br />当然，大自然中的小蜜蜂不会这么做，只有人类才这么傻，她这句话里的蜜蜂当然指她自己。这一刹那，她顿悟出了放弃的道理。以前，她想让我帮她走出来，但翅膀其实就长在她自己身上，她想飞就能飞。<span class="Apple-converted-space">&nbsp;</span><br />放弃并不容易，爱情中的放弃尤其令人痛苦。因为，爱情是对我们幼小时候的亲子关系的复制。幼小的孩子，无论从哪个方面看，都离不开爸爸妈妈。如果爸爸妈妈完全否定他，那对他来说就意味着死亡，这是终极的伤害和恐惧。我们多多少少都曾体验过被爸爸妈妈否定的痛苦和恐惧，所以，当爱情———这个亲子关系的复制品再一次让我们体验这种痛苦和恐惧时，我们的情绪很容易变得非常糟糕。<span class="Apple-converted-space">&nbsp;</span><br />不过，爱情和亲子关系相比，有一个巨大的差别：小时候，我们无能为力，一切都是父母说了算；但现在，我们长大了，我们有力量自己去选择自己的命运。可以说，童年时，我们是没有翅膀的小蜜蜂，但现在，我们有了一双强有力的翅膀了。<span class="Apple-converted-space">&nbsp;</span><br />但是，当深深地陷入爱情时，我们会回归童年，我们会忘记自己有一双可以飞翔的翅膀。等我们自己悟出这一点后，爱情就不再会是对亲子关系的自动复制，我们的爱情就获得了自由，就有了放弃的力量。<span class="Apple-converted-space">&nbsp;</span><br />切记：爱情是两个人的事情，两个完全平等的、有独立人格的人的事情。你可以努力，但不是说，你努力了就一定会有效果，因为另一个人，你并不能左右。<span class="Apple-converted-space">&nbsp;</span><br />所以，无论你多么在乎一次爱情，如果另一个人坚决要离开你，请尊重他的选择。<span class="Apple-converted-space">&nbsp;</span><br />并且，还要记得，你不再是童年，只能听凭痛苦的折磨。你已成人，你有一双强有力的翅膀，你完全可以飞出一个已经变成毒药的关系。<span class="Apple-converted-space">&nbsp;</span></p>
<p>（七）亲密的寓言：独一无二的玫瑰<span class="Apple-converted-space">&nbsp;</span></p>
<p>小王子有一个小小的星球，星球上忽然绽放了一朵娇艳的玫瑰花。以前，这个星球上只有一些无名的小花，小王子从来没有见过这么美丽的花，他爱上这朵玫瑰，细心地呵护她。<span class="Apple-converted-space">&nbsp;</span><br />那一段日子，他以为，这是一朵人世间唯一的花，只有他的星球上才有，其他的地方都不存在。<span class="Apple-converted-space">&nbsp;</span><br />然而，等他来到地球上，发现仅仅一个花园里就有5000朵完全一样的这种花朵。这时，他才知道，他有的只是一朵普通的花。<span class="Apple-converted-space">&nbsp;</span><br />一开始，这个发现，让小王子非常伤心。但最后，小王子明白，尽管世界上有无数朵玫瑰花，但他的星球上那朵，仍然是独一无二的，因为那朵玫瑰花，他浇灌过，给她罩过花罩，用屏风保护过，除过她身上的毛虫，还倾听过她的怨艾和自诩，聆听过她的沉默……一句话，他驯服了她，她也驯服了他，她是他独一无二的玫瑰。<span class="Apple-converted-space">&nbsp;</span><br />“正因为你为你的玫瑰花费了时间，这才使你的玫瑰变得如此重要。”一只被小王子驯服的狐狸对他说。<span class="Apple-converted-space">&nbsp;</span></p>
<p>【心理点评】<span class="Apple-converted-space">&nbsp;</span><br />这是法国名著《小王子》中一个有名的寓言故事，我曾读过十数遍，但仍然是直到2005年才明白这一点。<span class="Apple-converted-space">&nbsp;</span><br />面对着5000朵玫瑰花，小王子说：“你们很美，但你们是空虚的，没有人能为你们去死。”<span class="Apple-converted-space">&nbsp;</span><br />只有倾注了爱，亲密关系才有意义。但是，现在我们越来越流行空虚的“亲密关系”，最典型的就是因网络而泛滥的一夜情。<span class="Apple-converted-space">&nbsp;</span><br />我们急着去拥有。仿佛是，每多拥有过一朵玫瑰，自己的生命价值就多了一分。网络时代，拥有过数十名情人，已不再是太罕见的事情。但我所了解的这些滥情者，没有一个是不空虚的。他们并不享受关系，他们只享受征服。<span class="Apple-converted-space">&nbsp;</span><br />“征服欲望越强的人，对于关系的亲密度越没有兴趣。”广州白云心理医院的咨询师荣玮龄说，“没有拥有前，他们会想尽一切办法拉近关系的距离。但一旦拥有后，他们会迅速丧失对这个亲密关系的兴趣。征服欲望越强，丧失的速度越快。”<span class="Apple-converted-space">&nbsp;</span><br />对于这样的人，一个玫瑰园比起一朵独一无二的玫瑰花来，更有吸引力。<span class="Apple-converted-space">&nbsp;</span><br />然而，关系的美，正在乎两人的投入程度和被驯服程度。当两个人都自然而然地去投入，自然而然地被驯服后，关系就会变成人生养料，让一个人的生命变得更充盈、更美好。<span class="Apple-converted-space">&nbsp;</span><br />但是，无论多么亲密。小王子仍是小王子，玫瑰仍是玫瑰，他们仍然是两个个体。如果玫瑰不让小王子旅行，或者小王子旅行时非将玫瑰花带在身上，两者一定要黏在一起，关系就不再是享受，而会变成一个累赘。<span class="Apple-converted-space">&nbsp;</span><br />切记：一个既亲密而又相互独立的关系，胜于一千个一般的关系。这样的关系，会把我们从不可救药的孤独感中拯救出来，是我们生命中最重要的一种救赎。<span class="Apple-converted-space">&nbsp;</span><br />如果不曾体验过，你就无法知道这种关系的美。</span></p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/229.html" title="设计模式之Life time controller模式 (2006-11-27)">设计模式之Life time controller模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/228.html" title="设计模式之Double Checked Locking模式 (2006-11-27)">设计模式之Double Checked Locking模式</a> (0)</li>
	<li><a href="http://www.donevii.com/post/110.html" title="翻译：On having layout (2006-10-24)">翻译：On having layout</a> (0)</li>
	<li><a href="http://www.donevii.com/post/171.html" title="泛型：类型化缓存(I) (2006-11-05)">泛型：类型化缓存(I)</a> (0)</li>
	<li><a href="http://www.donevii.com/post/64.html" title="模型-视图-控制器 (2006-09-01)">模型-视图-控制器</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/553.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>苹果放弃 IPhone 已发布软件的 NDA 协议</title>
		<link>http://www.donevii.com/post/535.html</link>
		<comments>http://www.donevii.com/post/535.html#comments</comments>
		<pubDate>Thu, 02 Oct 2008 00:41:23 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/535.html</guid>
		<description><![CDATA[是个好消息，相对于 Google 的 OPEN，苹果有些太保留，但是相对的，产品的“品质”是有保证的。不过对于这类的 NDA&#160; 让一些对 IPHONE 开发有兴趣的人也造成了一些阻碍。这次 DROP 掉已发布软... ]]></description>
			<content:encoded><![CDATA[<p>是个好消息，相对于 Google 的 OPEN，苹果有些太保留，但是相对的，产品的“品质”是有保证的。不过对于这类的 NDA&nbsp; 让一些对 IPHONE 开发有兴趣的人也造成了一些阻碍。这次 DROP 掉已发布软件的 NDA 后，应该会促进 IPHONE 开发的相关书籍和讨论了吧？对开发者社区是有利的。</p>
<p><a href="http://item.feedsky.com/%7Efeedsky/apple4us/%7E6348789/120435297/4456728/1/item.html">APPLE4US的报道</a></p>
<p><a href="http://www.flickr.com/photos/80415656@N00/2905244946"><img src="http://farm4.static.flickr.com/3098/2905244946_be3188ea17.jpg" /></a></p>
<p>apple drop the non-disclosure agreement for released iphone software</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/96.html" title="角色设计简介 (2006-10-19)">角色设计简介</a> (0)</li>
	<li><a href="http://www.donevii.com/post/110.html" title="翻译：On having layout (2006-10-24)">翻译：On having layout</a> (0)</li>
	<li><a href="http://www.donevii.com/post/272.html" title="深入Native应用程序 (2007-01-03)">深入Native应用程序</a> (0)</li>
	<li><a href="http://www.donevii.com/post/171.html" title="泛型：类型化缓存(I) (2006-11-05)">泛型：类型化缓存(I)</a> (0)</li>
	<li><a href="http://www.donevii.com/post/64.html" title="模型-视图-控制器 (2006-09-01)">模型-视图-控制器</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/535.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>google背后的分布式架构</title>
		<link>http://www.donevii.com/post/504.html</link>
		<comments>http://www.donevii.com/post/504.html#comments</comments>
		<pubDate>Tue, 23 Sep 2008 08:48:29 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[平台]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[缓存]]></category>
		<category><![CDATA[芯片]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/504.html</guid>
		<description><![CDATA[　　Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用  (比如那个大堂里的地球模型)，更在于其有别常规的IT策略……
　　加利福尼亚州山景城(Mountain  View)Google公司(Googl... ]]></description>
			<content:encoded><![CDATA[<p>　　Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用  (比如那个大堂里的地球模型)，更在于其有别常规的IT策略……</p>
<p>　　加利福尼亚州山景城(Mountain  View)Google公司(Google，下称Google)总部有一个43号大楼，该建筑的中央大屏幕上显示着一个与Google地球(Google  Earth)相仿的世界地图，一个转动的地球上不停地闪动着五颜六色的光点，恍如罗马宫廷的千万烛灯，每一次闪动标志着地球的这个角落一名Google用  户发起了一次新的搜索。</p>
<p>　　这同时意味着Google又一次满足了人们对未知信息的好奇与渴望。</p>
<p>　　Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用  (比如那个大堂里的地球模型)，更在于其有别常规的IT策略。从人们的常理来看，简单的硬件商品和免费软件是无法构建出一个帝国的，但是Google做到  了。在性能调整后，Google把它们变成一个无可比拟的分布式计算平台，该平台能够支持大规模的搜索和不断涌现的新兴应用。我们原本认为这些应用都是个  人消费级别的，但是Google改变了这一切。现在商业世界也在使用它们，这就令这家搜索公司显得那么与众不同。</p>
<p>　　GoogleWeb  服务背后的IT架构对无数使用搜索引擎的用户来说也许并不是非常重要，但它是Google几百位致力于把全球信息组织起来，实现“随处可达，随时可用”目  标的工程师们的最核心工作。这就需要一个在覆盖范围和野心上都与Google的商业愿景完全相符的IT蓝图作为支撑。</p>
<p>　　Google  的经理们一直对公司的IT策略话题保持沉默，他们厌恶谈及特定的厂商或者产品，当被问到他们的服务器和数据中心时，他们总是闭口不谈。但与几位  Google的IT领导一起呆了一天后，我们最终得以揭示该公司的IT是如何运作的，那可不仅仅是一个运行在无数服务器集群上的、表面看来非常简单的搜索  引擎。在其简单的外表下，蕴涵着许多内部研发软件、定制硬件、人工智能，以及对性能的执着追求和打破常规的人力管理模式。</p>
<p>　　IT理念方面，Google对同行有一条建议：尽量避免那些人人都在使用的系统和软件，以自己的方式做事会更有独特的竞争优势。</p>
<p>　　“企业文化决定了你的做事方式。”道格拉斯&#8221;美林(Douglas  Merrill)，这位Google工程副总裁和事实上的首席信息官(CIO)  指出，“到了我们这样的发展阶段，企业观念和文化非常与众不同，这也反过来鞭策我们必须要采用与众不同的方式来运行那些他人看来很常规的系统。”<br />
　　Google  最大的IT优势在于它能建造出既富于性价比(并非廉价)又能承受极高负载的高性能系统。因此IT顾问史蒂芬&#8221;阿诺德(Stephen  Arnold)指出，Google与竞争对手，如亚马逊网站(Amazon)、电子港湾公司(eBay)、微软公司(Microsoft，下称微软)和雅 虎公司  (Yahoo，下称雅虎)等公司相比，具有更大的成本优势。Google程序员的效率比其他Web公司同行们高出50%～100%，原因是Google已  经开发出了一整套专用于支持大规模并行系统编程的定制软件库。据他估算，其他竞争公司可能要花上四倍的时间才能获得同等的效果。</p>
<p>　　打造服务器</p>
<p>　　Google  究竟是怎样做到这点的呢?其中一个手段，美林认为，“是因为我们自己动手打造硬件。”Google并不制造计算机系统，但它根据自己的参数定制硬件，然后  像MTV的节目“靓车打造”(Pimp My Ride)那样自己安装和调整硬件系统。开源程序经理克里斯&#8221;迪博纳(Chris  DiBona)评论道：“我们很善于购买商业服务器，并且改造他们为我们所用，最后把性能压榨和发挥到极致，以致有时候他们热得像要融化了似的。”</p>
<p>　　这种亲手打造的方式，来源于Google从车库诞生时与生俱来的节俭风格，更与Google那超大型的系统规模息息相关，良好的习惯一直延续至  今。据说 Google在65个数据中心拥有20万～45万台服务器—这个数目会有偏差(取决于你如何定义服务器和由谁来做这项统计)。但是，不变的是持续上升的趋势。</p>
<p>　　Google不会去讨论这些资产，因为它认为保密也是一种竞争优势。事实上，Google之所以喜欢开源软件也是因为它的私密性。“如果我们购  买了软件许可或代码许可，人们只要对号入座，就可以猜出Google的IT基础架构。”迪博纳分析说，  “使用开源软件，就使我们多了一条把握自己命运的途径。”</p>
<p>　　Google喜欢规模化的服务器运行方式。当有成百上千台机器时，定制服务器的优势也会成倍增加，效果也会更趋明显。Google正在俄勒冈州  哥伦比亚河边的达勒斯市建造一个占地30亩的数据中心，在那儿它可以获得运算和降温需要的低价水力电力能源(参见边栏《Google数据中心自有一套》)。</p>
<p>　　Google以“单元”(Cell)的形式组织这些运行  Linux操作系统的服务器，迪博纳把这种形式比喻成互联网服务的“磁盘驱动器”(但别和一直谣传的Google存储服务Gdrive混淆了，“并没有  Gdrive这回事。”一位Google女发言人明确表示。)，公司的软件程序都驻扎在这些并不昂贵的电脑机箱里，由程序员决定它们的冗余工作量。这种由  很多单元组成的文件系统代替了商业存储设备;迪博纳表示Google这些单元设备更易于建造和维护，他还暗示他们能处理更大规模的数据。</p>
<p>　　Google  不会漏过对任何技术细节的关注。多年来，公司的工程师就在研究微处理器的内部工作机制，随着Google规模的持续壮大，必然会用到特别定制和调节过的芯  片。知名工程师路易斯&#8221;巴罗索(Luiz  Barroso)去年在一篇发表在工业杂志上的论文中证实，近年来Google的主要负荷都由单核设计的系统承担着。但许多服务器端的应用，如  Google搜索索引服务，所需的并行计算在单核芯片的指令级别上执行得并不好。</p>
<p>　　曾在数据设备公司(Digital  Equipment)和康柏公司(Compaq)当过芯片设计师的巴罗索认为，随着AMD公司、英特尔公司(Intel)、太阳计算机系统公司(Sun)开始制造多核芯片，必将会出现越来越多芯片级别的并行计算。</p>
<p>　　Google  也曾考虑过自己制造计算机芯片，但从业界潮流来看，这个冒险的举动似乎不是很必要。“微处理器的设计非常复杂而且成本昂贵，”运营高级副总裁乌尔斯&#8221;霍尔 茨勒(Urs  Holzle)表示。Google宁愿与芯片制造商合作，让他们去理解自己的应用并设计适合的芯片。这是一种客户建议式的设计，其关注点在于总体吞吐量、  效能，以及耗电比，而不是看单线程的峰值性能。霍尔茨勒表示，“这也是最近多核CPU的设计潮流与未来方向。”<br />
裁缝般地定制软件</p>
<p>　　为了能尽量压榨硬件性能，Google开发了相当数量的定制软件。创新产品主要包括用于简化处理和创建大规模数据集的编程模型  MapReduce;用于存储和管理大规模数据的系统BigTable;分析分布式运算环境中大规模数据集的解释编程语言Sawzall;用于数据密集型  应用的分布式文件系统的 “Google文件系统”(Google File  System);还有为处理分布式系统队列分组和任务调度的“Google工作队列”(Google  Workqueue)。</p>
<p>　　正是从Sawzall这些工具里体现出Google对计算效率的执著关注。并不是每家公司都能从底层去解决效率问题，但是对Google来说，  为常规关系型数据库无法容纳的大规模数据集专门设计一种编程语言是完全合理的。即使其他编程工具可以解决问题，Google的工程师们仍然会为了追求效率  而另外开发一套定制方案。Google工程师认为，Sawzall能与C++中的MapReduce相媲美，而且它更容易编写一些。</p>
<p>　　Google  对效率的关注使它不可能对标准Linux内核感到满意;Google会根据自己的需要运行修改过的内核版本。通过调整Linux的底层性能，Google  工程师们在提高了整体系统可靠性的基础上，还一并解决了数据损坏和数据瓶颈等一系列棘手问题。对内核的修改也使Google的计算机集群系统因为通信效率  的提高而运行得更快。</p>
<p>　　当然，Google偶尔也会出现系统故障，情况一旦发生，无数的用户就会受到影响了。三年前一次持续30分钟的系统故障使20%的搜索流量受到影响。</p>
<p>　　Google  开发了自己的网站服务器却没有使用开源的Apache服务器，尽管它在网站服务器的市场占有率超过60%。迪博纳认为，Google的网站服务器可以运行  在更多数量的主机上，对Google站点上内容庞大又彼此互相依赖的应用程序来说，这种服务器的负载均衡能力远比Apache的能力更高。同时，在用标准  公共网关接口(CGI)访问数据库动态网页方面，Google服务器的编程难度要比  Apache更高，但是最终运行速度却更快。“如果我们能够压榨出10%～20%的性能，我们就可以节省出更多系统资源、电量和人力了。”迪博纳在总结中指出。</p>
<p>　　Google还设计了自己的客户关系管理(CRM)系统用于支持自己基于竞价和点击的互联网广告收费业务。但对是否需要设计自己的工具，Google的态度也不是一成不变的。比如在财会软件上，它就使用了甲骨文公司(Oracle)的Financials软件。</p>
<p>　　美林拿着一只叉子举例说明现成的产品也可以带来价值。但在有些场合现成的软件产品就不一定适用了。“我们的文化在各个层面对我们的运作都有深远影响，”他表示，“所以我们不想让购买所得的工具改变我们的工作方式和文化层面。”<br />
Google&#8217;s  BigTable 原理 （翻译）</p>
<p>    题记：google 的成功除了一个个出色的创意外，还因为有 Jeff Dean  这样的软件架构天才。<br />
                                                  &#8212;&#8212; 编者</p>
<p>官方的  Google Reader blog 中有对BigTable 的解释。这是Google 内部开发的一个用来处理大数据量的系统。这种系统适合处理半结构化的数据比如  RSS 数据源。 以下发言  是 Andrew Hitchcock  在 2005 年10月18号 基于： Google 的工程师 Jeff Dean  在华盛顿大学的一次谈话 (Creative Commons License).</p>
<p>首先，BigTable 从 2004  年初就开始研发了，到现在为止已经用了将近8个月。（2005年2月）目前大概有100个左右的服务使用BigTable，比如： Print,Search  History,Maps和 Orkut。根据Google的一贯做法，内部开发的BigTable是为跑在廉价的PC机上设计的。BigTable  让Google在提供新服务时的运行成本降低，最大限度地利用了计算能力。</p>
<p>BigTable 是建立在 GFS ，Scheduler ，Lock Service 和  MapReduce 之上的。</p>
<p>每个Table都是一个多维的稀疏图 sparse map。Table 由行和列组成，并且每个存储单元 cell  都有一个时间戳。在不同的时间对同一个存储单元cell有多份拷贝，这样就可以记录数据的变动情况。在他的例子中，行是URLs  ，列可以定义一个名字，比如：contents。Contents  字段就可以存储文件的数据。或者列名是：”language”，可以存储一个“EN”的语言代码字符串。</p>
<p>为了管理巨大的Table，把Table根据行分割，这些分割后的数据统称为：Tablets。每  个Tablets大概有 100-200 MB，每个机器存储100个左右的  Tablets。底层的架构是：GFS。由于GFS是一种分布式的文件系统，采用Tablets的机制后，可以获得很好的负载均衡。比如：可以把经常响应  的表移动到其他空闲机器上，然后快速重建。</p>
<p>Tablets在系统中的存储方式是不可修改的 immutable  的SSTables，一台机器一个日志文件。当系统的内存满后，系统会压缩一些Tablets。由于Jeff在论述这点的时候说的很快，所以我没有时间把听到的都记录下来，因此下面是一个大概的说明：</p>
<p>压缩分为：主要和次要的两部分。次要的压缩仅仅包括几个Tablets，而主要的压缩时关于整个系统的压缩。主压缩有回收硬盘空间的功能。Tablets的位置实际上是存储在几个特殊的BigTable的存储单元cell中。看起来这是一个三层的系统。<br />
客户端有一个指向METAO的Tablets的指针。如果METAO的Tablets被频繁使用，那个这台机器就会放弃其他的tablets专门支持  METAO这个Tablets。METAO tablets  保持着所有的META1的tablets的记录。这些tablets中包含着查找tablets的实际位置。（老实说翻译到这里，我也不太明白。）在这个系统中不存在大的瓶颈，因为被频繁调用的数据已经被提前获得并进行了缓存。</p>
<p>     现在我们返回到对列的说明：列是类似下面的形式：  family:optional_qualifier。在他的例子中，行：www.search-analysis.com   也许有列：”contents:其中包含html页面的代码。 “ anchor:cnn.com/news” 中包含着  相对应的url，”anchor:www.search-analysis.com/” 包含着链接的文字部分。列中包含着类型信息。<br />
     (翻译到这里我要插一句，以前我看过一个关于万能数据库的文章，当时很激动，就联系了作者，现在回想起来，或许google的 bigtable  才是更好的方案，切不说分布式的特性，就是这种建华的表结构就很有用处。)</p>
<p>     注意这里说的是列信息，而不是列类型。列的信息是如下信息，一般是：属性/规则。 比如：保存n份数据的拷贝或者保存数据n天长等等。当 tablets  重新建立的时候，就运用上面的规则，剔出不符合条件的记录。由于设计上的原因，列本身的创建是很容易的，但是跟列相关的功能确实非常复杂的，比如上文提到 的  类型和规则信息等。为了优化读取速度，列的功能被分割然后以组的方式存储在所建索引的机器上。这些被分割后的组作用于 列 ,然后被分割成不同的  SSTables。这种方式可以提高系统的性能，因为小的，频繁读取的列可以被单独存储，和那些大的不经常访问的列隔离开来。</p>
<p>在一台机器上的所有的  tablets  共享一个log，在一个包含1亿的tablets的集群中，这将会导致非常多的文件被打开和写操作。新的log块经常被创建，一般是64M大小，这个GFS的块大小相等。当一个机器down掉后，控制机器就会重新发布他的log块到其他机器上继续进行处理。这台机器重建tablets然后询问控制机器处理结构的存储位置，然后直接对重建后的数据进行处理。这个系统中有很多冗余数据，因此在系统中大量使用了压缩技术。</p>
<p>     Dean 对压缩的部分说的很快，我没有完全记下来，所以我还是说个大概吧：压缩前先寻找相似的 \行，列，和时间数据。</p>
<p>    他们使用不同版本的：  BMDiff 和 Zippy 技术。</p>
<p>   BMDiff 提供给他们非常快的写速度： 100MB/s – 1000MB/s 。Zippy 是和 LZW  类似的。Zippy 并不像 LZW 或者 gzip 那样压缩比高，但是他处理速度非常快。</p>
<p>    Dean 还给了一个关于压缩 web  蜘蛛数据的例子。这个例子的蜘蛛 包含 2.1B 的页面，行按照以下的方式命名：“com.cnn.www/index.html:http”.在未压缩前的web  page 页面大小是：45.1 TB ，压缩后的大小是：4.2 TB ， 只是原来的 9.2%。Links 数据压缩到原来的 13.9% ,  链接文本数据压缩到原来的 12.7%。<br />
<span id="more-504"></span><br />
Google 还有很多没有添加但是已经考虑的功能。<br />
    1.   数据操作表达式，这样可以把脚本发送到客户端来提供修改数据的功能。<br />
    2. 多行数据的事物支持。<br />
    3.   提高大数据存储单元的效率。<br />
    4. BigTable 作为服务运行。<br />
    好像：每个服务比如： maps 和 search history  历史搜索记录都有他们自己的集群运行 BigTable。<br />
    他们还考虑运行一个全局的 BigTable  系统，但这需要比较公平的分割资源和计算时间。</p>
<p>大表(Bigtable):结构化数据的分布存储系统</p>
<p>http://labs.google.com/papers/bigtable-osdi06.pdf</p>
<p>｛中是译者评论,程序除外｝<br />
{本文的翻译可能有不准确的地方,详细资料请参考原文.}</p>
<p>摘要<br />
bigtable是设计来分布存储大规模结构化数据的，从设计上它可以扩展到上２^50字节，分布存储在几千个普通服务器上．google的很多项目使用  bt来存储数据，包括网页查询，google  earth和google金融．这些应用程序对bt的要求各不相同：数据大小（从URL到网页到卫星图象）不同，反应速度不同（从后端的大批处理到实时数  据服务）．对于不同的要求，bt都成功的提供了灵活高效的服务．在本文中，我们将描述bt的数据模型．这个数据模型让用户动态的控制数据的分布和结构．我  们还将描述BT的设计和实现．<br />
１．介绍<br />
在过去两年半里，我们设计，实现并部署了BT．BT是用来分布存储和管理结构化数据的．BT的设计使它能够管理2^50  bytes(petabytes)数据，并可以部署到上千台机器上．BT完成了以下目标：应用广泛，可扩展，高性能和高可用性（high availability）.  包括google analytics, google finance, orkut, personalized search, writely和google  earth在内的60多个项目都使用BT.这些应用对BT的要求各不相同，有的需要高吞吐量的批处理，有的需要快速反应给用户数据．它们使用的BT集群也各不相同，有的只有几台机器，有的有上千台，能够存储2^40字节(terabytes)数据．<br />
BT在很多地方和数据库很类似：它使用了很多数据库的实现策略．并行数据库[14]和内存数据库[13]有可扩展性和高性能，但是BT的界面不同．BT不支持完全的关系数据模型；而是为客户提供了简单的数据模型，让客户来动态控制数据的分布和格式{就是只存储字串，格式由客户来解释}，并允许客户推断底层存储数据的局部性｛以提高访问速度｝．数据下标是行和列的名字，数据本身可以是任何字串．BT的数据是字串，没有解释｛类型等｝．客户会在把各种结构或者半结构化的数据串行化｛比如说日期串｝到数据中．通过仔细选择数据表示，客户可以控制数据的局部化．最后，可以使用BT模式来控制数据是放在内存里还是在硬盘上．｛就是说用模式，你可以把数据放在离应用最近的地方．毕竟程序在一个时间只用到一块数据．在体系结构里，就是：locality,  locality,  locality｝<br />
第二节描述数据模型细节．第三节关于客户API概述．第四节简介BT依赖的google框架．第五节描述BT的实现关键部分．第6节叙述提高BT性  能的一些调整．第7节提供BT性能的数据．在第8节，我们提供BT的几个使用例子，第9节是经验教训．在第10节，我们列出相关研究．最后是我们的结论．<br />
２．数据模型<br />
BT是一个稀疏的，长期存储的｛存在硬盘上｝，多维度的，排序的映射表．这张表的索引是行关键字，列关键字和时间戳．每个值是一个不解释的字符数组．｛数据都是字符串，没类型，客户要解释就自力更生吧｝．<br />
(row:string,  column:string,time:int64)-&gt;string  {能编程序的都能读懂，不翻译了}<br />
我们仔细查看过好些类似bigtable的系统之后定下了这个数据模型。举一个具体例子（它促使我们做出某些设计决定），  比如我们想要存储大量网页及相关信息，以用于很多不同的项目；我们姑且叫它Webtable。在Webtable里，我们将用URL作为行关键字，用网页  的某些属性作为列名，把网页内容存在contents:列中并用获取该网页的时间戳作为标识，如图一所示。<br />
图一：一个存储Web网页的范例列表片断。行名是一个反向URL｛即com.cnn.www｝。contents列族｛原文用  family，译为族，详见列族｝ 存放网页内容，anchor列族存放引用该网页的锚链接文本。CNN的主页被Sports  Illustrater｛即所谓SI，CNN的王牌体育节目｝和MY-look的主页引用，因此该行包含了名叫“anchor:cnnsi.com”和  “anchhor:my.look.ca”的列。每个锚链接只有一个版本｛由时间戳标识，如t9，t8｝；而contents列则有三个版本，分别由时间  戳t3，t5，和t6标识。<br />
行<br />
表中的行关键字可以是任意字符串（目前支持最多64KB，多数情况下10－100字节足够了）。在一个行关键字下的每一个读写操作都是原子操作（不管读写这一行里多少个不同列），这是一个设计决定，这样在对同一行进行并发操作时，用户对于系统行为更容易理解和掌控。<br />
Bigtable通过行关键字的字典序来维护数据。一张表可以动态划分成多个连续行。连续行在这里叫做“子表”｛tablet｝，是数据分布和负载  均衡的单位。这样一来，读较少的连续行就比较有效率，通常只需要较少机器之间的通信即可。用户可以利用这个属性来选择行关键字，从而达到较好数据访问地域  性｛locality｝。举例来说，在Webtable里，通过反转URL中主机名的方式，可以把同一个域名下的网页组织成连续行。具体来说，可以把  maps.google.com/index.html中的数据存放在关键字com.google.maps/index.html下。按照相同或属性相  近的域名来存放网页可以让基于主机和基于域名的分析更加有效。<br />
列族<br />
一组列关键字组成了“列族”，这是访问控制的基本单位。同一列族下存放的所有数据通常都是同一类型（同一列族下的数据可压缩在一起）。列族必须先创  建，然后在能在其中的列关键字下存放数据；列族创建后，族中任何一个列关键字均可使用。我们希望，一张表中的不同列族不能太多（最多几百个），并且列族在  运作中绝少改变。作为对比，一张表可以有无限列。<br />
列关键字用如下语法命名：列族：限定词。  列族名必须是看得懂｛printable｝的字串，而限定词可以是任意字符串。比如，Webtable可以有个列族叫language，存放撰写网页的语  言。我们在language列族中只用一个列关键字，用来存放每个网页的语言标识符。该表的另一个有用的列族是anchor；给列族的每一个列关键字代表  一个锚链接，如图一所示。而这里的限定词则是引用该网页的站点名；表中一个表项存放的是链接文本。<br />
访问控制，磁盘使用统计，内存使用统计，均可在列族这个层面进行。在Webtable举例中，我们可以用这些控制来管理不同应用：有的应用添加新的基本数据，有的读取基本数据并创建引申的列族，有的则只能浏览数据（甚至可能因为隐私权原因不能浏览所有数据）。<br />
时间戳<br />
Bigtable表中每一个表项都可以包含同一数据的多个版本，由时间戳来索引。Bigtable的时间戳是64位整型。可以由Bigtable来  赋值，表示准确到毫秒的“实时”；或者由用户应用程序来赋值。需要避免冲突的应用程序必须自己产生具有唯一性的时间戳。不同版本的表项内容按时间戳倒序排  列，即最新的排在前面。<br />
为了简化对于不同数据版本的数据的管理，我们对每一个列族支持两个设定，以便于Bigtable对表项的版本自动进行垃圾清除。用户可以指明只保留表项的最后n个版本，或者只保留足够新的版本（比如，只保留最近7天的内容）。<br />
在Webtable举例中，我们在contents:列中存放确切爬行一个网页的时间戳。如上所述的垃圾清除机制可以让我们只保留每个网页的最近三个版本。<br />
3.API<br />
BT的API提供了建立和删除表和列族的函数．还提供了函数来修改集群，表和列族的元数据，比如说访问权限．<br />
//  Open the table<br />
Table *T = OpenOrDie(”/bigtable/web/webtable”);<br />
// Write a  new anchor and delete an old anchor<br />
RowMutation r1(T,  “com.cnn.www”);<br />
r1.Set(”anchor:www.c-span.org”,  “CNN”);<br />
r1.Delete(”anchor:www.abc.com”);<br />
Operation op;<br />
Apply(&amp;op,  &amp;r1);<br />
图 2:  写入Bigtable.<br />
在BT中，客户应用可以写或者删除值，从每个行中找值，或者遍历一个表中的数据子集．图2的c++代码是使用RowMutation抽象表示来进行一系列的更新（为保证代码精简，没有包括无关的细节）．调用Apply函数，就对Ｗebtable进行了一个原子修改：它为http://www.cnn.com/增加了一个锚点，并删除了另外一个锚点．<br />
Scanner  scanner(T);<br />
ScanStream *stream;<br />
stream =  scanner.FetchColumnFamily(”anchor”);<br />
stream-&gt;SetReturnAllVersions();<br />
scanner.Lookup(”com.cnn.www”);<br />
for  (; !stream-&gt;Done(); stream-&gt;Next()) {<br />
printf(”%s %s %lld  %s\n”,<br />
scanner.RowName(),<br />
stream-&gt;ColumnName(),<br />
stream-&gt;MicroTimestamp(),<br />
stream-&gt;Value());<br />
}<br />
图3:  从Bigtable读数据.<br />
图3的C++代码是使用Scanner抽象来遍历一个行内的所有锚点．客户可以遍历多个列族．有很多方法可以限制一次扫描中产生的行，列和时间戳．  例如，我们可以限制上面的扫描，让它只找到那些匹配正则表达式*.cnn.com的锚点，或者那些时间戳在当前时间前10天的锚点．<br />
BT还支持其他一些更复杂的处理数据的功能．首先，BT支持单行处理．这个功能可以用来对存储在一个行关键字下的数据进行原子的读-修改-写操作．  BT目前不支持跨行关键字的处理，但是它有一个界面，可以用来让客户进行批量的跨行关键字处理操作．其次，BT允许把每个表项用做整数记数器．最后，BT  支持在服务器的地址空间内执行客户端提供的脚本程序．脚本程序的语言是google开发的Sawzall[28]数据处理语言．目前，我们基于的  Sawzall的API还不允许客户脚本程序向BT内写数据，但是它允许多种形式的数据变换，基于任何表达式的过滤和通过多种操作符的摘要．<br />
BT可以和MapReduce[12]一起使用．MapReduce是google开发的大规模并行计算框架．我们为编写了一套外层程序，使BT可以作为MapReduce处理的数据源头和输出结果．<br />
4.建立BT的基本单元<br />
BT是建立在其他数个google框架单元上的．BT使用google分布式文件系统(GFS)[17]来存储日志和数据文件{yeah,  right, what else can it use,  FAT32?}．一个BT集群通常在一个共享的机器池中工作，池中的机器还运行其他的分布式应用{虽然机器便宜的跟白菜似的，可是一样要运行多个程序，命苦的象小白菜}，BT和其他程序共享机器｛BT的瓶颈是ＩＯ/内存，可以和CPU要求高的程序并存｝．BT依赖集群管理系统来安排工作，在共享的机器上管理资源，处理失效机器并监视机器状态｛典型的server  farm结构，BT是上面的应用之一｝．<br />
BT内部存储数据的格式是google  SSTable格式．一个SSTable提供一个从关键字到值的映射，关键字和值都可以是任意字符串．映射是排序的，存储的｛不会因为掉电而丢失｝，不可改写的．可以进行以下操作：查询和一个关键字相关的值；或者根据给出的关键字范围遍历所有的关键字和值．在内部，每个SSTable包含一列数据块（通常每个块的大小是64KB,但是大小是可以配置的｛索引大小是16  bits，应该是比较好的一个数｝）．块索引（存储在SSTable的最后）用来定位数据块；当打开SSTable的时候，索引被读入内存｛性能｝．每次查找都可以用一个硬盘搜索完成｛根据索引算出数据在哪个道上，一个块应该不会跨两个道，没必要省那么点空间｝：首先在内存中的索引里进行二分查找找到数据块的位置，然后再从硬盘读去数据块．最佳情况是：整个SSTable可以被放在内存里，这样一来就不必访问硬盘了．｛想的美，前面是谁口口声声说要跟别人共享机器来着？你把内存占满了别人上哪睡去？｝<br />
BT还依赖一个高度可用的，存储的分布式数据锁服务Chubby[8]｛看你怎么把这个high  performance给说圆喽｝．一个Chubby服务由5个活的备份｛机器｝构成，其中一个被这些备份选成主备份，并且处理请求．这个服务只有在大多数备份都活着并且互相通信的时候才是活的｛绕口令？去看原文吧，是在有出错的前提下的冗余算法｝．当有机器失效的时候，Chubby使用Paxos算法[9,23]来保证备份的一致性｛这个问题还是比较复杂的，建议去看引文了解一下问题本身｝．Chubby提供了一个名字空间，里面包括了目录和小文件｛万变不离其宗｝．每个目录或者文件可以当成一个锁来用，读写文件操作都是原子化的．Chubby客户端的程序库提供了对Chubby文件的一致性缓存｛究竟是提高性能还是降低性能？如果访问是分布的，就是提高性能｝．每个Chubby客户维护一个和Chubby服务的会话．如果一个客户不能在一定时间内更新它的会话，这个会话就过期失效了｛还是针对大server  farm里机器失效的频率设计的｝．当一个会话失效时，其拥有的锁和打开的文件句柄都失效｛根本设计原则：失效时回到安全状态｝．Chubby客户可以在文件和目录上登记回调函数，以获得改变或者会话过期的通知．｛翻到这里，有没有人闻到java的味道了？｝<br />
BT使用Chubby来做以下几个任务：保证任何时间最多只有一个活跃的主备份；来存储BT数据的启动位置（参考5.1节）；发现小表  （tablet）服务器，并完成tablet服务器消亡的善后（5.2节）；存储BT数据的模式信息（每张表的列信息）；以及存储访问权限列表．如果有相当长的时间Chubby不能访问，BT就也不能访问了｛任何系统都有其弱点｝．最近我们在使用11个Chubby服务实例的14个BT集群中度量了这个效果，由于Chubby不能访问而导致BT中部分数据不能访问的平均百分比是0.0047%,这里Chubby不能访问的原因是Chubby本身失效或者网络问题．单个集群里，受影响最大的百分比是0.0326%｛基于文件系统的Chubby还是很稳定的｝.<br />
GFS是一个可扩展的分布式文件系统，用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上，但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。<br />
出处：http://labs.google.com/papers/gfs.html<br />
1、设计概览<br />
（1）设计想定<br />
GFS与过去的分布式文件系统有很多相同的目标，但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动，这反映了它与早期的文件系统明显不同的设想。这就需要对传统的选择进行重新检验并进行完全不同的设计观点的探索。<br />
GFS与以往的文件系统的不同的观点如下：<br />
1、部件错误不再被当作异常，而是将其作为常见的情况加以处理。因为文件系统由成百上千个用于存储的机器构成，而这  些机器是由廉价的普通部件组成并被大量的客户机访问。部件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时地监控、错  误检测、容错、自动恢复对系统来说必不可少。<br />
2、按照传统的标准，文件都非常大。长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理  快速增长的、包含数以万计的对象、长度达TB的数据集时，我们很难管理成千上万的KB规模的文件块，即使底层文件系统提供支持。因此，设计中操作的参数、  块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效，对小型的文件也必须支持，但不必优化。<br />
3、大部分文件的更新是通过添加  新数据完成的，而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完，文件就只可读，很多数据都有这些特性。一些数据可能组成一  个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据，有些是在某个机器上产生、在另外一个机器上处理的中间数据。  由于这些对大型文件的访问方式，添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。<br />
4、工作量主要由两种读操作构成：对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中，  可能要读几百KB，通常达  1MB和更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个KB。性能敏感的应用程序通常将对少量  数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进，而不要让它来来回回的读。<br />
5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完，文件很少改动。在随机位置对少量数据的写操作也支持，但不必非常高效。<br />
6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。<br />
（2）系统接口<br />
GFS提供了一个相似地文件系统界面，虽然它没有向POSIX那样实现标准的API。文件在目录中按层次组织起来并由路径名标识。<br />
（3）体系结构：<br />
一个GFS集群由一个master和大量的chunkserver构成，并被许多客户（Client）访问。如图1  所示。Master和  chunkserver通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许，chunkserver和client可以运行在同一个机器  上。<br />
文件被分成固定大小的块。每个块由一个不变的、全局唯一的64位的chunk－handle标识，chunk－ handle是在块创建时由  master分配的。ChunkServer将块当作Linux文件存储在本地磁盘并可以读和写由chunk－handle和位区间指定的数据。出于可靠  性考虑，每一个块被复制到多个chunkserver上。默认情况下，保存3个副本，但这可以由用户指定。<br />
Master维护文件系统所以的元数据（metadata），包括名字空间、访问控制信息、从文件到块的映射以及块  的当前位置。它也控制系统范围的活动，如块租约（lease）管理，孤儿块的垃圾收集，chunkserver间的块迁移。Master定期通过  HeartBeat消息与每一个  chunkserver通信，给chunkserver传递指令并收集它的状态。<br />
与每个应用相联的GFS客户代码实现了文件系统的API并与master和chunkserver通信以代表应用程序读和写数据。客户与master的交换只限于对元数据（metadata）的操作，所有数据方面的通信都直接和chunkserver联系。<br />
客户和chunkserver都不缓存文件数据。因为用户缓存的益处微乎其微，这是由于数据太多或工作集太大而无法  缓存。不缓存数据简化了客户程序和整个系统，因为不必考虑缓存的一致性问题。但用户缓存元数据（metadata）。Chunkserver也不必缓存文  件，因为块时作为本地文件存储的。<br />
（4）单master。<br />
只有一个master也极大的简化了设计并使得master可以根据全局情况作出先进的块放置和复制决定。但是我们  必须要将master对读和写的参与减至最少，这样它才不会成为系统的瓶颈。Client从来不会从master读和写文件数据。Client只是询问  master它应该和哪个  chunkserver联系。Client在一段限定的时间内将这些信息缓存，在后续的操作中Client直接和chunkserver交互。<br />
以图1解释一下一个简单的读操作的交互。<br />
1、client使用固定的块大小将应用程序指定的文件名和字节偏移转换成文件的一个块索引（chunk  index）。<br />
2、给master发送一个包含文件名和块索引的请求。<br />
3、master回应对应的chunk  handle和副本的位置（多个副本）。<br />
4、client以文件名和块索引为键缓存这些信息。（handle和副本的位置）。<br />
5、Client  向其中一个副本发送一个请求，很可能是最近的一个副本。请求指定了chunk handle（chunkserver以chunk  handle标识chunk）和块内的一个字节区间。<br />
6、除非缓存的信息不再有效（cache for a limited  time）或文件被重新打开，否则以后对同一个块的读操作不再需要client和master间的交互。<br />
通常Client可以在一个请求中询问多个chunk的地址，而master也可以很快回应这些请求。<br />
（5）块规模：<br />
块规模是设计中的一个关键参数。我们选择的是64MB，这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的Linux文件存储，在需要的时候可以扩展。<br />
块规模较大的好处有：<br />
1、减少client和master之间的交互。因为读写同一个块只是要在开始时向master请求块位置信息。对于读写大型文件这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便的为一个规模达几个TB的工作集缓缓存块位置信息。<br />
2、Client在一个给定的块上很可能执行多个操作，和一个chunkserver保持较长时间的TCP连接可以减少网络负载。<br />
3、这减少了master上保存的元数据（metadata）的规模，从而使得可以将metadata放在内存中。这又会带来一些别的好处。<br />
不利的一面：<br />
一个小文件可能只包含一个块，如果很多Client访问改文件的话，存储这些块的chunkserver将成为访问的热点。但在实际应用中，应用程序通常顺序地读包含多个块的文件，所以这不是一个主要问题。<br />
（6）元数据（metadata）：<br />
master存储了三中类型的metadata：文件的名字空间和块的名字空间，从文件到块的映射，块的副本的位  置。所有的metadata都放在内存中。前两种类型的metadata通过向操作日志登记修改而保持不变，操作日志存储在master的本地磁盘并在几  个远程机器上留有副本。使用日志使得我们可以很简单地、可靠地更新master的状态，即使在master崩溃的情况下也不会有不一致的问题。相反，  mater在每次启动以及当有  chuankserver加入的时候询问每个chunkserver的所拥有的块的情况。<br />
A、内存数据结构：<br />
因为metadata存储在内存中，所以master的操作很快。进一步，master可以轻易而且高效地定期在后台扫描它的整个状态。这种定期地扫描被用于实现块垃圾收集、chunkserver出现故障时的副本复制、为平衡负载和磁盘空间而进行的块迁移。<br />
这种方法的一个潜在的问题就是块的数量也即整个系统的容量是否受限与master的内存。实际上，这并不是一个严重  的问题。Master为每个  64MB的块维护的metadata不足64个字节。除了最后一块，文件所有的块都是满的。类似的，每个文件的名字空间数据也不足64个字节，因为文件名  是以一种事先确定的压缩方式存储的.如果要支持更大的文件系统，那么增加一些内存的方法对于我们将元数据（metadata）保存在内存种所获得的简单  性、可靠性、高性能和灵活性来说，这只是一个很小的代价。<br />
B、块位置：<br />
master并不为chunkserver所拥有的块的副本的保存一个不变的记录。它在启动时通过简单的查询来获得这些信息。Master可以保持这些信息的更新，因为它控制所有块的放置并通过HeartBeat消息来监控chunkserver的状态。<br />
这样做的好处：因为chunkserver可能加入或离开集群、改变路径名、崩溃、重启等，一个集群重有成百个server，这些事件经常发生，这种方法就排除了master与chunkserver之间的同步问题。<br />
另一个原因是：只有chunkserver才能确定它自己到底有哪些块，由于错误，chunkserver中的一些块可能会很自然的消失，这样在master中就没有必要为此保存一个不变的记录。<br />
C、操作日志：<br />
操作日志包含了对metadata所作的修改的历史记录。它作为逻辑时间线定义了并发操作的执行顺序。文件、块以及它们的版本号都由它们被创建时的逻辑时间而唯一地、永久地被标识。<br />
操作日志是如此的重要，我们必须要将它可靠地保存起来，并且只有在metadata的改变固定下来之后才将变化呈现给用户。所以我们将操作日志复制到数个远程的机器上，并且只有在将相应的日志记录写到本地和远程的磁盘上之后才回答用户的请求。<br />
Master可以用操作日志来恢复它的文件系统的状态。为了将启动时间减至最小，日志就必须要比较小。每当日志的长度增长到超过一定的规模后，master就要检查它的状态，它可以从本地磁盘装入最近的检查点来恢复状态。<br />
创建一个检查点比较费时，master的内部状态是以一种在创建一个检查点时并不耽误即将到来的修改操作的方式来组  织的。Master切换到一个新的日子文件并在一个单独的线程中创建检查点。这个新的检查点记录了切换前所有的修改。在一个有数十万文件的集群中用一分钟  左右就能完成。创建完后，将它写入本地和远程的磁盘。<br />
（7）数据完整性<br />
名字空间的修改必须是原子性的，它们只能有master处理：名字空间锁保证了操作的原子性和正确性，而master的操作日志在全局范围内定义了这些操作的顺序。<br />
文  件区间的状态在修改之后依赖于修改的类型，不论操作成功还是失败，也不论是不是并发操作。如果不论从哪个副本上读，所有的客户都看到同样的数据，那么文件  的这个区域就是一致的。如果文件的区域是一致的并且用户可以看到修改操作所写的数据，那么它就是已定义的。如果修改是在没有并发写操作的影响下完成的，那  么受影响的区域是已定义的，所有的client都能看到写的内容。成功的并发写操作是未定义但却是一致的。失败的修改将使区间处于不一致的状态。<br />
Write操作在应用程序指定的偏移处写入数据，而record  append操作使得数据（记录）即使在有并发修改操作的情况下也至少原子性的被加到GFS指定的偏移处，偏移地址被返回给用户。<br />
在一系列成功的修改操作后，最后的修改操作保证文件区域是已定义的。GFS通过对所有的副本执行同样顺序的修改操作并且使用块版本号检测过时的副本（由于chunkserver退出而导致丢失修改）来做到这一点。<br />
因为用户缓存了会位置信息，所以在更新缓存之前有可能从一个过时的副本中读取数据。但这有缓存的截止时间和文件的重新打开而受到限制。<br />
在修改操作成功后，部件故障仍可以是数据受到破坏。GFS通过master和chunkserver间定期的handshake，借助校验和来检测对数据的破坏。一旦检测到，就从一个有效的副本尽快重新存储。只有在GFS检测前，所有的副本都失效，这个块才会丢失。<br />
2、系统交互<br />
（1）租约（lease）和修改顺序<br />
（2）数据流<br />
我们的目标是充分利用每个机器的网络带宽，避免网络瓶颈和延迟<br />
为了有效的利用网络，我们将数据流和控制流分离。数据是以流水线的方式在选定的chunkerserver链上线性的传递的。每个机器的整个对外带宽都被用作传递数据。为避免瓶颈，每个机器在收到数据后，将它收到数据尽快传递给离它最近的机器。<br />
（3）原子性的record  Append：<br />
GFS提供了一个原子性的添加操作：record  append。在传统的写操作中，client指定被写数据的偏移位置，向同一个区间的并发的写操作是不连续的：区间有可能包含来自多个client的数  据碎片。在record append中，  client只是指定数据。GFS在其选定的偏移出将数据至少原子性的加入文件一次，并将偏移返回给client。<br />
在分布式的应用中，不同机器上的许多client可能会同时向一个文件执行添加操作，添加操作被频繁使用。如果用传  统的write操作，可能需要额外的、复杂的、开销较大的同步，例如通过分布式锁管理。在我们的工作量中，这些文件通常以多个生产者单个消费者队列的方式  或包含从多个不同 client的综合结果。<br />
Record  append和前面讲的write操作的控制流差不多，只是在primary上多了一些逻辑判断。首先，client将数据发送到文件最后一块的所有副本  上。然后向primary发送请求。Primary检查添加操作是否会导致该块超过最大的规模（64M）。如果这样，它将该块扩充到最大规模，并告诉其它  副本做同样的事，同时通知client该操作需要在下一个块上重新尝试。如果记录满足最大规模的要求，primary就会将数据添加到它的副本上，并告诉  其它的副本在在同样的偏移处写数据，最后primary向client报告写操作成功。如果在任何一个副本上record  append操作失败，client将重新尝试该操作。这时候，同一个块的副本可能包含不同的数据，因为有的可能复制了全部的数据，有的可能只复制了部  分。GFS不能保证所有的副本每个字节都是一样的。它只保证每个数据作为一个原子单元被写过至少一次。这个是这样得出的：操作要是成功，数据必须在所有的  副本上的同样的偏移处被写过。进一步，从这以后，所有的副本至少和记录一样长，所以后续的记录将被指定到更高的偏移处或者一个不同的块上，即使另一个副本  成了primary。根据一致性保证，成功的record  append操作的区间是已定义的。而受到干扰的区间是不一致的。<br />
（4）快照（snapshot）<br />
快照操作几乎在瞬间构造一个文件和目录树的副本，同时将正在进行的其他修改操作对它的影响减至最小。<br />
我们使用copy-on-write技术来实现snapshot。当master受到一个snapshot请求时，  它首先将要snapshot的文件上块上的lease。这使得任何一个向这些块写数据的操作都必须和master交互以找到拥有lease的副本。这就给  master一个创建这个块的副本的机会。<br />
副本被撤销或终止后，master在磁盘上登记执行的操作，然后复制源文件或目录树的metadata以对它的内存状态实施登记的操作。这个新创建的snapshot文件和源文件（其metadata）指向相同的块（chunk）。<br />
Snapshot之后，客户第一次向chunk  c写的时候，它发一个请求给master以找到拥有lease的副本。Master注意到chunk c的引用记数比1大，它延迟对用户的响应，选择一个chunk  handle C’,然后要求每一有chunk c的副本的chunkserver创建一个块C’。每个chunkserver在本地创建chunk  C’避免了网络开销。从这以后和对别的块的操作没有什么区别。<br />
3、MASTER操作<br />
MASTER执行所有名字空间的操作，除此之外，他还在系统范围管理数据块的复制：决定数据块的放置方案，产生新数据块并将其备份，和其他系统范围的操作协同来确保数据备份的完整性，在所有的数据块服务器之间平衡负载并收回没有使用的存储空间。<br />
3.1  名字空间管理和加锁<br />
与传统文件系统不同的是，GFS没有与每个目录相关的能列出其所有文件的数据结构，它也不支持别名（unix中的硬连接或符号连接），不管是对文件或是目录。GFS的名字空间逻辑上是从文件元数据到路径名映射的一个查用表。<br />
MASTER在执行某个操作前都要获得一系列锁，例如，它要对/d1/d2…/dn/leaf执行操作，则它必须获  得/d1，/d1/d2，…，  /d1/d2/…/dn的读锁，/d1/d2…/dn/leaf的读锁或写锁（其中leaf可以使文件也可以是目录）。MASTER操作的并行性和数据的  一致性就是通过这些锁来实现的。<br />
3.2  备份存储放置策略<br />
一个GFS集群文件系统可能是多层分布的。一般情况下是成千上万个文件块服务器分布于不同的机架上，而这些文件块服  务器又被分布于不同机架上的客户来访问。因此，不同机架上的两台机器之间的通信可能通过一个或多个交换机。数据块冗余配置策略要达到连个目的：最大的数据  可靠性和可用性，最大的网络带宽利用率。因此，如果仅仅把数据的拷贝置于不同的机器上很难满足这两个要求，必须在不同的机架上进行数据备份。这样即使整个  机架被毁或是掉线，也能确保数据的正常使用。这也使数据传输，尤其是读数据，可以充分利用带宽，访问到多个机架，而写操作，则不得不涉及到更多的机架。<br />
3.3  产生、重复制、重平衡数据块<br />
当MASTER产生新的数据块时，如何放置新数据块，要考虑如下几个因素：（1）尽量放置在磁盘利用率低的数据块服  务器上，这样，慢慢地各服务器的磁盘利用率就会达到平衡。（2）尽量控制在一个服务器上的“新创建”的次数。（3）由于上一小节讨论的原因，我们需要把数  据块放置于不同的机架上。<br />
MASTER在可用的数据块备份低于用户设定的数目时需要进行重复制。这种情况源于多种原因：服务器不可用，数据被  破坏，磁盘被破坏，或者备份数目被修改。每个被需要重复制的数据块的优先级根据以下几项确定：第一是现在的数目距目标的距离，对于能阻塞用户程序的数据  块，我们也提高它的优先级。最后，  MASTER按照产生数据块的原则复制数据块，并把它们放到不同的机架内的服务器上。<br />
MASTER周期性的平衡各服务器上的负载：它检查chunk分布和负载平衡，通过这种方式来填充一个新的服务器而  不是把其他的内容统统放置到它上面带来大量的写数据。数据块放置的原则与上面讨论的相同，此外，MASTER还决定那些数据块要被移除，原则上他会清除那  些空闲空间低于平均值的那些服务器。<br />
3.4  垃圾收集<br />
在一个文件被删除之后，GFS并不立即收回磁盘空间，而是等到垃圾收集程序在文件和数据块级的的检查中收回。<br />
当一个文件被应用程序删除之后，MASTER会立即记录下这些变化，但文件所占用的资源却不会被立即收回，而是重新  给文件命了一个隐藏的名字，并附上了删除的时间戳。在MASTER定期检查名字空间时，它删除超过三天（可以设定）的隐藏的文件。在此之前，可以以一个新  的名字来读文件，还可以以前的名字恢复。当隐藏的文件在名字空间中被删除以后，它在内存中的元数据即被擦除，这就有效地切断了他和所有数据块的联系。<br />
在一个相似的定期的名字空间检查中，MASTER确认孤儿数据块（不属于任何文件）并擦除他的元数据，在和MASTER的心跳信息交换中，每个服务器报告他所拥有的数据块，MASTER返回元数据不在内存的数据块，服务器即可以删除这些数据块。<br />
3.5  过时数据的探测<br />
在数据更新时如果服务器停机了，那么他所保存的数据备份就会过时。对每个数据块，MASTER设置了一个版本号来区别更新过的数据块和过时的数据块。<br />
当MASTER授权一个新的lease时，他会增加数据块的版本号并会通知更新数据备份。MASTER和备份都会记  录下当前的版本号，如果一个备份当时不可用，那么他的版本号不可能提高，当ChunkServer重新启动并向MASTER报告他的数据块集时，  MASTER就会发现过时的数据。<br />
MASTER在定期的垃圾收集程序中清除过时的备份，在此以前，处于效率考虑，在各客户及英大使，他会认为根本不存  在过时的数据。作为另一个安全措施，  MASTER在给客户及关于数据块的应答或是另外一个读取数据的服务器数据是都会带上版本信息，在操作前客户机和服务器会验证版本信息以确保得到的是最新  的数据。<br />
4、容错和诊断<br />
4.1 高可靠性<br />
4.1.1  快速恢复<br />
不管如何终止服务，MASTER和数据块服务器都会在几秒钟内恢复状态和运行。实际上，我们不对正常终止和不正常终止进行区分，服务器进程都会被切断而终止。客户机和其他的服务器会经历一个小小的中断，然后它们的特定请求超时，重新连接重启的服务器，重新请求。<br />
4.1.2  数据块备份<br />
如上文所讨论的，每个数据块都会被备份到放到不同机架上的不同服务器上。对不同的名字空间，用户可以设置不同的备份级别。在数据块服务器掉线或是数据被破坏时，MASTER会按照需要来复制数据块。<br />
4.1.3  MASTER备份<br />
为确保可靠性，MASTER的状态、操作记录和检查点都在多台机器上进行了备份。一个操作只有在数据块服务器硬盘上  刷新并被记录在MASTER和其备份的上之后才算是成功的。如果MASTER或是硬盘失败，系统监视器会发现并通过改变域名启动它的一个备份机，而客户机  则仅仅是使用规范的名称来访问，并不会发现MASTER的改变。<br />
4.2  数据完整性<br />
每个数据块服务器都利用校验和来检验存储数据的完整性。原因：每个服务器随时都有发生崩溃的可能性，并且在两个服务器间比较数据块也是不现实的，同时，在两台服务器间拷贝数据并不能保证数据的一致性。<br />
每个Chunk按64kB的大小分成块，每个块有32位的校验和，校验和和日志存储在一起，和用户数据分开。<br />
在读数据时，服务器首先检查与被读内容相关部分的校验和，因此，服务器不会传播错误的数据。如果所检查的内容和校验  和不符，服务器就会给数据请求者返回一个错误的信息，并把这个情况报告给MASTER。客户机就会读其他的服务器来获取数据，而MASTER则会从其他的  拷贝来复制数据，等到一个新的拷贝完成时，MASTER就会通知报告错误的服务器删除出错的数据块。<br />
附加写数据时的校验和计算优化了，因为这是主要的写操作。我们只是更新增加部分的校验和，即使末尾部分的校验和数据已被损坏而我们没有检查出来，新的校验和与数据会不相符，这种冲突在下次使用时将会被检查出来。<br />
相反，如果是覆盖现有数据的写，在写以前，我们必须检查第一和最后一个数据块，然后才能执行写操作，最后计算和记录校验和。如果我们在覆盖以前不先检查首位数据块，计算出的校验和则会因为没被覆盖的数据而产生错误。<br />
在空闲时间，服务器会检查不活跃的数据块的校验和，这样可以检查出不经常读的数据的错误。一旦错误被检查出来，服务器会拷贝一个正确的数据块来代替错误的。<br />
4.3  诊断工具<br />
广泛而细致的诊断日志以微小的代价换取了在问题隔离、诊断、性能分析方面起到了重大的作用。GFS服务器用日志来记  录显著的事件（例如服务器停机和启动）和远程的应答。远程日志记录机器之间的请求和应答，通过收集不同机器上的日志记录，并对它们进行分析恢复，我们可以  完整地重现活动的场景，并用此来进行错误分析。<br />
5 测量<br />
5.1  测试环境<br />
一台主控机，两台主控机备份，16台数据块服务器，16台客户机。<br />
每台机器：2块PIII1.4G处理器，2G内存，2块80G5400rpm的硬盘，1块100Mbps全双工网卡<br />
19台服务器连接到一个HP2524交换机上，16台客户机俩接到领外一台交换机上，两台交换机通过1G的链路相连。</p>
<p>原文转自：http://bigweb.group.javaeye.com/group/topic/5749</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/78.html" title="[转]C/C++/Perl/汇编/Java效率比较 (2006-10-11)">[转]C/C++/Perl/汇编/Java效率比较</a> (0)</li>
	<li><a href="http://www.donevii.com/post/44.html" title="ACE自适配通信环境 (2006-08-23)">ACE自适配通信环境</a> (0)</li>
	<li><a href="http://www.donevii.com/post/129.html" title="大型高并发高负载网站的系统架构 (2006-10-26)">大型高并发高负载网站的系统架构</a> (0)</li>
	<li><a href="http://www.donevii.com/post/9.html" title="flickr对javascript干的好事 (2006-08-17)">flickr对javascript干的好事</a> (0)</li>
	<li><a href="http://www.donevii.com/post/128.html" title="应用加速 (2006-10-26)">应用加速</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/504.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
