<?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/%e8%8a%af%e7%89%87/feed" rel="self" type="application/rss+xml" />
	<link>http://www.donevii.com</link>
	<description>DoneVII CET &#38; CPPLITE</description>
	<lastBuildDate>Wed, 02 Jun 2010 10:45:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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程序员的效率比其他<a href="http://www.donevii.com/post/tag/web" class="st_tag internal_tag" rel="tag" title="Posts tagged with web">Web</a>公司同行们高出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)的形式组织这些运行  <a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>操作系统的服务器，迪博纳把这种形式比喻成互联网服务的“磁盘驱动器”(但别和一直谣传的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  对效率的关注使它不可能对标准<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>内核感到满意;Google会根据自己的需要运行修改过的内核版本。通过调整<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>的底层性能，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 还给了一个关于压缩 <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”.在未压缩前的<a href="http://www.donevii.com/post/tag/web" class="st_tag internal_tag" rel="tag" title="Posts tagged with web">web</a>  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 />
图一：一个存储<a href="http://www.donevii.com/post/tag/web" class="st_tag internal_tag" rel="tag" title="Posts tagged with web">Web</a>网页的范例列表片断。行名是一个反向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/<a href="http://www.donevii.com/post/tag/web" class="st_tag internal_tag" rel="tag" title="Posts tagged with web">web</a>/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通常是运行用户层服务进程的<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>机器。只要资源和可靠性允许，chunkserver和client可以运行在同一个机器  上。<br />
文件被分成固定大小的块。每个块由一个不变的、全局唯一的64位的chunk－handle标识，chunk－ handle是在块创建时由  master分配的。ChunkServer将块当作<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>文件存储在本地磁盘并可以读和写由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，这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>文件存储，在需要的时候可以扩展。<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>
		<item>
		<title>[转] 移动互联网的终端革命</title>
		<link>http://www.donevii.com/post/402.html</link>
		<comments>http://www.donevii.com/post/402.html#comments</comments>
		<pubDate>Thu, 01 May 2008 18:10:51 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[linux]]></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/402.html</guid>
		<description><![CDATA[From: http://www.bouhe.com/mobile-marketing/1694 诺基亚、爱立信公司的首席技术技官都已驻扎在硅谷办公，他们不得不来到这里，因为他们突然发现苹果和谷歌已经开始威胁到他们的业务。2007年，iPhone、... ]]></description>
			<content:encoded><![CDATA[<p>From: <a title="http://www.bouhe.com/mobile-marketing/1694" href="http://www.bouhe.com/mobile-marketing/1694">http://www.bouhe.com/mobile-marketing/1694</a>    </p>
<p>诺基亚、爱立信公司的首席技术技官都已驻扎在硅谷办公，他们不得不来到这里，因为他们突然发现苹果和谷歌已经开始威胁到他们的业务。2007年，iPhone、Gphone无疑是最热门的词汇，就连微软也提出了Mphone(Multi-phone)的概念，认为手机应该融合多种无线技术、多种输入技术和多种应用功能。 </p>
<p>&#8220;2008年会成为MID(移动互联网设备)元年。&#8221;业内人士预测。这一判断主要是基于明年上半年英特尔公司即将推出可以放在口袋里的移动终端，而45纳米技术的突破以及多核技术的应用，可以满足MID芯片的移动性和无处不在的计算，并同时降低功耗和尺寸。作为PC互联网时代的最大赢家，英特尔希望将其霸主地位延伸到移动终端领域。就连全球最大的网络书店亚马逊也新推出了手持终端&#8212;&#8212;电子书阅读器，开始软硬兼备。</p>
<p>随着手机和互联网的融合，越来越多的公司开始涉足手机及其他移动终端的生意，硅谷已然变成了手机谷。而围绕着终端的变革，原有的硬件、软件、服务、内容等公司都开始跨越产业链上的多个环节，致使原有的产业边界越来越模糊。以往我们耳熟能详的公司如诺基亚、苹果、谷歌等已经不能单一定位了，它们早已不单是手机、电脑和搜索公司了，而是在移动互联网的大背景下，走到了同一条竞争线上。</p>
<p>随着微软、英特尔、诺基亚、谷歌、苹果等全球巨头加入到移动互联网的战役中，既有的产业格局也会出现新的变化。苹果和谷歌已经成为事实上的虚拟运营商，在它们的平台上会开发和开放各种应用，移动运营商未来的地位会下降。事实上，苹果公司一直和AT&amp;T等移动运营商捆绑销售，并和运营商进行分成。而谷歌打算用46亿美元竞拍美国700MHz的一个无线频段，更有传言，谷歌会收购美国第三大电信运营商Sprint Nextel。 </p>
<p> 相比苹果、谷歌对移动通信市场的入侵，中国的移动互联网行业还呈现比较封闭的状态，但这并没影响到国内众多创业公司的参与热情。曾有VC感慨，现在只要是和手机相关的商业计划书，十之八九都是手机客户端软件，例如手机聊天、手机下载等各色各样的手机软件。这些公司几乎百分之百都号称要做成手机平台，以黏住用户。 </p>
<p>移动终端的影响力之大，在于其离用户最近。作为最终用户，人们与外界的联系节点已由最早家庭的邮政编码，到PC时代的一串IP地址，再转移到移动电话的手机号码。联系的终端越变越小，但却越来越跟随、紧贴用户。在众多公司抢占终端的过程中，用户需求成为最终的变量。在这一点上，无论是iPhone还是Wii的热卖，在于其最先洞察并引领用户需求，通过改善人际交互的界面方式，将用户从键盘中解放出来，满足用户对于自由的渴望。 </p>
<p> 但仅仅成为一个酷品还不足够，用户更需要终端上的服务和内容。在这一点上，iPhone还远远不够。移动互联网不仅仅是将互联网搬到手机上，看YouTube、上Facebook，随着医疗健康、教育、金融等服务在手机上实现，一定会诞生新的商业模式。 </p>
<p>一台便携的移动终端，随时随地连接互联网，围绕这个目标，移动运营商、芯片厂商、终端厂商、互联网服务商、内容提供商史无前例地集体参战，成为过去一年最热闹的场景。而在这场战争背后，首先是对终端的争夺，人机交互界面从键盘到多点触控(multi-touch)率先成为风潮。 </p>
<p>当苹果公司的iPhone在欧美手机市场刮起旋风的时候，另外一个手机&#8220;门外汉&#8221;也把自己的利益触角伸向了这个领域，这家公司就是全球最大的互联网公司谷歌。</p>
<p> 对于这家在互联网上取得了巨大成就的公司来说，谷歌进入手机市场并不需要像苹果公司一样自己设计并制造出一款特立独行的酷品手机GPhone来争取用户，而是采用了它更为擅长的方式&#8212;&#8212;用开放的软件平台使自己成为一个联盟的组织者，就像在互联网上用AdSense建立了自己的广告联盟一样。</p>
<p> 在2007年11月5日谷歌宣布的手机联盟中有34家企业成员，包括摩托罗拉、T-<a href="http://www.donevii.com/post/tag/mobile" class="st_tag internal_tag" rel="tag" title="Posts tagged with mobile">Mobile</a>、HTC(宏达电)、高通及中国移动等34家全世界不同国家和地区的移动运营商、手机芯片提供商和手机生产商等等。谷歌将为联盟的成员免费开放一个基于<a href="http://www.donevii.com/post/tag/linux" class="st_tag internal_tag" rel="tag" title="Posts tagged with linux">Linux</a>的手机操作系统平台&#8220;Android&#8221;。谷歌称，这个平台是完全开放的综合性移动平台，供联盟成员在此基础上开发新产品、改进服务和压缩用户成本。 </p>
<p> 在互联网上，谷歌用这种免费提供软件的方式获得了大量的广告收入，2007年前三个季度，谷歌的广告收入达到了约118亿美元，它的这种模式将一直靠卖操作系统软件为生的微软搞得非常被动，如今谷歌又希望能在手机平台上重演这一幕。 </p>
<p> 在苹果、谷歌这样的新势力纷纷用新模式、新平台进入封闭的电信市场的背景下，以手机为最终表现形式的移动通信市场会发生怎样的深刻变化？也许我们可以从25年前发生在PC行业上的一切来寻找答案。 </p>
<p>25年前，整个PC行业还处于群雄割据的状态，没有一个整体性的产业标准，各个PC制造商都有属于自己的一套独立的操作系统，他们靠自己强大的渠道和产品设计能力去争取用户，而微软在这个时候却用软件捆绑机器的销售方式统一了大多数的PC平台，一定意义上这也统一了PC行业。 </p>
<p>回到现在正在发生剧烈变化的手机行业里，当手机作为基本语音通话工具时，固定标准是存在的，而当手机逐渐发展成为一个个人随身数据平台，类似于一台小型PC时，这似乎又回到了25年前PC行业的混乱时代，在这个混乱的各自为政的时代，用何种模式、何种平台来统一手机终端就成为了未来这个产业中最大的悬念，在这个悬念破解之后，又会在其背后引发一系列更大更复杂的产业变革。 </p>
<p>统一平台下的入侵计划 </p>
<p> 中国是全球最大的移动市场，在2007年11月底，中国手机用户数已经超过了5.39亿。如此庞大的市场也驱使众多的风险投资及创业者在其中淘金，北京天腾时空信息科技有限公司就是其中之一。 </p>
<p> 这家由创业基金扶持的公司成立于 2005 年，号称拥有领先的移动多媒体通信和软件研发实力，他们正在开发适用于不同型号手机的第三方客户端软件。这项工作并不容易，因为中国市场上的手机型号实在是太多了，他们要根据系统的不同、机型的不同来对开发出的软件做出调整。尽管如此，天腾时空的CEO马腾对未来还是充满着信心：&#8220;我们正在构建一个移动生活圈，把互联网上的东西都带到手机上，我们的目标就是让所有人自由，让大家的网络生活摆脱那根网线和电源线。&#8221; </p>
<p> 把互联网上的所有东西带进小小的手机终端，这个梦想驱使着中国无数的创业公司在其中寻找着机会，尽管他们坚信手机与互联网的结合是未来的趋势，但是以他们的力量，在中国移动把持的移动运营市场上还是显得太薄弱，现在有了全球最大的互联网公司谷歌的加入，互联网侵入手机的征程就显得不再那么坎坷了。</p>
<p> 在谷歌看来，全球有30亿部手机，但是在大多数情况下，手机只被设定为语音通信和发送短消息的一种工具，通过手机上网获取及发布信息的功能被忽略掉了。&#8220;这给用户带来了不必要的麻烦，并限制了他们可以享用到的服务。&#8221;谷歌移动服务总监Andy Rubin认为，这样的缺陷实际上是过去几十年间移动通信行业迅猛发展的副产品，尤其是移动电话的市场割据更加深了这一点。在这种情况下，手机制造商有充足的商业理由来开发他们各自的受保护的软件，而且运营商也更在意他们眼前所能获得的利益。 </p>
<p>这种&#8220;各自为政&#8221;的发展方式意味着应用服务的提供商必须花大量的精力来实现不同系统的兼容，他们大量的精力和技术人员都花在了如何让自己的软件能顺畅地运行在不同型号的手机上，而不是从用户的利益出发进行创新。 </p>
<p> 缺乏共享软件平台，也打击了移动领域外的商业力量的积极性，他们不愿意投入更多的时间和资金来挖掘手机更广泛的应用潜力。每当提起正在做手机客户端及免费WAP的公司，风险投资商们都会苦笑着摇摇头。&#8220;这种缺乏统一平台的做法使研发的成本居高不下，从而阻碍了创新。&#8221;Andy Rubin说。 </p>
<p>谷歌的Android平台至少让我们能看到这样一种可能，即在开放的互联网运作模式下，一个如YouTube、Facebook这样的创意，都能通过一个统一的平台将服务惠泽于互联网上的每个人。这也是互联网上能产生对用户有利并促进商业公司收入增长的新服务及新模式的主要原因。 </p>
<p> 现在，要让互联网顺利的入侵进手机，谷歌所要做的就是用免费提供软件的方式先尽可能地统一手机的平台，然后再依托互联网向这个被自己洞开的门户源源不断地输入各种应用和内容。</p>
<p> &#8220;用这款诺基亚6131i手机坐公交车可以直接当公交卡使用&#8221;，&#8220;可以直接在诺基亚手机上学习新东方的英语课程。&#8221;2007年12月11日，在北京举办的诺基亚&#8220;完全互联生活2008&#8221;大会的一侧，众多诺基亚旗下的公司及合作伙伴展示着诺基亚基于移动互联网推出的新的应用服务。其全球副总裁邓元鋆也宣布诺基亚从2007年开始已经成为了一家互联网公司。2007年8月，诺基亚就已经在全球宣布推出了Ovi(芬兰语中意为&#8220;门户&#8221;)网络服务，服务内容包括了在线地图、在线游戏和在线音乐商店。 </p>
<p> 最近几年来，诺基亚在全球收购了一大批提供各种互联网应用服务的公司：2006年8月，斥资6000万美元收购了拥有160万首歌曲的音乐网站Loudeye；2007年7月，收购美国多媒体公司Twango，Twango主要提供为互联网上共享、发布多媒体信息搭建平台的服务；紧接着在9月份，他们又收购了一家名为Enpocket的移动广告公司；10月初，诺基亚又宣布以81亿美元收购美国的Navteq公司，Navteq是汽车导航系统、个人导航设备和其他企业数字地图及基于网络地图系统的主要供应商，同时还拥有提供美国交通信息的Traffic.com网站，这也是诺基亚迄今为止最大的一笔收购； 12月，诺基亚又收购了为手机用户提供共享电脑文件的Avvenu公司。 </p>
<p> 一系列的收购行动使这家全球最大的手机制造商逐渐成为了一家提供互联网综合服务的公司，通过整合一系列的应用，他们将互联网服务引入到了自己生产的手机平台上。 </p>
<p> 诺基亚是全球手机行业的霸主，在全球手机市场上的市场占有率接近40%，在中国，2007年的前三季度，他们就卖出了5050万部手机，目前约有超过1.3亿中国用户在使用诺基亚。作为一家处于产业链下游的公司，诺基亚已经不满足于只是制造和销售手机了，它不仅要牢牢掌握住终端，而且还想把握住这个未来的信息渠道。 </p>
<p> 谷歌成立的Android联盟在一定程度上也在威胁着诺基亚。诺基亚是另一个手机软件平台Symbian的控制者，虽然诺基亚控制的Symbian联盟不具备像Android联盟这样将移动终端、芯片、运营、软件应用、设计等产业链的各个层面的力量都集成在一起的能力。不过依靠市场占有率的绝对优势，诺基亚并不惧怕手机领域的新闯入者，2007年上半年Symbian智能手机在全球共出货3460万部，Symbian智能手机累计出货量已经达到1.45亿部，在智能手机市场的份额达到72%。目前诺基亚、摩托罗拉和索尼爱立信手握全球六成以上的市场占有率，这意味着Symbian至少将在相当一段时间内横行智能手机市场。 </p>
<p> 诺基亚想用自己的实际行动证明，诺基亚的手机霸主地位是任何一家公司都无法撼动的，现在它在维持霸主地位的同时正主动向互联网靠拢。显然不用怀疑诺基亚适应变化的能力，它已有将近140年的历史，之前卖过劳保用品，也制造过电视机，因此，诺基亚公司坚信，与其自身所经历过的困难相比，目前向互联网转型的所有困难都显得微不足道。 </p>
<p>重构手机价值链 </p>
<p>整个移动通信领域，2007年最受关注的公司是苹果。自从6月份推出iPhone以来，iPhone至今已销售了超过140万部。更为重要的是，iPhone的出现开启了一个新型的与电信运营商分享收益的模式。 </p>
<p> 苹果运用的是彻底封闭型平台策略，苹果通过与当地电信运营商的业务捆绑销售产品，从用户收入中抽取一定分成。苹果在美国与运营商AT&amp;T、在德国与T-<a href="http://www.donevii.com/post/tag/mobile" class="st_tag internal_tag" rel="tag" title="Posts tagged with mobile">Mobile</a>、在英国与O2、在法国与Orange都采取了这样的合作方式。以苹果与AT&amp;T的合作为例：苹果公司每月从已经与AT&amp;T签署iPhone服务协议的每位用户中可抽取3美元费用；而新用户，苹果每月则可从每位用户中抽取高达11美元的费用。 </p>
<p>为什么苹果能与移动运营商分成？答案之一就是，苹果的iPhone能通过WiFi的方式接入互联网，使得每位用户的ARPU值增加，为运营商带来除语音通话之外的数据业务收入。</p>
<p> 曾传言苹果在2007年11月份与中国移动探讨过这种合作模式，但是对于靠语音及短信业务为主、且在移动产业链中处于主导地位的中国移动来说，他们并不喜欢手机产业中新出现的一些商业模式。这也证明了谷歌移动服务总监Andy Rubin对封闭的电信行业的判断，利润流向了少数的几家具有垄断性质的手机制造商与移动运营商那里，这种方式有碍于这个行业创新应用的产生。</p>
<p>随着谷歌这样的互联网公司将触角逐渐伸向电信领域，并且诺基亚也在主动向着互联网转型，曾经强硬封闭的运营商也只能慢慢地走向开放。移动业务价值链势必会有一个重构的过程。 </p>
<p>据悉，谷歌打算用46亿美元竞拍美国700MHz的一个无线频段，并向美国联邦通信委员会(FCC)提出了参加拍卖的四个条件：要求获胜者向手机用户开放应用，开放设备，向移动运营商开放批发服务，向内容提供商开放网络。这就意味着，谷歌决意要彻底改变原有电信业的商业模式。除此之外，又有传言说谷歌会收购美国第三大电信运营商Sprint Nextel。 </p>
<p>全球最大的互联网公司反过来收购一家电信运营商，如果这样的事情真的在2008年发生，那整个电信行业就会步入一个新的时代，不管怎么说，互联网入侵移动通信市场的序幕已经真的拉开了。</p>
<p>狂欢吧，身体！ </p>
<p> 在电影《迷失东京》中，女主角斯佳丽&#183;约翰逊用好奇的眼神观看着一名玩着跳舞游戏的日本男子，他大汗淋漓，正操作一种需要手舞足蹈甚至360度旋转身体才能配合画面节拍的游戏。在东京，拥有这种运动式大型游戏机的游戏厅非常多，电影选择这个场景也是有意突出西方人对奇特的日式娱乐的惊讶。 </p>
<p>然而，从2006年底开始，一款由日本任天堂公司开发的名为&#8220;Wii&#8221;的游戏机迅速风靡欧美家庭，这款电视遥控器般大小的游戏机正像上世纪80年代的卡拉OK一样，它凭借更接近自然的交互方式让全家老少都能参与到游戏中来。一时间，自由交互式操控的复兴给整个游戏机产业注入了新的活力。</p>
<p> 在Wii诞生之前，游戏业多少有些尴尬：上班族没时间玩，老年人上手又太难，小孩子受到家长的严格监督和管制。实际上，大多数人的游戏经验都只停留在童年，游戏随着玩家长大成人遭到放弃甚至厌恶和抵制。多数人后天的发展不仅没有打开体验的更广阔天地，反而是一步步进入专业化、职业化的路径，再也没机会感受自身生活范围以外的世界。</p>
<p>Wii的出现改变了这一切，Wii的设计师宫本茂也因此成为英国《经济学人》的&#8220;年度创新大奖&#8221;的获得者，&#8220;当今电子游戏界的关键人物&#8221;的评价也从另一个角度证明了Wii的创新价值。 </p>
<p>Wii的重要性在于，设计者宫本茂坚信，游戏必须与每个人的日常生活发生联系；游戏必须更加深入社会，得到整个社会的理解。这可以看作这位游戏设计大师的游戏世界观，正是这样的信仰产生了Wii的颠覆性创想。这种信仰也正好道出了游戏的本质&#8212;&#8212;游戏本来就是生活的延伸，是人们工作之余的一种经验扩展，游戏让人获得习以为常的生活里难以体会到的感受，甚至是经验和知识，怎么能将大部分人隔离于游戏之外呢？ </p>
<p>被束缚的自由 </p>
<p> &#8220;硅谷海盗&#8221;乔布斯似乎比一般人更加难以忍受密密麻麻的按键和狭小的屏幕给人的束缚感，素来爱凭自我感受来判断技术趋势的他坚信：技术进步不应该成为束缚人自由的枷锁。iPhone证明乔布斯又&#8220;赌&#8221;对了。这款手机在把实体按键简化到只剩一个之后，更是利用多点触控(multi-touch)屏幕让自由轻松的触控体验发挥到了极致。他曾经描述，自己过去在使用手机时，看着密密麻麻的按键却找不到一个简单的功能时，头脑中就只有把手机砸掉的冲动，何谈使用它正常工作。</p>
<p>交互设计大师、&#8220;Macintosh&#8221;之父杰夫&#183;拉斯基(Jaf Raskin)早就指出，好的设计不会让使用者养成对今后工作不利的习惯，但设计人员却经常有意无意地给用户设下坏习惯的陷阱。事实上，良好的设计应该在给用户带来帮助的同时，把对其未来可能出现的限制性障碍降到最低，保持使用者自由的可扩展性。 </p>
<p>实际上，界面的不自由长久以来是一个被忽视并且有点积重难返的问题，越来越复杂的设备和使用者界面，大大增加了拉斯基所说的陷阱的数量，而解放使用者自由就需要下更大的决心和冒更大的风险颠覆传统。 </p>
<p>当互联网信息过载让人们淹没在信息海洋中时，谷歌充当了颠覆者的角色，它只在网页上显示一个输入框；当手机开始附加各种原来PC的功能而变得日益复杂，学习成本上升时，iPhone开创性地只保留一个实体按钮。大刀阔斧地删减界面信息、按钮和选项，使用户不用进行多余的思考，即可快速进入想要达成的任务。 </p>
<p> Wii mote被设计成客厅里最具亲和力的电视遥控器样式，让你接触无距离感，拿起它你就知道如何使用，而玩好它却又需要时间和技巧。正如谷歌简单的输入框背后有复杂的运算；苹果电脑薄薄的《使用说明》上第一句话是，&#8220;你的苹果电脑被设计为你能很快设置并且马上开始使用&#8221;，说明书的封面上印着一行灰字：&#8220;Congratulations，you and your MacBook were made for each other.&#8221;很有从此&#8220;人机合一，形影相随，只有我懂你&#8221;的性感意味。</p>
<p>正是因为这样，根据互补资源价值相关的原理，心理需求上互补的、无线的、可移动的和能带来真实触感的资源将变得稀缺而更有价值。这就是解放四肢的Wii和自由触控的iPhone之所以获得极大成功的深层社会心理学原理。</p>
<p>从芯片到设备的连锁爆发</p>
<p> 基于社会心理学上的新需求是商业应用市场爆发的充分而非必要条件，Wii、iPhone等颠覆键盘和鼠标操作方式的产品之所以在2007年爆发，也必须有一些上游技术方面的必要条件。</p>
<p>实际上，从1980年施乐实验室帕洛阿尔托研究中心(PARC)的计算机&#8220;STAR&#8221;算起，&#8220;鼠标+图像化界面&#8221;在计算机上的应用已经走过了37年历史，最早的鼠标连线还是在其后部，更像是老鼠的尾巴 。其实正是CPU芯片计算能力的增强，使得计算机可以模拟出更丰富的图形化界面效果，鼠标这种低技术含量但实用的发明才有用武之地。 </p>
<p> 同样，iPhone的多点触控技术和更简单的Wii mote手柄的单点触控技术都不是新发明，它们之所以在2007年大行其道，除了符合人们普遍对密密麻麻的键盘和狭小屏幕的厌烦心理，更根本的原因是芯片计算能力的进一步增强。 LUPA开源社区&#8217;B!I*G2^ m5T-P1^</p>
<p>英特尔高级副总裁、前CTO 帕特&#183;基辛格在谈到45纳米芯片的突破以及&#8220;多核&#8221;技术的未来影响时表示，更低功耗、更强性能和更丰富功能的芯片为无线的、模拟图形的和能感知触觉的计算提供了更好的技术准备。用户可以不用为了机器刻意改变行为习惯，而机器具备了更精确的识别人的动作并做出更丰富反馈的能力。 </p>
<p>简单说，计算能力的进步使得我们已经可以抛弃&#8220;计算机中古时代&#8221;的键盘和鼠标，拥抱更现代、更性感和更自由的多点触控技术。它为交互性更强的应用打开了新的天地，比如，当iPhone靠近人脸时，多点触控屏幕会自动感应，让触控点全部关闭，因为这时候你正在接听电话，不需要任何按键，而当机器感受到你进入其他场景的信号时，你正好需要的按键又会聪明地出现。当机器能以人的自然动作为中心时，机器的操作大大降低了门槛，几乎不需要学习。 </p>
<p>从购买和使用Wii的人群也可以看出，难以掌握复杂操作的学龄前儿童和对新的电子设备接受度最差的中老年人，都可以轻松学会使用Wii。这更加证明了过去繁琐的操作和束缚自然动作的低级交互方式扼杀了许多人获得新鲜体验的自由。Wii也成为了圣诞节流行的一款送给小孩子的礼品。虽然这会让使用者耗费更多的动作及体力，不过，却能够在操控过程中获得更多的乐趣。这种操作方式抛弃了目前所使用的键盘(按钮)、鼠标，将进一步体现出人性化操控界面的未来趋势。 </p>
<p> 到目前为止，Wii已经销售了超过1300万台，Xbox360早推出1年，但是已经不敌Wii的风头，以几十万台的差距落后，而PS3则只有500多万台售出，而且增长缓慢。虽然市场上开始出现拙劣模仿者和盗版游戏，就像当初MP3厂商模仿iPod一样，而且同类厂商开始降价应对Wii的冲击，但Wii依然在营造产品紧缺的状态，坚持不降价，保证了极高的利润率。任天堂的市值也一路攀升，超过索尼近一倍，成为日本证券市场上仅次于丰田的第二大市值的公司。</p>
<p>宫本茂已经沿着解放身体的思路把Wii驶入家庭健身器市场，Wii fit系列游戏包括了滑雪、跳舞、瑜伽、俯卧撑、呼啦圈和英式足球等。设备上，Wii又推出了平衡板(Wii balance)，可通过在上面运动和改变姿势来操控屏幕上的虚拟角色。 </p>
<p> 微软的客厅战争也打算以多点触控技术作为杀手锏。去年春天，网上开始流传一段Microsoft Surface的视频，其演示的多点触控技术令观者赞叹不已。Surface大大的触摸屏可以响应很多种手势，而且，当你把电子设备放在它的触摸屏上时，Surface电脑马上会&#8220;看到&#8221;你的设备(通过隐藏的多个摄像头)，并即时在屏幕上展现出各种可能的操作。比如你放个数码相机上去，它就会问你是否要查看照片，这种简单的操作一旦推向市场很可能像Wii一样改变家庭PC产业。</p>
<p> 苹果公司也已经展示了下一代应用触控屏幕的台式电脑iMac，惠普公司的PDA产品iPaq在触控技术上也做了独特的尝试，主要是实现了在小小屏幕上用手指实现精确到毫米的控制。三星电子全球CEO尹钟龙也认为下一代手机要性感并且易于操作，今年他们推出了触摸屏手机SGH-P520，以应对来势汹汹的iPhone。而iPhone也在触感互动上深入探索，在申请按压虚拟按钮仍然有弹回感觉的技术专利。 </p>
<p> 苹果公司预计iPhone的销量在2008年1月14日的Mac world大会之前达到500万部，但从近20%的产品被购买后没有开通AT&amp;T的服务，可推测这些产品是流入了非美国市场破解后使用，看来iPhone病毒式的扩散威力还只是开了个头。 </p>
<p>iPhone的热销引发了同类厂商的跟随效应。去年，在芯片技术领域，国内厂商美芯半导体的销售人员惊奇地发现，他们投资的适合计算空间平衡改变的芯片，其销售业绩大大高于其他芯片产品。这些芯片主要应用于交互式的游戏机、可感知使用者行为的手机等设备上。</p>
<p> 实际上，通过iPhone的热卖我们完全可以预见到，下一阶段的芯片必须为下一代手机等电子产品的这些特点做足准备：用容量有限的电池(意味着芯片的功耗必须是低的)，功能越来越丰富(意味着芯片支持更多任务同时运行)，越来越便携(意味着更好的支持无线通信)而且更讲求视觉和触感体验(意味着模拟计算等能力更强)。目前，唯一独立存在的GPU(图形处理器)厂商Nvidia公司，就是由于专注于这个越来越重视视觉体验的消费电子市场，才取得了这两年的高速成长。可以预测适合这些特点的芯片的爆发性需求应该会在2008年日渐明显。 </p>
<p> 另外，IT咨询顾问公司InStart的殷建松认为，2008年值得期待的是46英寸屏幕的电子设备的出现，iPhone和iPod Touch的屏幕是3.5英寸,而46英寸的屏幕视觉和触觉体验效果更好，并且仍然能放入口袋中。像iPod Touch一样仅仅作为游戏、娱乐和信息浏览器的工具也是46英寸的屏幕最为合适，它恰好是体验和便携性的平衡。</p>
<p> 以上种种都为我们描绘出一个能够更加全面和丰富地感知人的自然行为的未来世界，这个世界的基础应该是一种无所不在的感知、收集、识别，最后做出更丰富和人性化反馈的计算机。在这个用户体验极大丰富和更自由交互的世界面前，引领时代的厂商们已经占好了跑道，各就各位。</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/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/354.html" title="[转] MTK平台芯片概说 (2007-11-26)">[转] MTK平台芯片概说</a> (0)</li>
	<li><a href="http://www.donevii.com/post/118.html" title="Web2.0遭遇生死劫？ (2006-10-25)">Web2.0遭遇生死劫？</a> (0)</li>
	<li><a href="http://www.donevii.com/post/124.html" title="C++资源之不完全导引 (2006-10-26)">C++资源之不完全导引</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/402.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]内存种类知多少</title>
		<link>http://www.donevii.com/post/388.html</link>
		<comments>http://www.donevii.com/post/388.html#comments</comments>
		<pubDate>Mon, 14 Jan 2008 08:39:12 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[doc]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mtk]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[SDRAM]]></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/388.html</guid>
		<description><![CDATA[终于知道为什么SDRAM都被CPU当做Internal RAM来用。 凡是对电脑有所了解的朋友都知道内存这玩意，可是，可能有不少朋友对内存的认识仅仅局限在SDRAM和DDR SDRAM这两种类型，事实上，内存的种类是... ]]></description>
			<content:encoded><![CDATA[<pre>    <em>终于知道为什么<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>都被CPU当做Internal <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>来用。</em></pre>
<pre>    凡是对电脑有所了解的朋友都知道内存这玩意，可是，可能有不少朋友对内存的认识仅仅局限在<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>和DDR <a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>这两种类型，事实上，内存的种类是非常多的，从能否写入的角度来分，就可以分为<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>(随机存取存储器)和ROM(只读存储器)这两大类。每一类别里面有分别有许多种类的内存。以下就让我们看看内存到底有些什么种类吧！</pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_01.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　一、<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>(Random Access Memory，随机存取存储器)</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_02.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>的特点是：电脑开机时，操作系统和应用程序的所有正在运行的数据和程序都会放置其中，并且随时可以对存放在里面的数据进行修改和存取。它的工作需要由持续的电力提供，一旦系统断电，存放在里面的所有数据和程序都会自动清空掉，并且再也无法恢复。</pre>
<pre>
 </pre>
<pre>　　根据组成元件的不同，<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>内存又分为以下十八种：</pre>
<pre>
 </pre>
<pre>　　01.DRAM（Dynamic <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，动态随机存取存储器）：</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_03.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　这是最普通的<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，一个电子管与一个电容器组成一个位存储单元，DRAM将每个内存位作为一个电荷保存在位存储单元中，用电容的充放电来做储存动作，但因电容本身有漏电问题，因此必须每几微秒就要刷新一次，否则数据会丢失。存取时间和放电时间一致，约为2~4ms。因为成本比较便宜，通常都用作计算机内的主存储器。</pre>
<pre>
 </pre>
<pre>　　02.SRAM（Static <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，静态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_04.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　静态，指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元，因为没有电容器，因此无须不断充电即可正常运作，因此它可以比一般的动态随机处理内存处理速度更快更稳定，往往用来做高速缓存。</pre>
<pre>
 </pre>
<pre>　　03.VRAM（Video <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，视频内存）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_05.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　它的主要功能是将显卡的视频数据输出到数模转换器中，有效降低绘图显示芯片的工作负担。它采用双数据口设计，其中一个数据口是并行式的数据输出入口，另一个是串行式的数据输出口。多用于高级显卡中的高档内存。</pre>
<pre>
 </pre>
<pre>　　04.FPM DRAM（Fast Page Mode DRAM，快速页切换模式动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_06.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　改良版的DRAM，大多数为72Pin或30Pin的模块。传统的DRAM在存取一个BIT的数据时，必须送出行地址和列地址各一次才能读写数据。而FRM DRAM在触发了行地址后，如果CPU需要的地址在同一行内，则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址是连续的，这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。FPM将记忆体内部隔成许多页数Pages，从512B到数KB不等，在读取一连续区域内的数据时，就可以通过快速页切换模式来直接读取各page内的资料，从而大大提高读取速度。在96年以前，在486时代和PENTIUM时代的初期，FPM DRAM被大量使用。</pre>
<pre>
 </pre>
<pre>　　05.EDO DRAM（Extended Data Out DRAM，延伸数据输出动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_07.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　这是继FPM之后出现的一种存储器，一般为72Pin、168Pin的模块。它不需要像FPM DRAM那样在存取每一BIT 数据时必须输出行地址和列地址并使其稳定一段时间，然后才能读写有效的数据，而下一个BIT的地址必须等待这次读写操作完成才能输出。因此它可以大大缩短等待输出地址的时间，其存取速度一般比FPM模式快15%左右。它一般应用于中档以下的Pentium主板标准内存，后期的486系统开始支持EDO DRAM，到96年后期，EDO DRAM开始执行。。</pre>
<pre>
 </pre>
<pre>　　06.BEDO DRAM（Burst Extended Data Out DRAM，爆发式延伸数据输出动态随机存取存储器）</pre>
<pre>
 </pre>
<pre>　　这是改良型的EDO DRAM，是由美光公司提出的，它在芯片上增加了一个地址计数器来追踪下一个地址。它是突发式的读取方式，也就是当一个数据地址被送出后，剩下的三个数据每一个都只需要一个周期就能读取，因此一次可以存取多组数据，速度比EDO DRAM快。但支持BEDO DRAM内存的主板可谓少之又少，只有极少几款提供支持（如VIA APOLLO VP2），因此很快就被DRAM取代了。</pre>
<pre>
 </pre>
<pre>　　07.MDRAM（Multi-Bank DRAM，多插槽动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_09.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　MoSys公司提出的一种内存规格，其内部分成数个类别不同的小储存库 (BANK)，也即由数个属立的小单位矩阵所构成，每个储存库之间以高于外部的资料速度相互连接，一般应用于高速显示卡或加速卡中，也有少数主机板用于L2高速缓存中。</pre>
<pre>
 </pre>
<pre>　　08.WRAM（Window <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，窗口随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_10.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　韩国Samsung公司开发的内存模式，是VRAM内存的改良版，不同之处是它的控制线路有一、二十组的输入/输出控制器，并采用EDO的资料存取模式,因此速度相对较快，另外还提供了区块搬移功能（BitBlt），可应用于专业绘图工作上。</pre>
<pre>
 </pre>
<pre>　　09.RDRAM（Rambus DRAM，高频动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_11.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　Rambus公司独立设计完成的一种内存模式，速度一般可以达到500~530MB/s，是DRAM的10倍以上。但使用该内存后内存控制器需要作相当大的改变，因此它们一般应用于专业的图形加速适配卡或者电视游戏机的视频内存中。</pre>
<pre>
 </pre>
<pre>　　10.<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>（Synchronous DRAM，同步动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_12.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　这是一种与CPU实现外频Clock同步的内存模式，一般都采用168Pin的内存模组，工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料，这样可以取消等待周期，减少数据传输的延迟，因此可提升计算机的性能和效率。</pre>
<pre>
 </pre>
<pre>　　11.SGRAM（Synchronous Graphics <a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>，同步绘图随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_13.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>的改良版，它以区块Block，即每32bit为基本存取单位，个别地取回或修改存取的资料，减少内存整体读写的次数，另外还针对绘图需要而增加了绘图控制器，并提供区块搬移功能（BitBlt），效率明显高于<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>。</pre>
<pre>
 </pre>
<pre>　　12.SB SRAM（Synchronous Burst SRAM，同步爆发式静态随机存取存储器）</pre>
<pre>
 </pre>
<pre>　　一般的SRAM是非同步的，为了适应CPU越来越快的速度，需要使它的工作时脉变得与系统同步，这就是SB SRAM产生的原因。</pre>
<pre>
 </pre>
<pre>　　13.PB SRAM（Pipeline Burst SRAM，管线爆发式静态随机存取存储器）</pre>
<pre>
 </pre>
<pre>　　CPU外频速度的迅猛提升对与其相搭配的内存提出了更高的要求，管线爆发式SRAM取代同步爆发式SRAM成为必然的选择，因为它可以有效地延长存取时脉，从而有效提高访问速度。</pre>
<pre>
 </pre>
<pre>　　14.DDR <a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>（Double Data Rate二倍速率同步动态随机存取存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_16.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　作为<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>的换代产品，它具有两大特点：其一，速度比<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>有一倍的提高；其二，采用了DLL（Delay Locked Loop：延时锁定回路）提供一个数据滤波信号。这是目前内存市场上的主流模式。</pre>
<pre>
 </pre>
<pre>　　15.SLDRAM （Synchronize Link，同步链环动态随机存取存储器）</pre>
<pre>
 </pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_17.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre> </pre>
<pre>
 </pre>
<pre>　　这是一种扩展型<a href="http://www.donevii.com/post/tag/sdram" class="st_tag internal_tag" rel="tag" title="Posts tagged with SDRAM">SDRAM</a>结构内存，在增加了更先进同步电路的同时，还改进了逻辑控制电路，不过由于技术显示，投入实用的难度不小。</pre>
<pre>
 </pre>
<pre>　　16.CDRAM（CACHED DRAM，同步缓存动态随机存取存储器）</pre>
<pre>
 </pre>
<pre>　　这是三菱电气公司首先研制的专利技术，它是在DRAM芯片的外部插针和内部DRAM之间插入一个SRAM作为二级CACHE使用。当前，几乎所有的CPU都装有一级CACHE来提高效率，随着CPU时钟频率的成倍提高，CACHE不被选中对系统性能产生的影响将会越来越大，而CACHE DRAM所提供的二级CACHE正好用以补充CPU一级CACHE之不足，因此能极大地提高CPU效率。</pre>
<pre>
 </pre>
<pre>　　17.DDRII (Double Data Rate Synchronous DRAM，第二代同步双倍速率动态随机存取存储器)</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_19.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　DDRII 是DDR原有的SLDRAM联盟于1999年解散后将既有的研发成果与DDR整合之后的未来新标准。DDRII的详细规格目前尚未确定。</pre>
<pre>
 </pre>
<pre>　　18.DRDRAM (Direct Rambus DRAM)</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_20.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　是下一代的主流内存标准之一，由Rambus 公司所设计发展出来，是将所有的接脚都连结到一个共同的Bus，这样不但可以减少控制器的体积，已可以增加资料传送的效率。</pre>
<pre>
 </pre>
<pre>　　二、ROM(READ Only Memory，只读存储器)</pre>
<pre>
 </pre>
<pre>　　ROM是线路最简单半导体电路，通过掩模工艺，一次性制造，在元件正常工作的情况下，其中的代码与数据将永久保存，并且不能够进行修改。一般应用于PC系统的程序码、主机板上的 BIOS (基本输入/输出系统Basic Input/Output System)等。它的读取速度比<a href="http://www.donevii.com/post/tag/ram" class="st_tag internal_tag" rel="tag" title="Posts tagged with RAM">RAM</a>慢很多。</pre>
<pre>
 </pre>
<pre>　　根据组成元件的不同，ROM内存又分为以下五种：</pre>
<pre>
 </pre>
<pre>　　1.MASK ROM（掩模型只读存储器）</pre>
<pre>
 </pre>
<pre>　　制造商为了大量生产ROM内存，需要先制作一颗有原始数据的ROM或EPROM作为样本，然后再大量复制，这一样本就是MASK ROM，而烧录在MASK ROM中的资料永远无法做修改。它的成本比较低。</pre>
<pre>
 </pre>
<pre>　　2.PROM（Programmable ROM，可编程只读存储器）</pre>
<pre>
 </pre>
<pre>　　这是一种可以用刻录机将资料写入的ROM内存，但只能写入一次，所以也被称为“一次可编程只读存储器”(One Time Progarmming ROM，OTP-ROM)。PROM在出厂时，存储的内容全为1，用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0，则用户可以将其中的部分单元写入1)， 以实现对其“编程”的目的。</pre>
<pre>
 </pre>
<pre>　　3.EPROM（Erasable Programmable，可擦可编程只读存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_24.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　这是一种具有可擦除功能，擦除后即可进行再编程的ROM内存，写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比较容易识别，其封装中包含有“石英玻璃窗”，一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住， 以防止遭到阳光直射。</pre>
<pre>
 </pre>
<pre>　　4.EEPROM（Electrically Erasable Programmable，电可擦可编程只读存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_25.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　功能与使用方式与EPROM一样，不同之处是清除数据的方式，它是以约20V的电压来进行清除的。另外它还可以用电信号进行数据写入。这类ROM内存多应用于即插即用（PnP）接口中。</pre>
<pre>
 </pre>
<pre>　　5.Flash Memory（快闪存储器）</pre>
<pre>
 </pre>
<p><center></p>
<pre><img src="http://www.ithard.com/pics/newspic/2004/07/21/040719_hd_kr_memory_26.jpg" /></pre>
<p></center></p>
<pre>
 </pre>
<pre>　　这是一种可以直接在主机板上修改内容而不需要将IC拔下的内存，当电源关掉后储存在里面的资料并不会流失掉，在写入资料时必须先将原本的资料清除掉，然后才能再写入新的资料，缺点为写入资料的速度太慢。</pre>

	<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/128.html" title="应用加速 (2006-10-26)">应用加速</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/387.html" title="[转]嵌入式系统 Boot Loader 技术内幕 (2008-01-14)">[转]嵌入式系统 Boot Loader 技术内幕</a> (0)</li>
	<li><a href="http://www.donevii.com/post/9.html" title="flickr对javascript干的好事 (2006-08-17)">flickr对javascript干的好事</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/388.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[转] MTK平台芯片概说</title>
		<link>http://www.donevii.com/post/354.html</link>
		<comments>http://www.donevii.com/post/354.html#comments</comments>
		<pubDate>Mon, 26 Nov 2007 05:11:28 +0000</pubDate>
		<dc:creator>gavinkwoe</dc:creator>
				<category><![CDATA[doc]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mtk]]></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/354.html</guid>
		<description><![CDATA[转至 http://blog.sina.com.cn/mobliephone 目前联发科技已开发出MT6205、MT6217、MT6218、MT6219、MT6226、MT6227、MT6228等系列平台,其中MT6205、MT6217、MT6218、MT6219、MT6226、MT6227、MT6228、MT6229、MT6225、MT6223、MT6230均... ]]></description>
			<content:encoded><![CDATA[<p>转至 <a href="http://blog.sina.com.cn/mobliephone" title="http://blog.sina.com.cn/mobliephone">http://blog.sina.com.cn/mobliephone</a></p>
<p>目前联发科技已开发出MT6205、MT6217、MT6218、MT6219、MT6226、MT6227、MT6228等系列平台,其中MT6205、MT6217、MT6218、MT6219、MT6226、MT6227、MT6228、MT6229、MT6225、MT6223、MT6230均为基带芯片，所有芯片均采用ARM7的核。<br />
MT6305为电源管理芯片，有MT6305、MT6305N、MT6305BN；</p>
<p>MT6129、MT6139是射频芯片。MT6129为早期的射频RF芯片，一般与MT6205的CPU一起使用。现在用的多的是MT6129C、MT6129N、MT6129D，其中MT6129C、MT6129N一般用在MT6217、MT6218、MT6219的CPU的机器上，MT6129D一般用在MT6226、MT6227的CPU的机器上。RF3146（7×7mm）、RF3146D（双频）、RF3166（6×6mm）为RFMD的PA。</p>
<p>MT6205为最早的方案，只有GSM的基本功能，不支持GPRS、WAP、MP3等功能。(2003年MP)；<br />
MT6218为在MT6205基础上增加GPRS、WAP、MP3功能。MT6217为MT6218的cost down方案，与MT6128 PIN TO PIN，只是软件不同而已，另外MT6217支持16bit数据。（2004年MP）<br />
MT6219为MT6218上增加内置AIT的1.3M camera处理IC，增加MP4功能。8bit数据。（2005年MP）<br />
MT6226为MT6219 cost 升级产品，内置0.3M 摄相处理IC，支持GPRS、WAP、MP3、MP4等，内部配置比MT6219优化及改善，比如配蓝牙是可用很便宜的芯片CSR的BC03模块USD3即可支持数据传输（如听立体声MP3等）功能。<br />
MT6226M为MT6226高配置设计，内置的是1.3M摄像处理IC。（2006年MP）<br />
MT6227与MT6226功能基本一样，PIN TO PIN，只是内置的是2.0M 摄像处理IC。（2006年MP）<br />
MT6228比MT6227增加TV OUT功能，内置3.0M 摄像处理IC，支持支持GPRS、WAP、MP3、MP4。（2006年MP）<br />
从MT6226后软件均可支持网络摄像头功能，也就是说你的机子可以用于QQ视频。</p>
<p>MT6229平台支持EDGE功能，其他功能和6228基本一致。</p>
<p>MT6225是6217的代替产品，可以接cam但是没有isp，也就是没有特效，变焦，但是其主频很高和6228/6229一样达到了104mhz,可以接wifi,并且给设计公司提出了更高的要求——如何利用104m的资源去实现mp4的编解码，如何用104m的资源跑更多的应用，这些都是设计公司做的,对设计公司的要求也非常得高。</p>
<p>MT6223是6205的替代，支持语音，短信，MP3,不支持T_F卡，USB盘，没有集成ISP，PMIC内签。</p>
<p>目前市面上出的双卡双待手机,一般是采取的方案分为以下几种:MT6226+6205,MT6225+6205和MT6225+6223</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/402.html" title="[转] 移动互联网的终端革命 (2008-05-02)">[转] 移动互联网的终端革命</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/124.html" title="C++资源之不完全导引 (2006-10-26)">C++资源之不完全导引</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>
</ul>

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