<?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>agilejava</title>
	<atom:link href="http://www.agilejava.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.agilejava.net/blog</link>
	<description>｛Java,Design Patterns,Distributed,SOA,Lucene｝</description>
	<lastBuildDate>Wed, 23 Mar 2011 04:33:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>服务器硬盘的性能与稳定性指标</title>
		<link>http://www.agilejava.net/blog/archives/161</link>
		<comments>http://www.agilejava.net/blog/archives/161#comments</comments>
		<pubDate>Tue, 22 Mar 2011 16:10:14 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[硬件性能]]></category>
		<category><![CDATA[硬盘]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/161</guid>
		<description><![CDATA[大型互联网企业保存着大量的用户数据，这些数据都是存储在服务器硬盘上的，那么服务器硬盘的性能与稳定性对于一个互联网服务的质量起着相当重要的作用。 下面我们就来了解一下服务器硬盘的性能指标： 硬盘的转速（Spindle Speed）：硬盘转速就是指硬盘主轴电机的转动速度，也就是硬盘盘片在一分钟内所能完成的最大转数（rpm）。转速的快慢是标示硬盘档次的重要参数之一，它是决定硬盘内部传输率的关键因素之一，在很大程度上直接影响到硬盘的速度。硬盘的转速越快，硬盘寻找文件的速度也就越快，相对的硬盘的传输速度也就得到了提高。硬盘转速以每分钟多少转来表示，单位表示为RPM，RPM是Revolutions Per minute的缩写，是转/每分钟。RPM值越大，内部传输率就越快，访问时间就越短，硬盘的整体性能也就越好。 然而，转速的提高也带来了磨损加剧、温度升高、噪声增大等一系列负面影响。 硬盘数据传输率：的英文拼写为Data Transfer Rate，简称DTR。硬盘数据传输率表现出硬盘工作时数据传输速度，是硬盘工作性能的具体表现，它并不是一成不变的而是随着工作的具体情况而变化的。在读取硬盘不同磁道、不同扇区的数据；数据存放的是否连续等因素都会影响到硬盘数据传输率。因为这个数据的不确定性，所以厂商在标示硬盘参数时，更多是采用外部数据传输率(External Transfer Rate)和内部数据传输率（Internal Transfer Rate）。 内部数据传输率（internal data transfer rate）：也叫持续数据传输率（sustained transfer rate），单位Mbits/S，这是兆位/秒的意思（注意与MB/S（兆字节/秒）之间的差别：MB/S=Mbits/S除以8）。它指磁头至硬盘缓存间的最大数据传输率，一般取决于硬盘的盘片转速和盘片数据线密度（指同一磁道上的数据间隔度）。内部传输率可以明确表现出硬盘的读写速度，它的高低才是评价一个硬盘整体性能的决定性因素，它是衡量硬盘性能的真正标准。 接口访问速度（Gb/秒）：该指标也称为突发数据传输率（Burst data transfer rate）或外部数据传输率(External Transfer Rate)，它是指从硬盘缓冲区读取数据的速率，也就是计算机通过硬盘接口从缓存中将数据读出交给相应的控制器的速率。在广告或硬盘特性表中常以数据接口速率代替，单位为MB/s。ATA100中的100就代表着这块硬盘的外部数据传输率理论最大值是100MB/s；ATA133则代表外部数据传输率理论最大值是133MB /s；SATA1.0接口的硬盘外部理论数据最大传输率可达150MB/s，而SATAII接口的硬盘外部理论数据最大传输率可达300MB/s。这些只是硬盘理论上最大的外部数据传输率，在实际的日常工作中是无法达到这个数值的，而是更多的取决于内部数据传输率。 寻道时间，平均读/写时间（毫秒）：平均寻道时间的英文拼写是Average Seek Time，它是了解硬盘性能至关重要的参数之一。它是指硬盘在接收到系统指令后，磁头从开始移动到移动至数据所在的磁道所花费时间的平均值，它一定程度上体现硬盘读取数据的能力，是影响硬盘内部数据传输率的重要参数，单位为毫秒（ms）。不同品牌、不同型号的产品其平均寻道时间也不一样，但这个时间越低，则产品越好，现今主流的硬盘产品平均寻道时间都在在9ms左右。 平均延迟时间（毫秒）：它指的是磁头移动到指定磁道后，还需要多少时间指定的（即要读取或者写入的）扇区才会转到磁头下进行读取或者写入的相关操作，很明显这个时间和盘片的转速有关，平均延迟时间一般指盘片旋转一周所用时间的一半，单位为毫秒(ms)。这样我们就可以很轻松地换算出硬盘转速和平均潜伏期的一一对应关系。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 换算公式为：（60*1000）/ 硬盘转速 * 0.5=平均延迟时间&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 可以计算出来，5400转 5.556ms，7200转 4.167ms和10000转 3ms 平均访问时间(Average Access Time)：这项指标在官方技术文档中一般不会出现，它指的是从相应的读或者写指令发出开始到指定的扇区转到磁头下等待进行读取或者写入（也有的称为从读/写指令发出到第一笔数据读/写所用的时间）为止的这段时间。一般情况下，平均访问时间约等于平均寻道时间和平均延迟时间之和（严格定义中还包括一些指令处理时间，但一般忽略不计）。其单位也为毫秒(ms)，它的值我们可以利用Hdtach和Winbench 99v2.0测试出来。 缓存（Cache memory）：缓存是硬盘与外部总线交换数据的场所，是硬盘控制器上的一块内存芯片，具有极快的存取速度。硬盘读数据的过程是将要读取的资料存入缓存，等缓存中填充满数据或者要读取的数据全部读完后再从缓存中以外部传输率传向硬盘外的数据总线。它是硬盘内部存储和外部接口之间的缓冲器。由于硬盘的内部数据传输率和接口访问速度不同，缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素，能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据，有大缓存，则可以将那些零碎数据暂存在缓存中，减小外系统的负荷，也提高了数据的传输速度。 单碟容量：除了对于容量增长的贡献之外，单碟容量的另一个重要意义在于提升硬盘的数据传输速度。单碟容量的提高得益于磁道数的增加和磁道内线性磁密度的增加。磁道数的增加对于减少磁头的寻道时间大有好处，因为磁片的半径是固定的，磁道数的增加意味着磁道间距离的缩短，而磁头从一个磁道转移到另一个磁道所需的就位时间就会缩短。这将有助于随机数据传输速度的提高。而磁道内线性磁密度的增长则和硬盘的持续数据传输速度有着直接的联系，磁道内线性密度的增加使得每个磁道内可以存储更多的数据，从而在碟片的每个圆周运动中有更多的数据被从磁头读至硬盘的缓冲区里。 可靠性与数据完整性指标： 平均无故障时间（MTBF，小时）:平均无故障时间(Mean Time Between Failures，简称MTBF)是指硬盘平均能够正常运行多长时间，才发生一次故障。这是衡量硬盘可靠性的重要参数，平均无故障时间越长，硬盘的可靠性就越高。目前主流产品的平均无故障时间(MTBF)达到了一百万小时以上。 全天候不间断运行的可靠性级别 (AFR) 不可恢复读错误/被读数据（位） 每年运行小时数 [...]]]></description>
			<content:encoded><![CDATA[<p>大型互联网企业保存着大量的用户数据，这些数据都是存储在服务器硬盘上的，那么服务器硬盘的性能与稳定性对于一个互联网服务的质量起着相当重要的作用。 </p>
<p>下面我们就来了解一下服务器硬盘的性能指标：</p>
<p><a href="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image2.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image_thumb2.png" width="475" height="331" /></a></p>
<ul>
<li><strong>硬盘的转速（Spindle Speed）</strong>：硬盘转速就是指硬盘主轴电机的转动速度，也就是硬盘盘片在一分钟内所能完成的最大转数（rpm）。<font color="#ff0000">转速的快慢是标示硬盘档次的重要参数之一，它是决定硬盘内部</font><font color="#ff0000">传输率</font><font color="#ff0000">的关键因素之一，在很大程度上直接影响到硬盘的速度。</font>硬盘的转速越快，硬盘寻找文件的速度也就越快，相对的硬盘的传输速度也就得到了提高。<a href="http://baike.baidu.com/view/13508.htm">硬盘转速</a>以每分钟多少转来表示，单位表示为RPM，RPM是Revolutions Per minute的缩写，是转/每分钟。RPM值越大，内部传输率就越快，访问时间就越短，硬盘的整体性能也就越好。 然而，转速的提高也带来了磨损加剧、温度升高、噪声增大等一系列负面影响。 </li>
<li><a href="http://www.hudong.com/wiki/%E7%A1%AC%E7%9B%98"><strong>硬盘</strong></a><strong>数据传输率</strong>：的英文拼写为Data Transfer Rate，简称DTR。硬盘数据传输率表现出硬盘工作时数据传输速度，是硬盘工作性能的具体表现，它并不是一成不变的而是随着工作的具体情况而变化的。在读取硬盘不同磁道、不同扇区的数据；数据存放的是否连续等因素都会影响到硬盘数据传输率。因为这个数据的不确定性，所以厂商在标示硬盘参数时，更多是采用外部数据传输率(External Transfer Rate)和内部数据传输率（Internal Transfer Rate）。 </li>
<li><strong>内部数据传输率（internal data transfer rate）</strong>：也叫持续数据传输率（sustained transfer rate），单位Mbits/S，这是兆位/秒的意思（注意与MB/S（兆字节/秒）之间的差别：MB/S=Mbits/S除以8）。它指磁头至硬盘缓存间的最大数据传输率，一般取决于硬盘的盘片转速和盘片数据线密度（指同一磁道上的数据间隔度）。<font color="#ff0000">内部传输率可以明确表现出硬盘的读写速度，它的高低才是评价一个硬盘整体性能的决定性因素，它是衡量硬盘性能的真正标准。</font> </li>
<li><strong>接口访问速度（Gb/秒）</strong>：该指标也称为<strong>突发数据传输率（Burst data transfer rate）</strong>或<strong>外部数据传输率(External Transfer Rate</strong>)，它是指从硬盘缓冲区读取数据的速率，也就是计算机通过<a href="http://baike.baidu.com/view/72220.htm">硬盘接口</a>从缓存中将数据读出交给相应的<a href="http://baike.baidu.com/view/122229.htm">控制器</a>的速率。在广告或硬盘特性表中常以数据接口速率代替，单位为MB/s。ATA100中的100就代表着这块硬盘的外部数据传输率理论最大值是100MB/s；ATA133则代表外部数据传输率理论最大值是133MB /s；SATA1.0接口的硬盘外部理论数据最大传输率可达150MB/s，而SATAII接口的硬盘外部理论数据最大传输率可达300MB/s。这些只是硬盘理论上最大的外部数据传输率，在实际的日常工作中是无法达到这个数值的，而是更多的取决于内部数据传输率。 </li>
<li><strong>寻道时间，平均读/写时间（毫秒）</strong>：平均寻道时间的英文拼写是Average Seek Time，它是了解硬盘性能至关重要的参数之一。它是指硬盘在接收到系统指令后，磁头从开始移动到移动至数据所在的磁道所花费时间的平均值，它一定程度上体现硬盘读取数据的能力，是影响硬盘<font color="#ff0000">内部数据传输率</font>的重要参数，单位为毫秒（ms）。不同品牌、不同型号的产品其平均寻道时间也不一样，但这个时间越低，则产品越好，现今主流的硬盘产品平均寻道时间都在在9ms左右。 </li>
<li><strong>平均延迟时间（毫秒）</strong>：它指的是磁头移动到指定磁道后，还需要多少时间指定的（即要读取或者写入的）扇区才会转到磁头下进行读取或者写入的相关操作，很明显这个时间和盘片的转速有关，平均延迟时间一般指盘片旋转一周所用时间的一半，单位为毫秒(ms)。这样我们就可以很轻松地换算出硬盘转速和平均潜伏期的一一对应关系。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 换算公式为：（60*1000）/ 硬盘转速 * 0.5=平均延迟时间&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 可以计算出来，5400转 5.556ms，7200转 4.167ms和10000转 3ms </li>
<li><strong>平均访问时间(Average Access Time)</strong>：这项指标在官方技术文档中一般不会出现，它指的是从相应的读或者写指令发出开始到指定的扇区转到磁头下等待进行读取或者写入（也有的称为从读/写指令发出到第一笔数据读/写所用的时间）为止的这段时间。一般情况下，<font color="#ff0000">平均访问时间约等于平均寻道时间和平均延迟时间之和</font>（严格定义中还包括一些指令处理时间，但一般忽略不计）。其单位也为毫秒(ms)，它的值我们可以利用Hdtach和Winbench 99v2.0测试出来。 </li>
<li><a href="http://baike.baidu.com/view/907.htm"><strong>缓存</strong></a><strong>（Cache memory）</strong>：缓存是硬盘与外部总线交换数据的场所<strong>，</strong>是硬盘控制器上的一块<a href="http://baike.baidu.com/view/1082.htm">内存</a>芯片，具有极快的存取速度。硬盘读数据的过程是将要读取的资料存入缓存，等缓存中填充满数据或者要读取的数据全部读完后再从缓存中以外部传输率传向硬盘外的数据总线。它是硬盘内部存储和外部接口之间的缓冲器。由于硬盘的内部数据传输率和接口访问速度不同，缓存在其中起到一个缓冲的作用。<font color="#ff0000">缓存的大小与速度是直接关系到硬盘的传输速度的重要因素，能够大幅度地提高硬盘整体性能</font>。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据，有大缓存，则可以将那些零碎数据暂存在缓存中，减小外系统的负荷，也提高了数据的传输速度。 </li>
<li><strong>单碟容量</strong>：<font color="#ff0000">除了对于容量增长的贡献之外，单碟容量的另一个重要意义在于提升硬盘的数据传输速度。</font>单碟容量的提高得益于磁道数的增加和磁道内线性磁密度的增加。磁道数的增加对于减少磁头的寻道时间大有好处，因为磁片的半径是固定的，磁道数的增加意味着磁道间距离的缩短，而磁头从一个磁道转移到另一个磁道所需的就位时间就会缩短。这将有助于随机数据传输速度的提高。而磁道内线性磁密度的增长则和硬盘的持续数据传输速度有着直接的联系，磁道内线性密度的增加使得每个磁道内可以存储更多的数据，从而在碟片的每个圆周运动中有更多的数据被从磁头读至硬盘的缓冲区里。 </li>
</ul>
<p>可靠性与数据完整性指标：</p>
<ul>
<li><strong>平均无故障时间（MTBF，小时）</strong>:平均无故障时间(Mean Time Between Failures，简称MTBF)是指硬盘平均能够正常运行多长时间，才发生一次故障。<font color="#ff0000">这是衡量硬盘可靠性的重要参数</font>，平均无故障<a href="http://baike.baidu.com/view/4019.htm">时间</a>越长，硬盘的可靠性就越高。目前主流产品的平均无故障时间(MTBF)达到了一百万小时以上。</li>
<li><strong>全天候不间断运行的可靠性级别 (AFR)</strong></li>
<li><strong>不可恢复读错误/被读数据（位）</strong></li>
<li><strong>每年运行小时数</strong></li>
<li><strong>字节数/扇区</strong></li>
</ul>
<p>参考：<a title="http://www.hudong.com/wiki/%E6%9C%80%E5%A4%A7%E5%86%85%E9%83%A8%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%8E%87" href="http://www.hudong.com/wiki/%E6%9C%80%E5%A4%A7%E5%86%85%E9%83%A8%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%8E%87">最大内部数据传输率</a>&#160;&#160; <a href="http://www.hudong.com/wiki/%E7%A1%AC%E7%9B%98%E8%BD%AC%E9%80%9F">硬盘转速</a>&#160;<a title="http://baike.baidu.com/view/4480.htm" href="http://baike.baidu.com/view/4480.htm">硬盘</a>&#160; <a title="http://www.ixpub.net/thread-553151-1-1.html" href="http://www.ixpub.net/thread-553151-1-1.html">服务器硬盘的选择</a></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F161&title=%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A1%AC%E7%9B%98%E7%9A%84%E6%80%A7%E8%83%BD%E4%B8%8E%E7%A8%B3%E5%AE%9A%E6%80%A7%E6%8C%87%E6%A0%87" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/161/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大型互联网架构资料整理</title>
		<link>http://www.agilejava.net/blog/archives/152</link>
		<comments>http://www.agilejava.net/blog/archives/152#comments</comments>
		<pubDate>Tue, 15 Mar 2011 16:19:49 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[大型网站架构]]></category>
		<category><![CDATA[架构设计]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/152</guid>
		<description><![CDATA[1 新浪微博架构与平台安全 2 人人网技术架构介绍 3 Facebook网站的前端性能优化]]></description>
			<content:encoded><![CDATA[<p><font size="4"><strong>1 新浪微博架构与平台安全</strong></font></p>
<p><object height="376" align="middle" width="450" id="reader" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param value="window" name="wmode"><param value="true" name="allowfullscreen"><param name="allowscriptaccess" value="always"><param value="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=2d6bfdff910ef12d2af9e7ee&amp;title=新浪微博架构与平台安全演讲稿&amp;doctype=ppt&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" name="movie"><embed height="376" align="middle" width="450" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="reader" src="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=2d6bfdff910ef12d2af9e7ee&amp;title=新浪微博架构与平台安全演讲稿&amp;doctype=ppt&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" allowfullscreen="true" wmode="window" allowscriptaccess="always" bgcolor="#FFFFFF" ver="9.0.0"></embed></object></p>
<p><font size="4"><strong>2 人人网技术架构介绍</strong></font></p>
<p><object height="376" align="middle" width="450" id="reader" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param value="window" name="wmode"><param value="true" name="allowfullscreen"><param name="allowscriptaccess" value="always"><param value="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=07a4c90f76c66137ee061952&amp;title=人人网技术架构的演进&amp;doctype=ppt&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" name="movie"><embed height="376" align="middle" width="450" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="reader" src="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=07a4c90f76c66137ee061952&amp;title=人人网技术架构的演进&amp;doctype=ppt&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" allowfullscreen="true" wmode="window" allowscriptaccess="always" bgcolor="#FFFFFF" ver="9.0.0"></embed></object></p>
<h3>3 Facebook网站的前端性能优化</h3>
<p><object height="500" align="middle" width="450" id="reader" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param value="window" name="wmode"><param value="true" name="allowfullscreen"><param name="allowscriptaccess" value="always"><param value="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=ed314128bd64783e09122b91&amp;title=9 Facebook网站的前端性能优化 蒋长浩&amp;doctype=pdf&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" name="movie"><embed height="500" align="middle" width="450" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="reader" src="http://wenku.baidu.com/static/flash/apireader.swf?docurl=http://wenku.baidu.com/play&amp;docid=ed314128bd64783e09122b91&amp;title=9 Facebook网站的前端性能优化 蒋长浩&amp;doctype=pdf&amp;fpn=5&amp;npn=5&amp;readertype=external&amp;catal=0" allowfullscreen="true" wmode="window" allowscriptaccess="always" bgcolor="#FFFFFF" ver="9.0.0"></embed></object></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F152&title=%E5%A4%A7%E5%9E%8B%E4%BA%92%E8%81%94%E7%BD%91%E6%9E%B6%E6%9E%84%E8%B5%84%E6%96%99%E6%95%B4%E7%90%86" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/152/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE浏览器对HTTP状态码的特殊处理</title>
		<link>http://www.agilejava.net/blog/archives/151</link>
		<comments>http://www.agilejava.net/blog/archives/151#comments</comments>
		<pubDate>Tue, 15 Mar 2011 15:55:40 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[WEB开发]]></category>
		<category><![CDATA[HTTP协议]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/151</guid>
		<description><![CDATA[今天打算复习一下http协议，写的第一个程序就遇到了麻烦，程序很简单就是展示错误页面，在firefox测试是好的，但是IE中有个小问题，把QQ的错误页面与我的错误页面比较了一下，发现原来不是程序的问题，而是IE浏览器对404、500等状态码有特殊的处理： 如果你的错误页面过于简单，比如你的404页面上只有一句话“404”，那么IE将显示默认的友好错误信息，如下图： 问题原因： Internet Explorer 5和更高版本为以下友好错误信息提供了HTML模板替换项：400.403.404.405.406.408.409.410.500.501和505。每个错误都有一个名称值对（例如“404”，512）。第一个值为错误代码。第二个值是表示字节大小的值，Internet Explorer 5或更高版本使用该值来检测何时用自己的信息替换错误信息。因此，当Internet Explorer 5版的Wininet.dll文件得到HTTP错误信息时，Wininet.dll文件将确定HTML错误中附带的HTTP内容是否为正确设计的Web 页。这是在页面大小的基础上进行的。它在注册表中对每个错误的阈值进行评估。如果Web页太小，该Web页将被拒绝，并显示友好HTTP状态Web页。 在Internet Explorer 4中，当Wininet.dll无法解决请求时，它显示一个嵌入式HTML错误信息和一个非描述性定义，例如：“Navigation Canceled”（导航已取消）或“Unable to retrieve Webpage in Offline mode”（在脱机模式下无法检索网页）。这些错误信息是Shdocvw.dll文件的资源（res:）。资源是指程序出于显示目的所使用的HTML代码，它嵌入在动态链接库（DLL）文件中。在Internet Explorer 5或更高版本中，这些错误信息是作为Shdoclc.dll文件的资源存储的。当收到错误信息时，它被相应的HTML模板取代，此模板可能包含以下任意类型的信息： 　　•有关此问题的信息。 　　•有关如何更正或解决此问题的信息。 　　•指向前一页的链接。 　　•指向Internet Explorer支持页的链接。 　　•指向同一页的链接，以便您能尝试重新连接到该页。 　　•指向缓存中的页面副本的链接（如果创建了应用程序编程接口API）。 　　友好HTTP状态错误信息存储在以下注册表项中：HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\ErrorThresholds。 解决此问题的办法有： 1 将页面的内容做的丰富一些，内容多一些（加一些table或者div之类的）！ JAVA代码&#60;table width="563" border="0" align="center" cellpadding="0" cellspacing="0"&#62; &#60;tr&#62; &#60;td height="125"&#62;&#38;nbsp;&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td height="195" background="/1.gif" bgcolor="#FFFFFF"&#62;&#60;table border="0" align="center" cellpadding="0" cellspacing="0"&#62; &#60;tr&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>今天打算复习一下http协议，写的第一个程序就遇到了麻烦，程序很简单就是展示错误页面，在firefox测试是好的，但是IE中有个小问题，把QQ的错误页面与我的错误页面比较了一下，发现原来不是程序的问题，而是IE浏览器对404、500等状态码有特殊的处理：</p>
<p>如果你的错误页面过于简单，比如你的404页面上只有一句话“404”，那么IE将显示默认的友好错误信息，如下图：<a href="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image_thumb.png" width="572" height="286"></a></p>
<h3>问题原因：</h3>
<p>Internet Explorer 5和更高版本为以下友好错误信息提供了HTML模板替换项：400.403.404.405.406.408.409.410.500.501和505。每个错误都有一个名称值对（例如“404”，512）。第一个值为错误代码。第二个值是表示字节大小的值，Internet Explorer 5或更高版本使用该值来检测何时用自己的信息替换错误信息。因此，当Internet Explorer 5版的Wininet.dll文件得到HTTP错误信息时，Wininet.dll文件将确定HTML错误中附带的HTTP内容是否为正确设计的Web 页。这是在页面大小的基础上进行的。它在注册表中对每个错误的阈值进行评估。<font color="#ff0000"><strong>如果Web页太小，该Web页将被拒绝，并显示友好HTTP状态Web页</strong></font>。</p>
<p>在Internet Explorer 4中，当Wininet.dll无法解决请求时，它显示一个嵌入式HTML错误信息和一个非描述性定义，例如：“Navigation Canceled”（导航已取消）或“Unable to retrieve Webpage in Offline mode”（在脱机模式下无法检索网页）。这些错误信息是Shdocvw.dll文件的资源（res:）。资源是指程序出于显示目的所使用的HTML代码，它嵌入在动态链接库（DLL）文件中。在Internet Explorer 5或更高版本中，这些错误信息是作为Shdoclc.dll文件的资源存储的。当收到错误信息时，它被相应的HTML模板取代，此模板可能包含以下任意类型的信息：
<p>　　•有关此问题的信息。 <br />　　•有关如何更正或解决此问题的信息。 <br />　　•指向前一页的链接。 <br />　　•指向Internet Explorer支持页的链接。 <br />　　•指向同一页的链接，以便您能尝试重新连接到该页。 <br />　　•指向缓存中的页面副本的链接（如果创建了应用程序编程接口API）。
<p>　　友好HTTP状态错误信息存储在以下注册表项中：HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\ErrorThresholds。
<p><a href="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2011/03/image_thumb1.png" width="572" height="334"></a></p>
<h3>解决此问题的办法有：</h3>
<p>1 将页面的内容做的丰富一些，内容多一些（加一些table或者div之类的）！</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_987835" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_987835').style.display='none'; document.getElementById('Code_Open_Image_987835').style.display='inline'; document.getElementById('Code_Open_Text_987835').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"><img style="display: none" id="Code_Open_Image_987835" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_987835').style.display='none'; getElementById('Code_Closed_Image_987835').style.display='inline'; getElementById('Code_Closed_Text_987835').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"><span id="Code_Closed_Text_987835" class="cnblogs_code_Collapse">JAVA代码</span><span style="display: none" id="Code_Open_Text_987835">&lt;table width="<span style="color: #8b0000">563</span>" border="<span style="color: #8b0000">0</span>" align="<span style="color: #8b0000">center</span>" cellpadding="<span style="color: #8b0000">0</span>" cellspacing="<span style="color: #8b0000">0</span>"&gt;
  &lt;tr&gt;
    &lt;td height="<span style="color: #8b0000">125</span>"&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td height="<span style="color: #8b0000">195</span>" background="<span style="color: #8b0000">/1.gif</span>" bgcolor="<span style="color: #8b0000">#FFFFFF</span>"&gt;&lt;table border="<span style="color: #8b0000">0</span>" align="<span style="color: #8b0000">center</span>" cellpadding="<span style="color: #8b0000">0</span>" cellspacing="<span style="color: #8b0000">0</span>"&gt;
        &lt;tr&gt;
          &lt;td width="<span style="color: #8b0000">210</span>"&gt;&lt;a href="<span style="color: #8b0000">#</span>"&gt;&lt;img src="<span style="color: #8b0000">/404-2.gif</span>" alt="<span style="color: #8b0000"></span>" width="<span style="color: #8b0000">210</span>" height="<span style="color: #8b0000">80</span>" border="<span style="color: #8b0000">0</span>" /&gt;&lt;/a&gt;&lt;/td&gt;
          &lt;td style="<span style="color: #8b0000">color:#333333; font-size:14px; font-weight:bold;</span>"&gt;页面没有找到，5秒钟之后将带您进入首页！&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>
</div>
<p>2 在404页面中设置状态码为200，response.setStatus(200);</p>
<p>3&nbsp; 设置IE的选项&nbsp;&nbsp; 工具&#8211;&gt;Internet选项&#8211;&gt;高级&#8212;&gt;显示友好http错误信息(取消选择) 。</p>
<p>ps：在firefox下如果用了google的工具条也会有一样的问题，当然解决办法也是一样的！</span></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F151&title=IE%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9HTTP%E7%8A%B6%E6%80%81%E7%A0%81%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>分享微软的云计算视频</title>
		<link>http://www.agilejava.net/blog/archives/140</link>
		<comments>http://www.agilejava.net/blog/archives/140#comments</comments>
		<pubDate>Sat, 12 Mar 2011 02:19:00 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[云计算]]></category>
		<category><![CDATA[未来生活]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/140</guid>
		<description><![CDATA[微软最新技术演示&#8211;云计算与自然用户界面 &#160; 未来&#34;云&#8211;端&#34;精彩生活畅想 微软愿景：未来健康]]></description>
			<content:encoded><![CDATA[<p><font size="4"><strong>微软最新技术演示&#8211;云计算与自然用户界面</strong></font><embed src="http://player.youku.com/player.php/sid/XMTUxNjYxNDI4/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<p>&#160;</p>
<h3>未来&quot;云&#8211;端&quot;精彩生活畅想</h3>
<p><embed src="http://player.youku.com/player.php/sid/XMTA1MDA1NjI4/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<h3>微软愿景：未来健康</h3>
<p><embed src="http://player.youku.com/player.php/sid/XMTUzNzQ2OTMy/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F140&title=%E5%88%86%E4%BA%AB%E5%BE%AE%E8%BD%AF%E7%9A%84%E4%BA%91%E8%AE%A1%E7%AE%97%E8%A7%86%E9%A2%91" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OAuth与OpenID介绍</title>
		<link>http://www.agilejava.net/blog/archives/119</link>
		<comments>http://www.agilejava.net/blog/archives/119#comments</comments>
		<pubDate>Mon, 28 Feb 2011 14:45:00 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[开放平台]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenID]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/119</guid>
		<description><![CDATA[OAuth与OpenID View more presentations from aspire]]></description>
			<content:encoded><![CDATA[<div style="width: 425px" id="__ss_7191355"><strong style="margin: 12px 0px 4px; display: block"><a title="OAuth与OpenID" href="http://www.slideshare.net/gongjt/oauthopenid">OAuth与OpenID</a></strong> <object id="__sse7191355" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oauthopenid-110308084100-phpapp01&amp;stripped_title=oauthopenid&amp;userName=gongjt" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse7191355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oauthopenid-110308084100-phpapp01&amp;stripped_title=oauthopenid&amp;userName=gongjt" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/gongjt">aspire</a> </div>
</p></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F119&title=OAuth%E4%B8%8EOpenID%E4%BB%8B%E7%BB%8D" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/119/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SLF4J的静态日志系统绑定机制</title>
		<link>http://www.agilejava.net/blog/archives/83</link>
		<comments>http://www.agilejava.net/blog/archives/83#comments</comments>
		<pubDate>Wed, 02 Feb 2011 09:18:39 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[LOG]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/83</guid>
		<description><![CDATA[SLF4J是一个用于日志系统的简单Facade，允许最终用户在部署其应用时使用其所希望的日志系统。 SLF4J库类似于Apache Commons-Logging，但Apache Commons-Logging采用的是动态绑定机制，使用ClassLoader寻找和载入底层的日志库，而在OSGI中，不同的插件使用自己的ClassLoader，OSGI的这种机制保证了插件互相独立，然而却使得Apache Commons-Logging无法在OSGI的环境下工作了。SLF4J却没有这个问题，它是如何做到的呢？ 一个简单的例子： package chapters.introduction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld1 { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(&#34;chapters.introduction.HelloWorld1&#34;); logger.debug(&#34;Hello world.&#34;); } } SLF4J与日志系统的绑定过程是在getLogger方法中完成的！下面介绍整个绑定过程。 &#160; 通过上图大家可以发现整个静态绑定机制的核心是通过查找类路径下面的org/slf4j/impl/StaticLoggerBinder.class，所以类路径下只能有一个这个类。看到这里大家可能会问了，这个类的包名是org.slf4j.impl，找这个类如何与其他的日志系统连接呢？呵呵，这个很简单，其实slf4j的发布包中包含了为多种日志系统写好的绑定代理，每个日志系统都写好了一个独立的StaticLoggerBinder，由这个类调用相关日志系统的对象！ 下图是slf4j发布包中的为各个日志系统写好的绑定代理。 为什么没有logback的绑定代理？呵呵，因为logback中已经内置了slf4j的绑定代理。]]></description>
			<content:encoded><![CDATA[<p>SLF4J是一个用于日志系统的简单Facade，允许最终用户在部署其应用时使用其所希望的日志系统。</p>
<p>SLF4J库类似于Apache Commons-Logging，但Apache Commons-Logging采用的是动态绑定机制，使用ClassLoader寻找和载入底层的日志库，而在OSGI中，不同的插件使用自己的ClassLoader，OSGI的这种机制保证了插件互相独立，然而却使得Apache Commons-Logging无法在OSGI的环境下工作了。SLF4J却没有这个问题，它是如何做到的呢？</p>
<p>一个简单的例子：</p>
<pre><span style="color: #0000ff">package</span> chapters.introduction;

<span style="color: #0000ff">import</span> org.slf4j.Logger;
<span style="color: #0000ff">import</span> org.slf4j.LoggerFactory;

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> HelloWorld1 {

  <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {

    Logger logger = LoggerFactory.getLogger(&quot;<span style="color: #8b0000">chapters.introduction.HelloWorld1</span>&quot;);
    logger.debug(&quot;<span style="color: #8b0000">Hello world.</span>&quot;);
  }
}</pre>
<p>SLF4J与日志系统的绑定过程是在getLogger方法中完成的！下面介绍整个绑定过程。<a href="http://www.agilejava.net/blog/wp-content/uploads/2011/02/Business-Process-Model2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Business Process Model" border="0" alt="Business Process Model" src="http://www.agilejava.net/blog/wp-content/uploads/2011/02/Business-Process-Model_thumb1.png" width="572" height="786" /></a> </p>
<p>&#160;</p>
<p>通过上图大家可以发现整个静态绑定机制的核心是通过查找类路径下面的org/slf4j/impl/StaticLoggerBinder.class，所以类路径下只能有一个这个类。看到这里大家可能会问了，这个类的包名是org.slf4j.impl，找这个类如何与其他的日志系统连接呢？呵呵，这个很简单，其实slf4j的发布包中包含了为多种日志系统写好的绑定代理，每个日志系统都写好了一个独立的StaticLoggerBinder，由这个类调用相关日志系统的对象！</p>
<p>下图是slf4j发布包中的为各个日志系统写好的绑定代理。</p>
<p><a href="http://www.agilejava.net/blog/wp-content/uploads/2011/02/image2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2011/02/image_thumb2.png" width="237" height="156" /></a></p>
<p>为什么没有logback的绑定代理？呵呵，因为logback中已经内置了slf4j的绑定代理。</p>
<p><a href="http://www.agilejava.net/blog/wp-content/uploads/2011/02/image3.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2011/02/image_thumb3.png" width="286" height="182" /></a></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F83&title=SLF4J%E7%9A%84%E9%9D%99%E6%80%81%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F%E7%BB%91%E5%AE%9A%E6%9C%BA%E5%88%B6" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCA架构知识点ppt</title>
		<link>http://www.agilejava.net/blog/archives/117</link>
		<comments>http://www.agilejava.net/blog/archives/117#comments</comments>
		<pubDate>Fri, 31 Dec 2010 14:02:00 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[SCA]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/archives/117</guid>
		<description><![CDATA[Sca架构 View more presentations from aspire]]></description>
			<content:encoded><![CDATA[<div style="width: 425px" id="__ss_7190917"><strong style="margin: 12px 0px 4px; display: block"><a title="Sca架构" href="http://www.slideshare.net/gongjt/sca-7190917">Sca架构</a></strong> <object id="__sse7190917" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sca-110308075527-phpapp01&amp;stripped_title=sca-7190917&amp;userName=gongjt" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse7190917" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sca-110308075527-phpapp01&amp;stripped_title=sca-7190917&amp;userName=gongjt" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/gongjt">aspire</a> </div>
</p></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F117&title=SCA%E6%9E%B6%E6%9E%84%E7%9F%A5%E8%AF%86%E7%82%B9ppt" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xen KVM VMWare的简单对比</title>
		<link>http://www.agilejava.net/blog/archives/57</link>
		<comments>http://www.agilejava.net/blog/archives/57#comments</comments>
		<pubDate>Fri, 24 Dec 2010 08:03:00 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[虚拟化]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[VmWare]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/?p=57</guid>
		<description><![CDATA[&#160;]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/12/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.agilejava.net/blog/wp-content/uploads/2010/12/image_thumb.png" width="572" height="614" /></a></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F57&title=Xen+KVM+VMWare%E7%9A%84%E7%AE%80%E5%8D%95%E5%AF%B9%E6%AF%94" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/57/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在CentOS上安装和配置KVM</title>
		<link>http://www.agilejava.net/blog/archives/54</link>
		<comments>http://www.agilejava.net/blog/archives/54#comments</comments>
		<pubDate>Fri, 12 Nov 2010 03:01:48 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[虚拟化]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/?p=54</guid>
		<description><![CDATA[1 检查CPU [root@liunx389 img]# egrep &#8216;vmx&#124;svm&#8217; /proc/cpuinfoflags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lmflags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat [...]]]></description>
			<content:encoded><![CDATA[<h4 id=WizHtmlContentId>1 检查CPU</h4>
<p>[root@liunx389 img]# egrep &#8216;vmx|svm&#8217; /proc/cpuinfo<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<span id="more-54"></span><br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm<br />flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm</p>
<p>假如一个vmx标志出现的话，就表示您拥有Intel 处理器的虚拟化支持。</p>
<p>假如一个svm标志出现的话，就表示您拥有AMD 处理器的虚拟化支持。</p>
<p><font color=#0000ff>如果内容为空表明cpu不支持虚拟化。</font></p>
<p><font color=#0000ff>除了检查中央处理器旗标以外，您也应该要使您系统 BIOS 中的完整虚拟化生效。</font></p>
<h4>2 安装 KVM</h4>
<p><font color=#0000ff>
<p><font color=#000000 size=3>安装 KVM 所需要的软件包：</font></p>
<p class=code><font color=#000000 size=3># yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager \libvirt libvirt-python python-virtinst</font></p>
<p><font color=#000000 size=3>或者</font></p>
<p class=code><font color=#000000 size=3># yum groupinstall KVM</font></p>
<p><font color=#000000 size=3>安装完后重启系统，然后确认一下是否安装成功：</font></p>
<p class=code><font color=#000000><font size=3># reboot</font></font></p>
<p class=code><font color=#000000><font size=3># lsmod | grep kvm</font></font></p>
<p class=code><font color=#000000><font size=3>kvm_amd                69416  0</font></font></p>
<p class=code><font color=#000000><font size=3>kvm                   226208  1 kvm_amd</font></font></p>
<p class=code><font color=#000000><font size=3># ls -l /dev/kvm</font></font></p>
<p class=code><font color=#000000><font size=3>crw-rw&#8212;- 1 root kvm 10, 232 Jun 25 15:56 /dev/kvm</font></font></p>
<p></font>
<p><font color=#0000ff></font>&nbsp;</p>
<h4>3&nbsp;创建镜像</h4>
<p>有了启用了虚拟化支持的引导内核，接下来的一个步骤是为客户操作系统创建一个磁盘映像。</p>
<p>您可以使用 <code>qeumu-img</code> 来完成此操作，如下所示。注意这个映像的大小是 5GB，但是使用 QEMU 的写时复制格式（copy-on-write，qcow）时，整个文件将根据需要增长，而不是完全占据这&nbsp;5 GB 的空间。</p>
<p><font color=#0000ff>
<pre>qemu-img create -f qcow2 centos.img 5G </pre>
<pre><font color=#000000>如果需要创建固定大小的磁盘镜像文件可以使用如下命令：</font></pre>
<pre>
<pre>qemu-img create -f raw centos.img 5G </pre>
</pre>
<pre><span style="FONT-FAMILY: 微软雅黑"><span style="COLOR: rgb(54,96,146)"><font color=#0000ff>dd if=/dev/zero of=centos.img bs=1024k count=5000</font></span></span></pre>
<p></font>
<p><font color=#0000ff>ext4下可以使用：fallocate -l 5G centos.img</font></p>
<h4>4&nbsp;安装GuestOS</h4>
<div>virt-install -n centos -r 1000&nbsp; &#8211;vcpu=1&nbsp; &#8211;file=/opt/gongjt/img/centos.img&nbsp;&nbsp; -p&nbsp;&nbsp; -l <a href="http://10.1.5.11:8080/os/centos/">http://10.1.5.11:8080/os/centos/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;nographics</div>
<div>&#8211;nographics&nbsp;&nbsp;&nbsp;&nbsp;非图形化方式即字符界面的方式&nbsp;&nbsp;&nbsp; </div>
<div>&#8211;vnc&nbsp; 使用vnc远程安装</div>
<div>-p 半虚拟化</div>
<div>-v 全虚拟化</div>
<p>&nbsp;</p>
<h4><!--WizHtmlContent--></h4>
<p />
<div><a title="Wiz，个人知识管理，PKM。" href="http://wiz.cn">通过Wiz发布</a></div>
<p />
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F54&title=%E5%9C%A8CentOS%E4%B8%8A%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AEKVM" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/54/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>分布式存储技术及应用</title>
		<link>http://www.agilejava.net/blog/archives/28</link>
		<comments>http://www.agilejava.net/blog/archives/28#comments</comments>
		<pubDate>Fri, 22 Oct 2010 10:36:15 +0000</pubDate>
		<dc:creator>agilejava</dc:creator>
				<category><![CDATA[分布式存储]]></category>
		<category><![CDATA[分布式]]></category>

		<guid isPermaLink="false">http://www.agilejava.net/blog/?p=28</guid>
		<description><![CDATA[根据did you know(http://didyouknow.org/)的数据，目前互联网上可访问的信息数量接近1秭= 1百万亿亿 (1024)。毫无疑问，各个大型网站也都存储着海量的数据，这些海量的数据如何有效存储，是每个大型网站的架构师必须要解决的问题。分布式存储技术就是为了解决这个问题而发展起来的技术，下面让将会详细介绍这个技术及应用。 分布式存储概念 与目前常见的集中式存储技术不同，分布式存储技术并不是将数据存储在某个或多个特定的节点上，而是通过网络使用企业中的每台机器上的磁盘空间，并将这些分散的存储资源构成一个虚拟的存储设备，数据分散的存储在企业的各个角落。 具体技术及应用： 海量的数据按照结构化程度来分，可以大致分为结构化数据，非结构化数据，半结构化数据。 本文接下来将会分别介绍这三种数据如何分布式存储。 结构化数据的存储及应用 所谓结构化数据是一种用户定义的数据类型，它包含了一系列的属性，每一个属性都有一个数据类型，存储在关系数据库里,可以用二维表结构来表达实现的数据。 大多数系统都有大量的结构化数据，一般存储在Oracle或MySQL的等的关系型数据库中，当系统规模大到单一节点的数据库无法支撑时，一般有两种方法：垂直扩展与水平扩展。 · 垂直扩展：垂直扩展比较好理解，简单来说就是按照功能切分数据库，将不同功能的数据，存储在不同的数据库中，这样一个大数据库就被切分成多个小数据库，从而达到了数据库的扩展。一个架构设计良好的应用系统，其总体功能一般肯定是由很多个松耦合的功能模块所组成的，而每一个功能模块所需要的数据对应到数据库中就是一张或多张表。各个功能模块之间交互越少，越统一，系统的耦合度越低，这样的系统就越容易实现垂直切分。 · 水平扩展：简单来说，可以将数据的水平切分理解为按照数据行来切分，就是将表中的某些行切分到一个数据库中，而另外的某些行又切分到其他的数据库中。为了能够比较容易地判断各行数据切分到了哪个数据库中，切分总是需要按照某种特定的规则来进行的，如按照某个数字字段的范围，某个时间类型字段的范围，或者某个字段的hash值。 垂直扩展与水平扩展各有优缺点，一般一个大型系统会将水平与垂直扩展结合使用。 实际应用：图1是为核高基项目设计的结构化数据分布式存储的架构图。 图1可水平&#38;垂直切分扩展的数据访问框架 · 采用了独立的分布式数据访问层，后端分布式数据库集群对前端应用透明。 · 集成了Memcached集群，减少对后端数据库的访问，提高数据的查询效率。 · 同时支持垂直及水平两种扩展方式。 · 基于全局唯一性主键范围的切分方式，减轻了后续维护的工作量。 · 全局唯一性主键的生成采用DRBD+Heartbeat技术保证了可靠性。 · 利用MySQL Replication技术实现高可用的架构。 注:以上的数据切分方案并不是唯一扩展MySql的方法，有兴趣的读者可以关注一下” 云计算时代的MySQL-Clustrix Sierra分布式数据库系统”。 非结构化数据的存储及应用 相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。 分布式文件系统是实现非结构化数据存储的主要技术，说到分布式文件系统就不得不提GFS（全称为&#8220;Google File System&#8221;），GFS的系统架构图如下图所示。 图2 Google-file-system架构图 图3 Google-file-system架构图（详细） GFS将整个系统分为三类角色：Client（客户端）、Master（主服务器）、Chunk Server（数据块服务器）。 · Client（客户端）：是GFS提供给应用程序的访问接口，它是一组专用接口，不遵守POSIX规范，以库文件的形式提供。应用程序直接调用这些库函数，并与该库链接在一起。 · Master（主服务器）：是GFS的管理节点，主要存储与数据文件相关的元数据，而不是Chunk（数据块）。元数据包括：命名空间（Name Space），也就是整个文件系统的目录结构，一个能将64位标签映射到数据块的位置及其组成文件的表格，Chunk副本位置信息和哪个进程正在读写特定的数据块等。还有Master节点会周期性地接收从每个Chunk节点来的更新（&#8220;Heart- beat&#8221;）来让元数据保持最新状态。 · Chunk [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">根据<span lang="EN-US">did you know(</span></span></span><span style="font-size: 10.5pt;"><span lang="EN-US"><a href="http://didyouknow.org/"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="color: #0000ff;">http://didyouknow.org/</span></span></a></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US">)</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">的数据，目前互联网上可访问的信息数量接近<span style="mso-bidi-font-weight: bold;" lang="EN-US">1</span><span style="mso-bidi-font-weight: bold;">秭<span lang="EN-US">= 1</span>百万亿亿<span lang="EN-US"><span style="mso-spacerun: yes;"> </span>(10</span></span><sup><span lang="EN-US">24</span></sup><span style="mso-bidi-font-weight: bold;" lang="EN-US">)</span></span><span style="mso-bidi-font-weight: bold;"><span style="font-size: 10.5pt;">。毫无疑问，各个大型网站也都存储着海量的数据，这些海量的数据如何有效存储，是每个大型网站的架构师必须要解决的问题。分布式存储技术就是为了解决这个问题而发展起来的技术，下面让将会详细介绍这个技术及应用。</span></span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 16pt;">分布式存储概念</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">与目前常见的集中式存储技术不同，分布式存储技术并不是将数据存储在某个或多个特定的节点上，而是通过网络使用企业中的每台机器上的磁盘空间，并将这些分散的存储资源构成一个虚拟的存储设备，数据分散的存储在企业的各个角落。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 16pt;">具体技术及应用：</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">海量的数据按照结构化程度来分，可以大致分为结构化数据，非结构化数据，半结构化数据。 </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">本文接下来将会分别介绍这三种数据如何分布式存储。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 14pt;">结构化数据的存储及应用</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">所谓结构化数据是一种用户定义的数据类型，它包含了一系列的属性，每一个属性都有一个数据类型，存储在关系数据库里<span lang="EN-US">,</span>可以用二维表结构来表达实现的数据。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">大多数系统都有大量的结构化数据，一般存储在<span lang="EN-US">Oracle</span>或<span lang="EN-US">MySQL</span>的等的关系型数据库中，当系统规模大到单一节点的数据库无法支撑时，一般有两种方法：垂直扩展与水平扩展。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">垂直扩展</span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">：垂直扩展比较好理解，简单来说就是按照功能切分数据库，将不同功能的数据，存储在不同的数据库中，这样一个大数据库就被切分成多个小数据库，从而达到了数据库的扩展。一个架构设计良好的应用系统，其总体功能一般肯定是由很多个松耦合的功能模块所组成的，而每一个功能模块所需要的数据对应到数据库中就是一张或多张表。各个功能模块之间交互越少，越统一，系统的耦合度越低，这样的系统就越容易实现垂直切分。</span></span><span lang="EN-US"> <br style="mso-special-character: line-break;" /> <br style="mso-special-character: line-break;" /></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"><span style="font-size: 10.5pt;"> </span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">水平扩展：简单来说，可以将数据的水平切分理解为按照数据行来切分，就是将表中的某些行切分到一个数据库中，而另外的某些行又切分到其他的数据库中。为了能够比较容易地判断各行数据切分到了哪个数据库中，切分总是需要按照某种特定的规则来进行的，如按照某个数字字段的范围，某个时间类型字段的范围，或者某个字段的<span lang="EN-US">hash</span>值。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">垂直扩展与水平扩展各有优缺点，一般一个大型系统会将水平与垂直扩展结合使用。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">实际应用：</span></span></strong><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">图<span lang="EN-US">1</span>是为核高基项目设计的结构化数据分布式存储的架构图。</span><strong style="mso-bidi-font-weight: normal;"> </strong></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image002.jpg"><img style="background-image: none; border: 0px none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="clip_image002" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image002_thumb.jpg" border="0" alt="clip_image002" width="667" height="401" /></a></span></strong><strong style="mso-bidi-font-weight: normal;"> </strong></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">1</span>可水平<span lang="EN-US">&amp;</span>垂直切分扩展的数据访问框架</span></span></span></strong></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">采用了独立的分布式数据访问层，后端分布式数据库集群对前端应用透明。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">集成了<span lang="EN-US">Memcached</span>集群，减少对后端数据库的访问，提高数据的查询效率。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">同时支持垂直及水平两种扩展方式。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">基于全局唯一性主键范围的切分方式，减轻了后续维护的工作量。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">全局唯一性主键的生成采用<span lang="EN-US">DRBD+Heartbeat</span>技术保证了可靠性。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">利用<span lang="EN-US">MySQL Replication</span>技术实现高可用的架构。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">注<span lang="EN-US">:</span></span></span></strong><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;">以上的数据切分方案并不是唯一扩展<span lang="EN-US">MySql</span>的方法，有兴趣的读者可以关注一下<span lang="EN-US">”</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"> </span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;">云计算时代的<span lang="EN-US">MySQL-Clustrix Sierra</span>分布式数据库系统</span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;" lang="EN-US">”</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-size: 10.5pt;">。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-size: 10.5pt;"> </span></span></span> <span id="more-28"></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 14pt;">非结构化数据的存储及应用</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">相对于结构化数据而言<span lang="EN-US">,</span>不方便用数据库二维逻辑表来表现的数据即称为非结构化数据<span lang="EN-US">,</span>包括所有格式的办公文档、文本、图片、<span lang="EN-US">XML</span>、<span lang="EN-US">HTML</span>、各类报表、图像和音频<span lang="EN-US">/</span>视频信息等等。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">分布式文件系统是实现非结构化数据存储的主要技术，说到分布式文件系统就不得不提<span lang="EN-US">GFS</span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial;"><span style="font-size: 10.5pt;">（全称为<span lang="EN-US">&#8220;Google File System&#8221;</span>），<span lang="EN-US">GFS</span>的系统架构图如下图所示。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image003.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image003" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image003_thumb.jpg" border="0" alt="clip_image003" width="528" height="395" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">2 Google-file-system</span>架构图</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image005.jpg"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image005" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image005_thumb.jpg" border="0" alt="clip_image005" width="554" height="226" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">3 Google-file-system</span>架构图（详细）</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">GFS</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">将整个系统分为三类角色：<span lang="EN-US">Client</span>（客户端）、<span lang="EN-US">Master</span>（主服务器）、<span lang="EN-US">Chunk Server</span>（数据块服务器）。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">Client</span></span><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;">（客户端）</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-size: 10.5pt;">：是<span lang="EN-US">GFS</span>提供给应用程序的访问接口，它是一组专用接口，不遵守<span lang="EN-US">POSIX</span>规范，以库文件的形式提供。应用程序直接调用这些库函数，并与该库链接在一起。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">Master</span></span><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;">（主服务器）</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-size: 10.5pt;">：是<span lang="EN-US">GFS</span>的管理节点，主要存储与数据文件相关的元数据，而不是<span lang="EN-US">Chunk</span>（数据块）。元数据包括：命名空间（<span lang="EN-US">Name Space</span>），也就是整个文件系统的目录结构，一个能将<span lang="EN-US">64</span>位标签映射到数据块的位置及其组成文件的表格，<span lang="EN-US">Chunk</span>副本位置信息和哪个进程正在读写特定的数据块等。还有<span lang="EN-US">Master</span>节点会周期性地接收从每个<span lang="EN-US">Chunk</span>节点来的更新（<span lang="EN-US">&#8220;Heart- beat&#8221;</span>）来让元数据保持最新状态。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: symbol; mso-font-kerning: 0pt;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">Chunk Server</span></span><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;">（数据块服务器）</span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;">：负责具体的存储工作，用来存储<span lang="EN-US">Chunk</span>。<span lang="EN-US">GFS</span>将文件按照固定大小进行分块，默认是<span lang="EN-US">64MB</span>，每一块称为一个<span lang="EN-US">Chunk</span>（数据块），每一个<span lang="EN-US">Chunk</span>以<span lang="EN-US">Block</span>为单位进行划分，大小为<span lang="EN-US">64KB</span>，每个<span lang="EN-US">Chunk</span>有一个唯一的<span lang="EN-US">64</span>位标签。<span lang="EN-US">GFS</span>采用副本的方式实现容错，每一个<span lang="EN-US">Chunk</span>有多个存储副本（默认为三个）。 </span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US">Chunk Server</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">的个数可有有多个，它的数目直接决定了<span lang="EN-US">GFS</span>的规模。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">GFS</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">之所以重要的原因在于，在<span lang="EN-US">Google</span>公布了<span lang="EN-US">GFS</span>论文之后，许多开源组织基于<span lang="EN-US">GFS</span>的论文开发了各自的分布式文件系统，其中比较知名的有<span lang="EN-US">HDFS</span>，<span lang="EN-US">MooseFS</span>，<span lang="EN-US">MogileFS</span>等。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">实际应用：</span></span></strong><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">由于核高基的项目中未来会有大量的数据与应用需要存储，所以我们设计时也采用分布式文件系统的方案，由于开源的分布式文件系统可以基本满足我们需求，另外从时间上来说也比较紧张，所以我们采用了开源的<span lang="EN-US">MooseFS</span>作为底层的分布式文件系统。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">MooseFS</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">存在的问题：由于<span lang="EN-US">MooseFS</span>是也是按照<span lang="EN-US">GFS</span>论文设计的，只有一个<span lang="EN-US">Master</span>（主服务器），虽然可以增加一个备份的日志服务器，但是还是存在<span lang="EN-US">Master</span>无法扩展的问题，当单一<span lang="EN-US">Master</span>节点上存储的元数据越来越多的时候，<span lang="EN-US">Master</span>节点占用的内存会越来越多，直到达到服务器的内存上限，所以单一<span lang="EN-US">Master</span>节点存在内存上的瓶颈，只能存储有限的数据，可扩展性差，并且不稳定。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">对<span lang="EN-US">MooseFS</span>的优化：面对<span lang="EN-US">MooseFS</span>存在的问题，我们采用了类似分布式数据库中的“<span lang="EN-US">Sharding</span>”技术，设计了一个分布式文件系统访问框架，可以做到对分布式文件系统做垂直与水平切分。这样就最大限度的保证了<span lang="EN-US">MooseFS</span>系统的可扩展性与稳定性。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">下图是为核高基项目设计的非结构化数据分布式存储的架构图。我们设计了两种访问方式，一种是类似<span lang="EN-US">GFS</span>的<span lang="EN-US">API</span>访问方式，以库文件的方式提供，应用程序通过调用<span lang="EN-US">API</span>直接访问分布式文件系统。第二种是通过<span lang="EN-US">RESTful web Service</span>访问。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image007.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image007" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image007_thumb.jpg" border="0" alt="clip_image007" width="554" height="338" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">4</span>可水平<span lang="EN-US">&amp;</span>垂直切分扩展的分布式文件系统访问框架（<span lang="EN-US">API</span>版）</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image009.jpg"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image009" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image009_thumb.jpg" border="0" alt="clip_image009" width="554" height="367" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">5</span>可水平<span lang="EN-US">&amp;</span>垂直切分扩展的分布式文件系统访问框架（<span lang="EN-US">RESTful web Service</span>版）</span></span></span></strong></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 14pt;">半结构化数据的存储及应用</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">就是介于完全结构化数据（如关系型数据库、面向对象数据库中的数据）和完全无结构的数据（如声音、图像文件等）之间的数据， 半结构化数据模型具有一定的结构性，但较之传统的关系和面向对象的模型更为灵活。半结构数据模型完全不基于传统数据库模式的严格概念，这些模型中的数据都是自描述的。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">由于半结构化数据没有严格的<span lang="EN-US">schema</span>定义，所以不适合用传统的关系型数据库进行存储，适合存储这类数据的数据库被称作“<span lang="EN-US">NoSQL</span>”数据库。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"> </span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">NoSQL</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">的定义：</span></span></strong></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">被称作下一代的数据库，具有非关系型，分布式，轻量级，支持水平扩展且一般不保证遵循</span></span></span><span style="font-size: 10.5pt;"><span lang="EN-US"><span style="font-family: calibri;">ACID</span></span><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;"><span style="font-family: 宋体;">原则的数据储存系统。“</span></span><span lang="EN-US"><span style="font-family: calibri;">NoSQL</span></span></span><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;">”其实是具有误导性的别名，称作</span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US">Non Relational Database(</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">非关系型数据库<span lang="EN-US">)</span>更为恰当。所谓<span lang="EN-US">“</span>非关系型数据库<span lang="EN-US">”</span>指的是：</span><strong style="mso-bidi-font-weight: normal;"> </strong></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">使用松耦合类型、可扩展的数据模式来对数据进行逻辑建模<span lang="EN-US">(Map</span>，列，文档，图表等<span lang="EN-US">)</span>，而不是使用固定的关系模式元组来构建数据模型。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">以遵循于</span></span><span style="font-size: 10.5pt;"><span lang="EN-US"><a href="http://www.cs.berkeley.edu/%7Ebrewer/cs262b-2004/PODC-keynote.pdf"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; text-underline: none;"><span style="text-decoration: none;">CAP</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; text-underline: none;" lang="EN-US"><span lang="EN-US"><span style="text-decoration: none;">定理</span></span></span></a></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">（能保证在一致性，可用性和分区容忍性三者中中达到任意两个）的跨多节点数据分布模型而设计，支持水平伸缩。这意味着对于多数据中心和动态供应（在生产集群中透明地加入<span lang="EN-US">/</span>删除节点）的必要支持，也即弹性<span lang="EN-US">(Elasticity)</span>。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">拥有在磁盘或内存中，或者在这两者中都有的，对数据持久化的能力，有时候还可以使用可热插拔的定制存储。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">支持多种的<span lang="EN-US">&#8216;Non-SQL&#8217;</span>接口<span lang="EN-US">(</span>通常多于一种<span lang="EN-US">)</span>来进行数据访问。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">图<span lang="EN-US">6</span>是<span lang="EN-US">Sourav Mazumder</span></span></span><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;">提出的</span></span></span><span style="font-size: 10.5pt;"><span lang="EN-US"><span style="font-family: calibri;">NoSQL</span></span></span><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">总体架构：</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image011.jpg"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image011" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image011_thumb.jpg" border="0" alt="clip_image011" width="554" height="374" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">6 NoSQL</span>总体架构</span></span></span></strong></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">接口：<span lang="EN-US">REST (HBase</span>，<span lang="EN-US">CouchDB</span>，<span lang="EN-US">Riak</span>等<span lang="EN-US">)</span>，<span lang="EN-US">MapReduce (HBase</span>，<span lang="EN-US">CouchDB</span>，<span lang="EN-US">MongoDB</span>，<span lang="EN-US">Hypertable</span>等<span lang="EN-US">)</span>，<span lang="EN-US">Get/Put (Voldemort</span>，<span lang="EN-US">Scalaris</span>等<span lang="EN-US">)</span>，<span lang="EN-US">Thrift (HBase</span>，<span lang="EN-US">Hypertable</span>，<span lang="EN-US">Cassandra</span>等<span lang="EN-US">)</span>，语言特定的<span lang="EN-US">API(MongoDB)</span>。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">逻辑数据模型：面向键值对的<span lang="EN-US">(Voldemort</span>，<span lang="EN-US">Dynomite </span>等<span lang="EN-US">)</span>，面向<span lang="EN-US">Column Family</span>的<span lang="EN-US">(BigTable</span>，<span lang="EN-US">HBase</span>，<span lang="EN-US">Hypertable </span>等<span lang="EN-US">)</span>，面向文档的<span lang="EN-US">(Couch DB</span>，<span lang="EN-US">MongoDB</span>等<span lang="EN-US">)</span>，面向图的<span lang="EN-US">(Neo4j</span>，<span lang="EN-US"> Infogrid</span>等</span><span lang="EN-US"><span style="font-size: 10.5pt;">)</span></span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">数据分布模型：致性和可用性<span lang="EN-US">(HBase</span>，<span lang="EN-US">Hypertable</span>，<span lang="EN-US"> MongoDB</span>等<span lang="EN-US">)</span>， 可用性和可分区性<span lang="EN-US">(Cassandra</span>等<span lang="EN-US">)</span>。一致性和可分区性的组合会导致一些非额定的节点产生可用性的损失。有趣的是目前还没有一个<span lang="EN-US">“</span>非关系型数据库<span lang="EN-US">”</span>支持这一组合。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">数据持久性：基于内存的<span lang="EN-US">(</span>如<span lang="EN-US">Redis</span>，<span lang="EN-US">Scalaris</span>，<span lang="EN-US"> Terrastore)</span>，基于磁盘的<span lang="EN-US">(</span>如<span lang="EN-US">MongoDB</span>，<span lang="EN-US">Riak</span>等<span lang="EN-US">)</span>，或内存及磁盘二者的结合<span lang="EN-US">(</span>如 <span lang="EN-US">HBase</span>，<span lang="EN-US">Hypertable</span>，<span lang="EN-US">Cassandra)</span>。存储的类型有助于我们辨别该解决方案适用于哪种类型。然而，在大多数情况下人们发现基于组合方 案的解决方案是最佳的选择。既能通过内存数据存储支持高性能，又能在写入足够多的数据后存储到磁盘来保证持续性。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">NoSQL</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">中的重要理论基础：</span></span></strong></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">CAP</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">理论：</span></span></strong></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"><span style="font-size: 10.5pt;"> </span></span><span style="font-size: 10.5pt;">C: Consistency </span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">一致性</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"><span style="font-size: 10.5pt;"> </span></span><span style="font-size: 10.5pt;">A: Availability </span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">可用性<span lang="EN-US">(</span>指的是快速获取数据</span><span lang="EN-US"><span style="font-size: 10.5pt;">)</span></span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="font-size: 10.5pt;">P: Tolerance of network Partition </span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">分区容忍性<span lang="EN-US">(</span>分布式</span><span lang="EN-US"><span style="font-size: 10.5pt;">)</span></span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image013.jpg"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image013" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image013_thumb.jpg" border="0" alt="clip_image013" width="554" height="415" /></a></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图<span lang="EN-US">7 CAP</span>理论</span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">CAP</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">原理告诉我们，这三个因素最多只能满足两个，不可能三者兼顾。对于分布式系统来说，分区容错是基本要求，所以必然要放弃一致性。对于大型网站来说，分区容错和可用性的要求更高，所以一般都会选择适当放弃一致性。对应<span lang="EN-US">CAP</span>理论，<span lang="EN-US">NoSQL</span>追求的是<span lang="EN-US">AP</span>，而传统数据库追求的是<span lang="EN-US">CA</span>，这也可以解释为什么 传统数据库的扩展能力有限的原因。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"> </span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">BASE</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">模型：</span></span></strong></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">说起来很有趣，<span lang="EN-US">BASE</span>的英文意义是碱，而<span lang="EN-US">ACID</span>是酸。真的是水火不容啊。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="font-size: 10.5pt;">Basically Availble &#8211;</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">基本可用</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="font-size: 10.5pt;">Soft-state &#8211;</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">软状态<span lang="EN-US">/</span>柔性事务</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="font-size: 10.5pt;">Eventual Consistency &#8211;</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">最终一致性</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">BASE</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">模型是传统<span lang="EN-US">ACID</span>模型的反面，不同于<span lang="EN-US">ACID</span>模型，<span lang="EN-US">BASE</span>强调牺牲高一致性，从而获得可用性或可靠性。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">基本可用是指通过<span lang="EN-US">Sharding</span>，允许部分分区失败。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">软状态是指异步，允许数据在一段时间内的不一致，只要保证最终一致就可以了。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">最终一致性是整个<span lang="EN-US">NoSQL</span>中的一个核心理念，强调最终数据是一致的就可以了，而不是时时一致。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-size: 10.5pt;">Quorum NRW</span></span></strong><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">：</span></span></strong></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-no-proof: yes;" lang="EN-US"><a href="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image015.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image015" src="http://www.agilejava.net/blog/wp-content/uploads/2010/10/clip_image015_thumb.jpg" border="0" alt="clip_image015" width="554" height="225" /></a></span></strong><strong style="mso-bidi-font-weight: normal;"> </strong></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">图</span><span lang="EN-US"><span style="font-size: 10.5pt;">8 Quorum NRW</span></span></span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"> </span></span></strong></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">N: </span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;"><span style="font-family: 宋体;">复制的节点数，即一份数据被保存的份数。</span><span lang="EN-US"><br />
<span style="font-family: 宋体;">R: </span></span><span style="font-family: 宋体;">成功读操作的最小节点数，即每次读取成功需要的份数。</span><span lang="EN-US"><br />
<span style="font-family: 宋体;">W: </span></span></span><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">成功写操作的最小节点数 ，即每次写成功需要的份数。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"> </span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">这三个因素决定了可用性，一致性和分区容错性。只需<span lang="EN-US">W + R &gt; N</span>，就可以保证强一致性。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"><span style="font-family: 宋体;"> </span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;"><strong style="mso-bidi-font-weight: normal;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">实际应用：</span></span></strong><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;"> 今年上半年我在aspire的搜索团队中负责互联网搜索的设计与开发，我设计的网页爬虫系统就是采用<span lang="EN-US">Cassandra</span>来存储网页与链接信息的。下面结合我的实际使用经验谈谈我对<span lang="EN-US">Cassandra</span>的看法：</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; margin: 0cm 0cm 0pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">优点：</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="font-family: 宋体;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-size: 10.5pt;">弹性扩展：由于<span lang="EN-US">Cassandra</span>是完全分布式的，使用时不需要再像使用<span lang="EN-US">MySQL</span>那样自己设计复杂的数据切分方案，也不再配置复杂的</span></span><span style="font-size: 10.5pt;"><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;" lang="EN-US">DRBD+Heartbeat</span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: arial; mso-font-kerning: 0pt;"><span style="font-size: 10.5pt;">，一切都变得非常简单了，只需要简单的配置就可以给一个集群中增加一个新的节点，而且对客户端完全是透明的，不需要任何更改。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">灵活的<span lang="EN-US">schema</span>：不需要象数据库一样预先设计<span lang="EN-US">schema</span>，增加或者删除字段非常方便。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">使用简单：由于没有类似<span lang="EN-US">SQL</span>这样复杂的查询语言，学习成本不高，很容易上手。</span></span></span></p>
<p class="MsoNormal" style="text-justify: inter-ideograph; padding-bottom: 0px; line-height: normal; margin: 0cm 0cm 0pt;"><span style="mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">缺点：</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">稳定性差：在我们的实际使用过程中发现，单机数据量达到<span lang="EN-US">200G</span>以上，时不时就会发生宕机现象。</span></span></span></p>
<p class="MsoNormal" style="padding-bottom: 0px; line-height: 18pt; text-indent: -18pt; margin: 0cm 0cm 0pt 48pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span style="mso-fareast-font-family: symbol; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: symbol;" lang="EN-US"><span style="mso-list: ignore;"><span style="font-family: symbol;"><span style="font-size: 10pt;">·</span></span><span style="line-height: normal;"><span style="font-family: times new roman;"><span style="font-size: 7pt;"> </span></span></span></span></span><span style="mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;">缺乏管理与分析工具：传统的关系型数据都有比较好用的管理与分析工具，使用这些工具可以轻松的管理数据库，查看数据，分析性能瓶颈等，而<span lang="EN-US">Cassandra</span>确缺少类似的工具，就连简单的查看一条数据，都要通过编程才能看到。</span></span></span></p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.agilejava.net%2Fblog%2Farchives%2F28&title=%E5%88%86%E5%B8%83%E5%BC%8F%E5%AD%98%E5%82%A8%E6%8A%80%E6%9C%AF%E5%8F%8A%E5%BA%94%E7%94%A8" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.agilejava.net/blog/archives/28/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

