<?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/%e6%8a%80%e6%9c%af/feed" rel="self" type="application/rss+xml" />
	<link>http://www.donevii.com</link>
	<description>关注技术、移动互联网以及一切 GEEK &#38; NERD 的事情</description>
	<lastBuildDate>Wed, 21 Dec 2011 10:49:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>你最讨厌听到上司/下属对你说</title>
		<link>http://www.donevii.com/post/858.html</link>
		<comments>http://www.donevii.com/post/858.html#comments</comments>
		<pubDate>Thu, 25 Jun 2009 06:11:37 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=858</guid>
		<description><![CDATA[收藏在此，用来提醒自己。 转自：http://www.jobsdigg.com/story/631 下属最反感上司这么说 1 遇到问题，老板说：“怎么做我不管，我就要看到结果，具体的自己想办法。”（支持率：29%） 2 老板不发... ]]></description>
			<content:encoded><![CDATA[<p>收藏在此，用来提醒自己。</p>
<p>转自：http://www.jobsdigg.com/story/631</p>
<p>下属最反感上司这么说 </p>
<p>1 遇到问题，老板说：“怎么做我不管，我就要看到结果，具体的自己想办法。”（支持率：29%） </p>
<p>2 老板不发钱，说：“钱不重要，前途很重要。”（支持率：21%） </p>
<p>3 老板不知道自己在忙，还说：“这事儿你去做吧，反正闲着也是闲着。”（支持率：15%） </p>
<p>4 事情做完以后，老板说：“这事先放放。”（支持率：11%） </p>
<p>5 在拖欠工资的情况下，老板说，“希望大家都高风亮节一点。”（支持率：10%） </p>
<p>6 家在外地，工作在北京。老板说：“既然家那么远，干吗还要回家过年？”（支持率：9%） </p>
<p>7 总在快下班时下新任务：这个事很急，今天要辛苦一下。（支持率：5%） </p>
<p>8. 遇到经济危机，老板说，“你干得最好，觉悟最好，你带头降薪吧！” </p>
<p>9. 点灯熬油做出来的东西，领导只是随便看了一眼就说：“你做的这些有什么意义呢？” </p>
<p>10.“家就在本市，还年休干吗？有事请假一天，回家办完事就回来上班好了。” </p>
<p>11. 领导自己啃着饼干，然后对我们说：“今晚加班！我和你们一起饿着。” </p>
<p>12. 下班了，领导让去离公司十公里远的地方送文件，问他：“那我下班可以不打卡了吧？”回答说：“你送完文件还有事吗？”我说：“没事，但是家在那边。”领导也没抬头：“既然没事，那就回来打一下卡再回去，不打卡不行。” </p>
<p>13.“我说你听，不准反驳，对错好坏都照着做，公司倒了跟你没关系。” </p>
<p>14. 总不加工资，领导的理由是：“在我们公司能学到很多东西，是不能用钱计算的。” </p>
<p>15. 不给加班费也就忍了，还说：“多加会儿班又死不了人!” </p>
<p>16. 头一天已经告诉我不用办的事情，第二天领导说起这件事后却说：“怎么告诉你的事情还没有办好，办什么事情都办不好！” </p>
<p>17. 想当初，我们那会儿工作多努力、多积极…… </p>
<p>18.领导天天开公车去接自己家孩子。却跟有了小孩的员工说：“你怎么还不把孩子送回老家去？” </p>
<p>19. 遇到问题，领导说自己想办法，事情做完了，他又说“谁让你那么做的”，然后劈头盖脸地一顿训斥。 </p>
<p>20. 最恨领导不拿我们这些销售当人，说：“哪怕你们去卖身也要完成任务。” </p>
<p>21. 活儿真的太多了，筋疲力尽，结果领导说：“八宝山（墓地）里没有累死的人。” </p>
<p>22. 我作为工程师但只拿着技术员的薪水。一次领导在训人的时候说：“你们这些工程师，拿着这么多薪水，只做技术员的事。” </p>
<p>23. 这家公司糟糕到不能给员工一张好一点的凳子，领导却还振振有词：“只要你有能力，公司是不会亏待你的!” </p>
<p>24.“没事星期天就不要休息了。” </p>
<p>25. “你跟别人的差别就是天上地下，你活着有什么用?” </p>
<p>26.“去把我这个衣服洗洗，要做保姆式的行政。” </p>
<p>27. 领导这天让我包一个礼品，正在进行中，他过了一会突然说：“你做这个干什么？谁让你做的，去把资料拿来。” </p>
<p>28.“出了事你负得起责任么? 狗也比你听话。” </p>
<p>29. 长期拖欠工资，老板却还说：“你们把钱存银行有什么用。” </p>
<p>30.“你们没权利跟我谈条件，你有本事你可以不来。” </p>
<p>31. 领导不需要脑子，只需要一双干活儿的手，他总说：“别问为什么，没什么为什么。” </p>
<p>32.“你的工资最高，但你的工作是最好做的。” </p>
<p>33. 领导总认为要加班才是好员工，我最讨厌他说：“你怎么一下班就走？” </p>
<p>34. 真是费了九牛二虎之力完成了领导的难题。领导说：“看，学到不少东西，得到锻炼了吧！” </p>
<p>35. 有个任务需要花钱，去找领导，他说：“钱没有，有钱这事情还用你们办？” </p>
<p>36. 事情稍微没做好，领导就说：“就你这点事，随便找个人都可以顶替你。” </p>
<p>37.“为什么不来加班？这么好的工作机会你竟然不珍惜？！” </p>
<p>38.“你创造的价值不够国家培养你的价值。” </p>
<p>39.“你不要以为自己了不起，又不是在造原子弹尖尖。” </p>
<p>40. 在要求兑现领导之前说过的年终奖问题时他说，“我以前是说过，以前是以前，现在是现在，以前错了现在还不是要改过来？” </p>
<p>上司最反感下属这么说 </p>
<p>1 他分内的事情，过问了几句，都是一个回答：“我不知道。”（支持率：31%） </p>
<p>2 出了问题后说：“这个事情不是我的问题，是他的问题。” （支持率：30%） </p>
<p>3 拿来一个和讨论结果不一样的方案，说：“我做的时候觉得这样更好，所以就这么做了。”（支持率：10%） </p>
<p>4 事情办坏了，只会说：“这个事情我也不知道怎么变成这样了。” （支持率：9%） </p>
<p>5 遇到所有问题，都问老板，“这个问题怎么办？” （支持率：7%） </p>
<p>6 老板说，“我最怕员工不跟我说话，坐在那里一直沉默。其实只要说话就好办，什么话最讨厌倒是没想过。” （支持率：7%） </p>
<p>7 “我以为能搞定这事儿，所以就一直没说，想搞定了后再告诉你的。”（支持率：6%） </p>
<p>8.“这事儿是我一个人做错的么？” </p>
<p>9. 错误已经摆在眼前了，还在说：“我认为我做的是对的。” </p>
<p>10. 最雷人的是这种：“MD，老子不想干了，老子走了哈，爷不伺候了。” </p>
<p>11. 事儿没做好，还反问我：“谁让你不说清楚咧。” </p>
<p>12. 事情做错了，所以说了几句，员工说，“既然嫌这嫌那，要不您再找个明白人吧。” </p>
<p>13.“你没跟我说，所以我没做。”那我也没跟你说每天几点要吃饭，怎么就知道什么时候是饭点儿？ </p>
<p>14. 当一件事与我预期的发展不符，我去找员工探讨应该如何改进的时候，下属的第一个反应是：“我以前就这么做的，没看到有什么不对啊。” </p>
<p>15. 明明事情没做对，却要说，“你是这么跟我说的，所以我才这么做的。” </p>
<p>16. 听过员工最讨厌的一句话是：“有本事自己弄。”简直…… </p>
<p>17. 拿着不是还当理说，跟我说：“这件事不需要做得那么细。” </p>
<p>18.“老板你给我们加工资吧。”最烦这种，只会索取，不会奉献。 </p>
<p>19. 员工就应该尽员工的义务，却无意听见他们私下的抱怨：“什么事情都交给我们做。” </p>
<p>20. 只会嘴上功夫，一口一个“知道了”，但是就是不去执行。 </p>
<p>21. 任务执行上出了问题，员工说：“这个事情，我交代过他的。” </p>
<p>22.“反正我就这样，大不了我走人！” </p>
<p>23. 事情没有按照既定方案走，员工说，“这事儿我本来是想这样做的，但是合作方又说要那样做，所以就……” </p>
<p>24. 两个人承担一项工作，出了错误，员工说，“是他没有做好，所以我才没有做好。” </p>
<p>25.“为什么又是我去做，怎么不叫他们去？” </p>
<p>26. 太拿领导不当外人儿，说：“老板我明天不想上班了，让别人替吧。” </p>
<p>27.“就给这点钱，还想让我干这干那。” </p>
<p>28. 捅了娄子，所以说了他几句，没想到他说，“说白了你不也是一个打工的么，有什么了不起。” </p>
<p>29. 布置了一个任务，的确不容易，但正是这样，才需要大家一条心，振奋精神，可是员工还没做就说，“这件事情不可能完成，肯定不行。” </p>
<p>30. 推卸责任推卸到领导头上来了，说，“这个我不懂，你也不懂。如果你懂事情不会发生。” </p>
<p>31. 事情办坏了，有很多的理由：“这个事情是因为……我本来是想……结果变成……要是如果……”真想和这样的人说一句：“要是如果没有你该多好啊！” </p>
<p>32. 问下属事办得怎么样了？（实际还没办呢）他的回复是：“快了，快办好了!” </p>
<p>33. 某件该做的事情没做，跟他说后，犹如恍然大悟一般：“原来这也是我的工作啊，怎么这么多啊。” </p>
<p>34.“这个问题我不知道，是前任遗留的。” </p>
<p>35.“我只是个员工，很多事情是需要主管去做的，我做不了。” </p>
<p>36. 事情办坏了，我正好有事不在，我的上级（老总）问我的下级（主管）是什么原因？下级说：“是按经理的要求做的。” </p>
<p>37. 最不喜欢员工把“个人矛盾”转化为“群体矛盾”，遇到问题就说：“大家都是这样做的啊。” </p>
<p>38. 有个员工特别振振有词地跟我说，“我为公司带来了利益，但我不明白公司为我带来了什么。” </p>
<p>39. 不会在事后思索一下怎么在下次把事情做得更好，而是说，“换作别人做可能会比我做得更差。” </p>
<p>40. 刚毕业来我们公司应聘工作的一个人说：“不要我是你们公司的损失。” </p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/858.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这些牌子你们穿吗？</title>
		<link>http://www.donevii.com/post/789.html</link>
		<comments>http://www.donevii.com/post/789.html#comments</comments>
		<pubDate>Wed, 01 Apr 2009 09:14:39 +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/789.html</guid>
		<description><![CDATA[1 梦特娇 国人非常认这个牌子，我也不知道为什么，号称法国品牌，一件T恤动轧上千，在2、3级城市尤其是有钱人的代名词。其实，这个牌子不过是在法国注册而已，在国外&#8230;算了不说了，... ]]></description>
			<content:encoded><![CDATA[<p>1 梦特娇 </p>
<p>国人非常认这个牌子，我也不知道为什么，号称法国品牌，一件T恤动轧上千，在2、3级城市尤其是有钱人的代名词。其实，这个牌子不过是在法国注册而已，在国外&#8230;算了不说了，此牌主攻中年人这个年龄段。 </p>
<p>2 卡迪乐鳄鱼和鳄鱼恤 <br />鳄鱼有很多种，什么头朝里的，头朝外的，张嘴的，闭嘴的&#8230; <br />　　卡迪乐和香港的鳄恤基本和雅戈尔一个档次吧，有的款式却卖得和LACOSTE差不多价，这就有点不厚道了。 <br />　　鳄鱼，只有法国的LACOSTE最为正宗，最为出名。 </p>
<p>3 ZARA <br />ZARA 业界称为时尚杀手，绝对一线大牌的款式，最低级的面料与保证1个月穿烂的工艺，每天以超音速的速度发货至各门店，顾客也是超音速的速度抢到身上，这个西班 牙品牌进入上海，非常受追捧。大家都以为这是国外大牌呢，价格也直追LEVI&#8217;S、G-STAR了，其实不过是西班牙的班尼路罢了。 <br />这点，我觉得H&amp;M做得不错，它进入上海后，价格依然还是那样，虽然它们家的衣服卖到了全世界，好莱坞明星也穿，不过没怎么黑我们中国人。 </p>
<p>4 ONLY、 VERO MODA、JACK&amp;JONES <br />这个来自丹麦BESTSELLER旗下的三个牌子在我们国家算赚到钱了 。不过价格越卖越贵，东西越做越差，无论做工、面料还是设计，而且在国外，也就是班尼路吧~~ </p>
<p>5 ESPRIT <br />这家公司也厉害！总部在香港，品牌授权给各个行业。这个我们不说了。单说服装类，价格正价也超贵，直逼CK JEANS了，也没见东西好到哪去，全场5折，一件长袖TEE也要200+，我怎么觉得还不值呢~~~~~~ </p>
<p>6 马克华菲 <br />这个&#8230;其实我不太想说的。因为毕竟是国产品牌（怎么？你不知道？？） <br />它是七匹狼旗下的品牌，风格和JACK&amp;JONES非常像，价格卖得比JJ还贵！好在喜欢打折，打完折后的东西值那个价！ </p>
<p>7 PORTS 宝姿 <br />是的，你没看错！这个在国内时尚杂志喜欢跟DIOR、夏奈尔站在一起的牌子其实只能在亚洲混混。 <br />　　它注册在加拿大，好像是几个亚洲人注册的，我记不清了。但它的运作极为成功。欧美的专卖店很少，几乎绝大部分的专卖店都开在亚洲，在国内，几乎所有的高档商场都有它的专柜，它的服装定价真正标的是一线大牌的价格，你不服不行。剩下的，我不想说了，你自己想吧~ </p>
<p>8 GAP <br />这个牌子在美国本土，是真正的美利坚班尼路。此牌子来到中国就不再那么价廉了，价格上扬了好多。 <br />　　其实它家东西质量还可以，不过不款式出挑，就是学生穿的，没必要在中国卖这么贵吧？？ </p>
<p>9 ELAND <br />这个是韩国的品牌。不过老喜欢在店里贴欧美的学生模特，把自己拌成英伦风格。这家衣恋公司，以前好像也是做出口外单的，后来把自己的品牌打响了，来中国后，价格一直不便宜。东西呢，见仁见智。 </p>
<p>10 Rapido <br />这个牌子是韩国三星旗下的在中国，这个牌子的特点的价格坚挺，极少打折，东西没什么技术含量。 </p>
<p>11 KAPPA <br />这个在意大利档次很低的牌子字最近在国内不知道为啥火起来了~~它跟AD NIKE,PUMA(别说我把他们抬高了,在国外这些虽然也不是什么高档的~~可能跟中国的李宁差不多吧~~但至少比KAPPA强很多!!)~~等,都差一个的档次,结果标价还跟他们相当。 </p>
<p>12 CONVERSE <br />自从被NIKE收购后一路狂涨 长青款从185涨到了238 还有400 500的！注意是布鞋！！！还不是皮的!你贵也就算了 质量还差 一个月保证脱胶 两个月基本开口！</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=711569e6-cd33-89ef-84c5-f2c3bab9bd8a" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/789.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://<a href="http://www.donevii.com/post/tag/blog" class="st_tag internal_tag" rel="tag" title="Posts tagged with blog">blog</a>.sina.com.cn/s/<a href="http://www.donevii.com/post/tag/blog" class="st_tag internal_tag" rel="tag" title="Posts tagged with blog">blog</a>_564cabe30100bxmb.<a href="http://www.donevii.com/post/tag/html" class="st_tag internal_tag" rel="tag" title="Posts tagged with html">html</a></p>
]]></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 />要对产品的一切细节了然于胸，要对产品涉及到的方方面面有所了解，要能够控制产品团队（设计、<a href="http://www.donevii.com/post/tag/%e6%8a%80%e6%9c%af" class="st_tag internal_tag" rel="tag" title="Posts tagged with 技术">技术</a>、运营等一切环节），要有高超的沟通能力和技巧，要有极强的成功欲望和非常主动的做事态度。</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.<a href="http://www.donevii.com/post/tag/html" class="st_tag internal_tag" rel="tag" title="Posts tagged with html">html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/737.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>经典笑话：比一比床上技术</title>
		<link>http://www.donevii.com/post/684.html</link>
		<comments>http://www.donevii.com/post/684.html#comments</comments>
		<pubDate>Sun, 14 Dec 2008 12:45:34 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/684.html</guid>
		<description><![CDATA[话说有一对很有钱的年轻夫妇，家里请了一堆管家，司机，女佣等。 而女主人总是怀疑丈夫和年轻美貌的女佣有染，于是总是想找机会把她给fire掉，终于有一天趁先生不在把女佣给叫过来，嫌... ]]></description>
			<content:encoded><![CDATA[<p>话说有一对很有钱的年轻夫妇，家里请了一堆管家，司机，女佣等。<br />
而女主人总是怀疑丈夫和年轻美貌的女佣有染，于是总是想找机会把她给fire掉，终于有一天趁先生不在把女佣给叫过来，嫌她菜烧得不好要叫她走路。 <br />
“可是，女佣说：先生总是说我菜煮得菜比你好。” <br />
女主人顿时妒火攻心，哑口无言，只好说：“没事，你下去吧！” <br />
正当女佣走到门口时，回头冒了一句“而且我的床上工夫也比你好！” <br />
女主人顿时愤恕的拍桌子说&#8221;这也是先生说的吗？&#8221; <br />
“不是，女佣回答，是司机，园丁他们说的。”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/684.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开心新上线日历与买房子组件</title>
		<link>http://www.donevii.com/post/650.html</link>
		<comments>http://www.donevii.com/post/650.html#comments</comments>
		<pubDate>Wed, 03 Dec 2008 12:41:49 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[手机]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/650.html</guid>
		<description><![CDATA[买房子这个组件到是没什么好说的，不过是把车换成了房子，人们总有审美疲劳的时候，到时买什么？ 人-》车-》房子-》？&#160; what is next ? 日历这个组件做得有些脑殘了，开心想做什么？会去... ]]></description>
			<content:encoded><![CDATA[<p>买房子这个组件到是没什么好说的，不过是把车换成了房子，人们总有审美疲劳的时候，到时买什么？</p>
<p>人-》车-》房子-》？&nbsp; what is next ?</p>
<p>日历这个组件做得有些脑殘了，开心想做什么？会去开心上做个人的 GTD 管理？</p>
<p>well &#8230;. 让我来做一个假设，比如我加了我们的老大 justin 为好友。在我工作时，我需要去 check 我的日历和日程安排，我登录开心。这时 justin 的页面上显示我上线了，然后 justin 一看是工作时间，……除非开心转型，改变它在人们心里的印像，不再是游戏类SNS网站，做这类 office 相关的东西才有得做。</p>
<p>再说遇到的第二个问题，用开心的日历前提条件是什么？<br />1、online<br />2、有电脑<br />3、有时间去 1-click</p>
<p>但是在平时工作中我们会一直坐在工位前，使用电脑上网，然后处理工作么？OK，除非我是老板，我能把别人叫到我这里来开会。</p>
<p>我的 GTD 会用手机+电脑，如果做这类的日历，不如直接提供一个调用 Google 日历的功能就好了，重复造没用的轮子。</p>
<p>再换个方向说，这个IDEA太NC了。都知道现在是经济寒冬，现在的问题不是你跑的快不快，而是你跑的方向对不对。如果方向都错了，你快得越快死得越快。</p>
<p>提了这么多反对意见，那以开心在我眼里是什么？<br />1、使用开心的人，所加的好友大部分是在现实生活中的真实好友。一起来玩开心一个通过一些互动行为加深关系，比如很久不在IM上聊天的前同事；二是通过开心来认识同部门或公司的不熟悉的人，这是一个”破冰“的过程。</p>
<p>2、使用开心的人大部分是白领，至少从我接触的好友群是这样。那么这些人是否能产生一些业务上的交流？如果我对某件事情不满意，通过在开心上表达，能否让我的同事也了解到这些我不便说出口的意见？</p>
<p>大部需求都是人与人之间的关系，而不是见鬼的抢车位，给我的吉安特抢？</p>
<p>开心能做什么？</p>
<p>1、猎头：用户发表匿名求职意向，猎头给符合条件的人发相关信息，如果用户满意则再深入了解。<br />2、活动：因为是同公司或同部门这类处于同组织的情况比较多，组织活动是否更方便？比如滑雪？团购？<br />3、消息：大部分用户是各公司职员，是否像 ireport 一样，匿名提供各种小道信息？没准又是一个 donews 。<br />4、交友：在各公司的大龄未婚男女着实不少，不知通过通过某些渠道来让这类人互相认识，然后继续深入发展？</p>
<p>以上只是开心往 office 类发展的猜想，要是一直走游戏路线则完全不同。</p>
<p>再感慨一下，互联网太缺少产品经理（不是”好的“产品，而是能用的都没多少）。一个个这种NC的产品出来就充分的佐证了我的想法，产品经理也应该是一个 creative 的工作，连 idea 都没有，只会 copy ，这样的一个烂人能毁了一群好技术。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/650.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个光棍的呐喊</title>
		<link>http://www.donevii.com/post/622.html</link>
		<comments>http://www.donevii.com/post/622.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 06:14:13 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[女人]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[男人]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/622.html</guid>
		<description><![CDATA[汽车渴望公路， 　　　　花草渴望雨露， 　　　　太监迫切渴望著雄性激素。 　　　　灵魂渴望超度， 　　　　心灵渴望归宿， 　　　　而我则迫切渴望著有个媳妇。 　　　　众里寻她千... ]]></description>
			<content:encoded><![CDATA[<p>汽车渴望公路， <br />　　　　花草渴望雨露， <br />　　　　太监迫切渴望著雄性激素。 <br />　　　　灵魂渴望超度， <br />　　　　心灵渴望归宿， <br />　　　　而我则迫切渴望著有个媳妇。 <br />　　　　众里寻她千百度， <br />　　　　踏平脚下路。 <br />　　　　蓦然回首细环顾， <br />　　　　大婶大娘无数。 <br />　　　　偶有美女光顾， <br />　　　　还是有夫之妇， <br />　　　　余下大多数， <br />　　　　基本不堪入目。 <br />　　　　时间犹如脱兔， <br />　　　　匆匆不肯停步。 <br />　　　　转眼就把我拖到了该当爹妈的岁数。 <br />　　　　然而上天却挺可恶， <br />　　　　对我不管不顾。 <br />　　　　把我培养的庸庸碌碌， <br />　　　　难以获得少女的爱慕。 <br />　　　　我曾向月老求助， <br />　　　　求他将我单身的生涯结束。 <br />　　　　而他给予我的眷顾， <br />　　　　竟是接踵而至的恶女和怨妇。 <br />　　　　比起她们的飞扬跋扈， <br />　　　　以及对我精神上的无情屠戮， <br />　　　　我更愿意选择让步， <br />　　　　甘心走向黄泉之路。 <br />　　　　无助，无助。 <br />　　　　其实我并非一无是处。 <br />　　　　我有很多的优点可以列举和陈述。 <br />　　　　但我不知道是什么缘故， <br />　　　　我竟无法得到过别人的敬仰和拥护 <br />　　　　我的爱心彰明较著， <br />　　　　最最热心于公益捐助。 <br />　　　　为了祖国福利和体育事业的长足进步，、 <br />　　　　我不知疲倦的奔波于体彩和福彩中心投注； <br />　　　　为了向世人体现优越的社会主义制度， <br />　　　　以及在党和国家的领导下我们小康的程度， <br />　　　　我毅然决然的增加了喝酒的次数， <br />　　　　终于练出了代表富足的啤酒肚； <br />　　　　我还坚持为人民服务，用我最大的热情为别人提供帮助。 <br />　　　　为了让我这片心意落到实处， <br />　　　　我硬是把不愿过去的大娘也搀过了马路…… <br />　　　　而我得到的赞扬却远远少于挨骂的次数。 <br />　　　　我不明白我的努力换来的为何只是别人的不屑一顾甚至是愤怒。 <br />　　　　是因为我过人的天赋， <br />　　　　让他们相形见绌， <br />　　　　还是我高尚的品格和气度， <br />　　　　让他们产生了深深的嫉妒？ <br />　　　　我的优秀并没有让我自负， <br />　　　　更没有因为自己的伟大而恃才傲物。 <br />　　　　本以为这样才能有女孩对我暗生情素， <br />　　　　谁知我等到现在也还没有一点迹象和眉目。 <br />　　　　其实要把女人比做猎物， <br />　　　　我则是一个迷茫的猎户。 <br />　　　　因为我实在是不懂狩猎的技术。 <br />　　　　该跟著群雄逐鹿， <br />　　　　还是该继续著守株待兔， <br />　　　　思考了很久也没有整理出一条清晰的思路。 <br />　　　　也许这便也成了我的桎梏， <br />　　　　成了我无法得到爱情的又一大因素。 <br />　　　　或许曾经的某次时机被我奢侈的贻误， <br />　　　　就造成了现在的万劫不复。 <br />　　　　咱们这个国度， <br />　　　　人口资源丰富。 <br />　　　　但为何娶不到老婆的男人还是不计其数？ <br />　　　　是因为封建思想的束缚， <br />　　　　打乱了男女的比例和数目， <br />　　　　还是因为社会的退步， <br />　　　　又重新开始了一夫多妻的制度？ <br />　　　　有时想想也他妈愤怒， <br />　　　　你说凭啥大款就可以包养了Ｎ个情妇？ <br />　　　　难道只为著权利和财富， <br />　　　　就可以不受道德的约束， <br />　　　　并置我们光棍于不顾， <br />　　　　抢占著资源无数？ <br />　　　　怪也怪女人们过于世故， <br />　　　　对金钱和地位的趋之若鹜。 <br />　　　　只知道花园洋房和别墅， <br />　　　　早把真情的概念颠覆。 <br />　　　　冲动时我真恨不得变成动物， <br />　　　　哪怕只是头卖力的牲畜。 <br />　　　　听凭主人的吩咐， <br />　　　　不用感受做人的无助。 <br />　　　　或者干脆来个移花接木， <br />　　　　彻底的做个变性手术。 <br />　　　　跑到人群中滥竽充数， <br />　　　　也好让同胞们多一条可以选择的出路。 <br />　　　　街上的婚介星罗棋布。 <br />　　　　我也曾幻想著他们能帮我打开销路。 <br />　　　　然而最终的结果是让我明白了什么叫认贼作父， <br />　　　　并被婚托儿们榨干了我几年的收入。 <br />　　　　吃不著猪蹄儿能看看猪跑也算对我心灵创伤的平复。 <br />　　　　所以能看到美女的繁华地段成了我最爱的去处。 <br />　　　　每当看著她们迈著款款的猫步， <br />　　　　在我的视线里出出入入， <br />　　　　我总是能感受到久违了的心跳并顺便痛心一下她们的已为人妇。 <br />　　　　现实的打击让我鸡肠小肚。 <br />　　　　我最看不惯情侣们当众亲密过度。 <br />　　　　只要看到有人稍越雷池半步， <br />　　　　我就会上前阻止并提醒他们病出口入。 <br />　　　　结果自然不必赘述， <br />　　　　我经常会体验到肢体语言的丰富。 <br />　　　　尽管如此我也并没有减少对此事的关注， <br />　　　　反而更觉得有必要加大宣传的攻势和力度。 <br />　　　　没有爱的倾注， <br />　　　　我如涸辙之鲋。 <br />　　　　这样的生活确实很难让我安之若素。 <br />　　　　看著朋友们已为人父， <br />　　　　小生活过的美满和睦， <br />　　　　我又何尝不是深深的羡慕， <br />　　　　并渴望著感情上的脱贫致富？ <br />　　　　都说男儿有泪不扑簌， <br />　　　　但那绝对是未到伤心处。 <br />　　　　有谁知道泪水已经多少次模糊了我心灵的窗户？ <br />　　　　况且咱都是沧海一粟， <br />　　　　凭啥我就不能在爱情的海岸登陆？ <br />　　　　只能一口一口的吃著干醋， <br />　　　　被动的尽著晚婚晚育的义务！ <br />　　　　人生本来就短促，我又怎能就这样默默的虚度？ <br />　　　　为了尽快给自己找一个归宿， <br />　　　　我决心不择手段的全力以赴。 <br />　　　　错误，错误。 <br />　　　　这种想法最终成了我难逃的劫数。 <br />　　　　没想到我一时的慌不择路， <br />　　　　竟上演了那样惨绝人寰的一幕。 <br />　　　　那是我走投无路， <br />　　　　勾引了有夫之妇。 <br />　　　　谁知道罪行败露， <br />　　　　被人家当场抓住。 <br />　　　　只后悔不会武术， <br />　　　　没能够杀出血路。 <br />　　　　无奈的任人摆布， <br />　　　　惨遭了打击报复。 <br />　　　　他们恼羞成怒， <br />　　　　打得义无反顾。 <br />　　　　片刀循环往复， <br />　　　　板砖频频招呼。 <br />　　　　我浑身血流如注， <br />　　　　俩腿还不住抽搐。 <br />　　　　走错那罪恶一步， <br />　　　　差点就死不瞑目。 <br />　　　　恐怖，恐怖。、 <br />　　　　真庆幸我还能把命保住。 <br />　　　　那场我自导自演的前车之覆， <br />　　　　带给了我贼深贼深的感触。 <br />　　　　往事历历在目， <br />　　　　我此刻一一追溯。 <br />　　　　经历了苦痛挣扎后的觉悟， <br />　　　　终于上升到了前所未有的高度。 <br />　　　　问世间情为何物， <br />　　　　我算是大彻大悟。 <br />　　　　感情上的事儿看来还真不能过于盲目。 <br />　　　　是你的挡不住， <br />　　　　不是你的留也留不住。 <br />　　　　别人的老婆就是再好也不能轻易接触。 <br />　　　　有道是皮之不存毛将焉附， <br />　　　　我要是ＯＶＥＲ了还上哪儿去找我的贤内助？ <br />　　　　更何况人生短促， <br />　　　　还有很多东西值得我们珍惜和呵护。 <br />　　　　爱情的光环固然眩目， <br />　　　　也毕竟不是生命的全部。 <br />　　　　岁月的痕痕无孔不入。 <br />　　　　无有爱情的皮囊苍老的更加迅速。 <br />　　　　看著我那用蒸汽熨斗都已无法熨平的面部， <br />　　　　真不知还有谁肯向我将她的终身托付。 <br />　　　　等待著等待到行将就木， <br />　　　　持续著持续到人生落幕。 <br />　　　　盼望吧盼望著解决光棍待遇的法规早日颁布， <br />　　　　但愿啊但愿我首先踏入的能够是婚姻的坟墓。<br /><a href="http://www.flickr.com/photos/92659522@N00/3020813563"><img src="http://farm4.static.flickr.com/3277/3020813563_c824427ca9.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/622.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>学习 ABC Analysis</title>
		<link>http://www.donevii.com/post/542.html</link>
		<comments>http://www.donevii.com/post/542.html#comments</comments>
		<pubDate>Sat, 04 Oct 2008 16:55:57 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/542.html</guid>
		<description><![CDATA[&#160;&#160;&#160; 根据事物的经济&#160;&#160;、技术等方面的主要特征，运用数理统计方法，进行统计、排列和分析，抓住主要矛盾，分清重点与一般，从而有区别地采取管理方式的一种定量管理方... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp; 根据事物的经济<span>&nbsp;&nbsp;</span>、技术等方面的主要特征，运用数理统计方法，进行统计、排列和分析，抓住主要矛盾，分清重点与一般，从而有区别地采取管理方式的一种定量管理方法。又称巴雷托分析法、主次因分析法<span style="font-size: 4pt;">&nbsp;</span>、ABC分析法、分类管理法、重点管理法。它以某一具体事项为对象，进行数量分析，以该对象各个组成部分与总体的比重为依据，按比重大小的顺序排列，并根据一定的比重或累计比重标准，将各组成部分分为ABC3<a href="http://www.donevii.com/post/tag/%e7%b1%bb" class="st_tag internal_tag" rel="tag" title="Posts tagged with 类">类</a>，A类是管理的重点，B类是次重点，C类是一般<span style="font-size: 4pt;">&nbsp;</span>。<br />
ABC管理法的原理是按巴雷托曲线所示意的主次关系进行分类管理。广泛应用于工业、商业、物资、人口及社会学等领域，以及物资管理、质量管理、价值分析、<br />
成本管理、资金管理、生产管理等许多方面。它的特点是既能集中精力抓住重点问题进行管理，又能兼顾一般问题，从而做到用最少的人力、物力、财力实现最好的<br />
经济效益。<br />&nbsp;&nbsp;&nbsp;&nbsp;ABC管理法的主要程序是：
<ul>
<li>①收集数据，列出相关元素统计表。</li>
<li>②统计汇总和整理。</li>
<li>③进行分类，编制ABC分析表。</li>
<li>④绘制ABC分析图。</li>
<li>⑤根据分类，确定分类管理方式，并组织实施。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/542.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>加快Flex应用启动速度的5种方式</title>
		<link>http://www.donevii.com/post/523.html</link>
		<comments>http://www.donevii.com/post/523.html#comments</comments>
		<pubDate>Tue, 30 Sep 2008 04:42:35 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[缓存]]></category>

		<guid isPermaLink="false">http://www.donevii.com/post/523.html</guid>
		<description><![CDATA[Jun Heider在O’Reilly的InsideRIA站点上发表了一篇精彩的文章，该文章就如何加快Flex应用的启动速度提出了很多建议，以帮助用户减少看见讨厌的“Loading”对话框的出现时间。他深入探讨了问题的... ]]></description>
			<content:encoded><![CDATA[<p>Jun Heider在O’Reilly的InsideRIA站点上发表了一篇精彩的文章，该文章就<a href="http://www.insideria.com/2008/04/flex-ria-performance-considera.html">如何加快Flex应用的启动速度提出了很多建议</a>，以帮助用户减少看见讨厌的“Loading”对话框的出现时间。他深入探讨了问题的不同方面，并对每种技术的优势和劣势进行了评判。     </p>
<p><strong>从外部加载媒体（Media）</strong>     <br />Heider提到了一个常用的Flex最佳实践——限制嵌入到应用/SWF文件中的媒体的数量，如图像、影片及mp3等资源都可以从外部的SWF文件加载。 Flex框架可以直接将图片、mp3及字体等资源编译到SWF中。当你想让最终用户获得全部资源时，这种方式确实能派上用场，但是这会导致你的应用长时间停留在“Loading”阶段。中国最大的RIA分享社区-与中国闪客一起成长和发展！</p>
<p><strong>在嵌入式字体中限制字符集</strong>     <br />Heider建议在嵌入式字体中限制字符集以降低SWF文件的总下载时间： 当你在Flex中嵌入一种字体时，你就会获得该字体的全部字符的支持。尽管这可能是你想要的，但你确信你需要全部字符么？例如，在一个只面向英文的应用中，你确信你真的想花时间下载中文字符数据么？     <br /><strong>缓存框架</strong></p>
<p>Heider回顾了<a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:Flex_3_RSLs">Flex 3 support for runtime-shared-libraries （RSL）</a>这篇文章：从Flex 3开始，你可以将Adobe签名的框架——RSLs缓存到Flash Player的cache中。这有两个好处。首先，缓存在Flash Player cache中的签名的框架RSLs可由所有配置好的Flex应用共享。换句话说，如果某人的应用已经下载了500k的签名的框架RSL，并且该RSL仍旧 在Flash Player cache中，那么你的应用就可以使用缓存下来的RSL。其次，即使某人清空了其浏览器缓存，对Flash Player cache也没有任何影响。</p>
<p><strong>考虑模块化</strong>     <br />Heider谈到了将Flex应用划分成模块的好处：减少字体加载时间的另一种方式就是将你的Flex应用划分成模块。使用模块的一个好处在于当加载和卸载模块时你能完全操控它。     <br />之所以要划分成模块的最后一个原因是他们更快，而且我能即时加载它们。换句话说，在启动时唯一需要加载的模块就是 Step1.swf模块。因此，在使用模块的情况下，最终用户节省了启动时间，但是当他从一个模块切换到另一个模块时却需要花更多时间，因为每个模块都需 要以JIT形式加载。在我的应用中，只有当用户首次在steps 1-5之间切换时需要花更多时间。</p>
<p><strong>推迟实例化      <br /></strong>Heider围绕着Flex组件的“creationPolicy”属性及何时实例化应用的不同部分给出了很多建议。如果你想减少从数据下载到用户真正可以使用的总时间，当务之急就是推迟实例化。这项技术背后的理念就是直到应用真正使用的时候才在内存中创建对象。尽管推迟实例化技术会在应用的整个使用过程中导致少许——通常不那么明显——的延迟，但与长时间的启动延迟相比，它还是可接受的。推迟实例化的另一个好处在于内存使用的优化。 Heider还谈到了一个“实验性”的条款——“使用流”，这是他在讨论Dirk Eismann的帖子（<u>Building monolithic </u><a href="http://blog.csdn.net/lixinye0123/archive/2008/06/01/Flex" class="broken_link">Flex</a><u> SWFs that still startup quickly.”</u>）时谈及的。Eismann提出一项技术以利用Flash Player中的多个frames以在部分应用中达到流的目的。查看<a href="http://www.insideria.com/2008/04/flex-ria-performance-considera.html">所有的帖子</a>以更多地了解该技术及关于加快Flex启动速度的建议。中国最大的RIA分享社区-与中国闪客一起成长和发展！) </p>
<p><strong>原文出处：</strong><a href="http://www.infoq.com/cn/news/2008/05/flex-startup-time">http://www.infoq.com/cn/news/2008/05/flex-startup-time</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/523.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公司(Google... ]]></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 <a href="http://www.donevii.com/post/tag/blog" class="st_tag internal_tag" rel="tag" title="Posts tagged with blog">blog</a> 中有对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 还给了一个关于压缩 <a href="http://www.donevii.com/post/tag/web" class="st_tag internal_tag" rel="tag" title="Posts tagged with web">web</a>  蜘蛛数据的例子。这个例子的蜘蛛 包含 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都不缓存文件数据。因为用户缓存的益处微乎其微，这是由于数据太多或工作集太大而无法  <a href="http://www.donevii.com/post/tag/%e7%bc%93%e5%ad%98" class="st_tag internal_tag" rel="tag" title="Posts tagged with 缓存">缓存</a>。不缓存数据简化了客户程序和整个系统，因为不必考虑缓存的一致性问题。但用户缓存元数据（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、除非缓存的信息不再有效（<a href="http://www.donevii.com/post/tag/cache" class="st_tag internal_tag" rel="tag" title="Posts tagged with cache">cache</a> 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>
]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/504.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

