??xml version="1.0" encoding="utf-8" standalone="yes"?>在线精品视频在线观看高清,国产欧美一区二区精品性色超碰,国产一区二区三区站长工具http://www.aygfsteel.com/BucketLi/every thing come from new!zh-cnMon, 19 May 2025 04:33:04 GMTMon, 19 May 2025 04:33:04 GMT60Google Megastore初探http://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.htmlBucketLIBucketLIMon, 14 Feb 2011 04:44:00 GMThttp://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.htmlhttp://www.aygfsteel.com/BucketLi/comments/344259.htmlhttp://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.html#Feedback1http://www.aygfsteel.com/BucketLi/comments/commentRss/344259.htmlhttp://www.aygfsteel.com/BucketLi/services/trackbacks/344259.htmldq底,团队内部成员分n了这?/span>google论文,初读了下,发现其有蛮多有意思的东西,想把他译下来,但是译了一部?/span>,明显感觉如果q样的翻译发出去,很可能误人子?/span>,所以改成了概要式的博文,q篇文章会将原论文最核心的几个部分做不完全的译和个人理?/span>,如有不解或者错误的地方,h看原论文,q希望能够指?谢谢.

正文

Megastore是谷歌一个内部的存储pȝ,它的底层数据存储依赖Bigtable,也就是基?/span>NoSql实现?/span>,但是和传l的NoSql不同的是,它实CcMRDBMS的数据模?/span>(便捷?/span>),同时提供数据的强一致性解x?/span>(同一?/span>datacenter,ZMVCC的事务实?/span>),q且数据进行细颗粒度的分区(q里的分区是指在同一?/span>datacenter,所?/span>datacenter都有相同的分区数?/span>),然后数据更新在机房间进行同步复?/span>(q个保证所?/span>datacenter中的数据一?/span>).

...

中文译地址: http://wenku.baidu.com/view/a465cc260722192e4536f671.html#

原文地址: http://wenku.baidu.com/view/2ddeb1afdd3383c4bb4cd2bb.html



BucketLI 2011-02-14 12:44 发表评论
]]>
zookeeper使用和原理探IӞ一Q?/title><link>http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html</link><dc:creator>BucketLI</dc:creator><author>BucketLI</author><pubDate>Tue, 21 Dec 2010 10:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html</guid><wfw:comment>http://www.aygfsteel.com/BucketLi/comments/341268.html</wfw:comment><comments>http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BucketLi/comments/commentRss/341268.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BucketLi/services/trackbacks/341268.html</trackback:ping><description><![CDATA[<p><span style="font: 7pt 'Times New Roman'"><span style="font-size: 10pt"><strong>zookeeper</strong><span style="font-family: 宋体"><strong>介绍<br /> </strong></span>zookeeper<span style="font-family: 宋体">是一个ؓ分布式应用提供一致性服务的软gQ它是开源的</span>Hadoop<span style="font-family: 宋体">目中的一个子目Qƈ且根?/span>google<span style="font-family: 宋体">发表?/span><The Chubby lock service for loosely-coupled distributed systems><span style="font-family: 宋体">论文来实现的Q接下来我们首先来安装用下q个软gQ然后再来探索下其中比较重要一致性算法?/span>  <br /> </span></span><br /> <strong style="font-size: 10pt">zookeeper<span style="font-family: 宋体">安装和?br /> </span></strong><span style="font-size: 10pt">zookeeper<span style="font-family: 宋体">的安装基本上可以按照</span> http://hadoop.apache.org/zookeeper/docs/current/ zookeeperStarted.html <span style="font-family: 宋体">q个面上的步骤完成安装Q这里主要介l下部v一个集的步骤Q因个官斚w面似乎讲得ƈ不是非常详细</span>(Running Replicated Zookeeper)<span style="font-family: 宋体">?br /> </span><span style="font-family: 宋体"><br /> ׃手头机器不Q所以在一台机器上部v?/span>3<span style="font-family: 宋体">?/span>server,<span style="font-family: 宋体">如果你手头也比较紧,也可以这么做。那么我Z</span>3<span style="font-family: 宋体">个文件夹Q如?br /> </span></span><strong><span style="font-size: 10pt"><strong>server1   server2   server3<br /> </strong></span></strong><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体"><br /> 然后每个文g多w面解压一?/span>zookeeper<span style="font-family: 宋体">的下载包Qƈ且还Z几个文g夹,Ml构如下</span>,<span style="font-family: 宋体">最后那个是下蝲q来压羃包的解压文g<br /> </span></span></span><strong><span style="font-size: 10pt"><strong>data dataLog logs zookeeper-3.3.2<br /> </strong></span><br /> </strong><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">那么首先q入</span>data<span style="font-family: 宋体">目录Q创Z?/span>myid<span style="font-family: 宋体">的文Ӟ里面写入一个数字,比如我这个是</span>server1,<span style="font-family: 宋体">那么写一?/span>1<span style="font-family: 宋体">Q?/span>server2<span style="font-family: 宋体">对应</span>myid<span style="font-family: 宋体">文g写?/span>2<span style="font-family: 宋体">Q?/span>server3对应myid文g?span style="font-family: 宋体">写个</span>3<br /> </span></span><br /> <span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">然后q入</span><strong>zookeeper-3.3.2/conf</strong><span style="font-family: 宋体">目录Q那么如果是刚下q来Q会?/span>3<span style="font-family: 宋体">个文Ӟ</span><strong>configuration.xml, log4j.properties,zoo_sample.cfg</strong>,<span style="font-family: 宋体">q?/span>3<span style="font-family: 宋体">个文件我们首先要做的是在这个目录创Z?/span>zoo.cfg<span style="font-family: 宋体">的配|文Ӟ当然你可以把</span>zoo_sample.cfg<span style="font-family: 宋体">文gҎ</span>zoo.cfg<span style="font-family: 宋体">Q配|的内容如下所C:</span></span></span> <br /> <span style="color: red"><span style="font-size: 10pt"><span style="color: red">tickTime=2000<br /> </span><span style="color: red">initLimit=5<br /> </span><span style="color: red">syncLimit=2<br /> </span><span style="color: red">dataDir=xxxx/zookeeper/server1/data<br /> </span><span style="color: red">dataLogDir=xxx/zookeeper/server1/dataLog<br /> </span><span style="color: red">clientPort=2181<br /> </span></span></span><span style="font-size: 10pt">server.1=127.0.0.1:2888:3888<br /> server.2=127.0.0.1:2889:3889<br /> server.3=127.0.0.1:2890:3890<span style="font-family: 宋体"><br /> </span></span><br /> <span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">标红的几个配|应该官|讲得很清楚了,只是需要注意的?/span>clientPort<span style="font-family: 宋体">q个端口如果你是?/span>1<span style="font-family: 宋体">台机器上部v多个</span>server,<span style="font-family: 宋体">那么每台机器都要不同?/span>clientPort<span style="font-family: 宋体">Q比如我</span>server1<span style="font-family: 宋体">?/span>2181,server2<span style="font-family: 宋体">?/span>2182<span style="font-family: 宋体">Q?/span>server3<span style="font-family: 宋体">?/span>2183<span style="font-family: 宋体">Q?/span>dataDir<span style="font-family: 宋体">?/span>dataLogDir<span style="font-family: 宋体">也需要区分下?/span> <br /> <br /> <span style="font-family: 宋体">最后几行唯一需要注意的地方是</span> server.X <span style="font-family: 宋体">q个数字是对应</span> data/myid<span style="font-family: 宋体">中的数字。你?/span>3<span style="font-family: 宋体">?/span>server<span style="font-family: 宋体">?/span>myid<span style="font-family: 宋体">文g中分别写入了</span>1<span style="font-family: 宋体">Q?/span>2<span style="font-family: 宋体">Q?/span>3<span style="font-family: 宋体">Q那么每?/span>server<span style="font-family: 宋体">中的</span>zoo.cfg<span style="font-family: 宋体">都配</span>server.1,server.2,server.3<span style="font-family: 宋体">?/span>OK<span style="font-family: 宋体">了。因为在同一台机器上Q后面连着?/span>2<span style="font-family: 宋体">个端?/span>3<span style="font-family: 宋体">?/span>server<span style="font-family: 宋体">都不要一P否则端口冲突Q其中第一个端口用来集成员的信息交换Q第二个端口是在</span>leader<span style="font-family: 宋体">挂掉时专门用来进行选D</span>leader<span style="font-family: 宋体">所用?br /> <br /> </span></span></span><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">q入</span>zookeeper-3.3.2/bin <span style="font-family: 宋体">目录?span style="font-family: 宋体">Q?strong>./</strong></span></span></span></span><span style="font-family: 宋体"><span style="font-size: 10pt"><strong>zkServer.sh start</strong></span></span><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">启动一?/span>server,<span style="font-family: 宋体">q时会报大量错误Q其实没什么关p,因ؓ现在集群只v?/span>1<span style="font-family: 宋体">?/span>server<span style="font-family: 宋体">Q?/span>zookeeper<span style="font-family: 宋体">服务器端h会根?/span>zoo.cfg<span style="font-family: 宋体">的服务器列表发v选D</span>leader<span style="font-family: 宋体">的请求,因ؓq不上其他机器而报错,那么当我们vW二?/span>zookeeper<span style="font-family: 宋体">实例后,</span>leader<span style="font-family: 宋体">会被选出Q从而一致性服务开始可以用,q是因ؓ</span>3<span style="font-family: 宋体">台机器只要有</span>2<span style="font-family: 宋体">台可用就可以选出</span>leader<span style="font-family: 宋体">q且对外提供服务</span>(2n+1<span style="font-family: 宋体">台机器,可以?/span>n<span style="font-family: 宋体">台机器挂?/span>)<span style="font-family: 宋体">?br /> <br /> </span></span></span><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">接下来就可以使用了,我们可以先通过</span> zookeeper<span style="font-family: 宋体">自带的客L交互E序来简单感受下</span>zookeeper<span style="font-family: 宋体">到底做一些什么事情。进?/span>zookeeper-3.3.2/bin<span style="font-family: 宋体">Q?/span>3<span style="font-family: 宋体">?/span>server<span style="font-family: 宋体">中Q意一个)下,</span><strong>./zkCli.sh –server 127.0.0.1:2182</strong>,<span style="font-family: 宋体">我连的是开着</span>2182<span style="font-family: 宋体">端口的机器?br /> <br /> </span><span style="font-family: 宋体">那么Q首先我们随便打个命令,因ؓ</span>zookeeper<span style="font-family: 宋体">不认识,他会l出命o?/span>help,<span style="font-family: 宋体">如下?/span></span></span>  <br />    <img border="0" alt="" src="http://www.aygfsteel.com/images/blogjava_net/bucketli/dddd.jpg" /><br /> <span style="font-size: 10pt">ls(<span style="font-family: 宋体">查看当前节点数据</span>),<br /> ls2(<span style="font-family: 宋体">查看当前节点数据q能看到更新ơ数{数?/span>) ,<br /> create(<span style="font-family: 宋体">创徏一个节?/span>) ,<br /> get(<span style="font-family: 宋体">得到一个节点,包含数据和更新次数等数据</span>),<br /> set(<span style="font-family: 宋体">修改节点</span>)<br /> delete(<span style="font-family: 宋体">删除一个节?/span>)<br /> </span><span style="font-family: 宋体"><br /> <span style="font-size: 10pt"><span style="font-family: 宋体">通过上述命o实践Q我们可以发玎ͼ</span>zookeeper<span style="font-family: 宋体">使用了一个类似文件系l的树结构,数据可以挂在某个节点上,可以对这个节点进行删攏V另外我们还发现Q当改动一个节点的时候,集群中活着的机器都会更新到一致的数据?/span> <br /> </span></span><br /> <span style="font-size: 10pt"><strong>zookeeper</strong><span style="font-family: 宋体"><strong>的数据模?br /> </strong></span></span><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-family: 宋体">在简单用了</span>zookeeper<span style="font-family: 宋体">之后Q我们发现其数据模型有些像操作系l的文gl构Q结构如下图所C?br /> </span></span></span><img border="0" alt="" src="http://www.aygfsteel.com/images/blogjava_net/bucketli/XX.jpg" /><br /> <br /> <br /> <span style="font-size: 10pt">(1)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span><span style="font-family: 宋体">每个节点?/span>zookeeper<span style="font-family: 宋体">中叫?/span>znode,<span style="font-family: 宋体">q且其有一个唯一的\径标识,?/span>/SERVER2<span style="font-family: 宋体">节点的标识就?/span>/APP3/SERVER2<br /> (2)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span>Znode<span style="font-family: 宋体">可以有子</span>znode<span style="font-family: 宋体">Qƈ?/span>znode<span style="font-family: 宋体">里可以存数据Q但?/span>EPHEMERAL<span style="font-family: 宋体">cd的节点不能有子节?br /> </span>(3)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span>Znode<span style="font-family: 宋体">中的数据可以有多个版本,比如某一个\径下存有多个数据版本Q那么查询这个\径下的数据就需要带上版本?br /> </span>(4)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span>znode <span style="font-family: 宋体">可以是时节点,一旦创?/span> znode <span style="font-family: 宋体">的客L与服务器失去联系Q这?/span> znode <span style="font-family: 宋体">也将自动删除Q?/span>Zookeeper <span style="font-family: 宋体">的客L和服务器通信采用长连接方式,每个客户端和  服务器通过心蟩来保持连接,q个q接状态称?/span> session<span style="font-family: 宋体">Q如?/span> znode <span style="font-family: 宋体">是时节点,q个</span> session <span style="font-family: 宋体">失效Q?/span>znode <span style="font-family: 宋体">也就删除?br /> </span>(5)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span>znode <span style="font-family: 宋体">的目录名可以自动~号Q如</span> App1 <span style="font-family: 宋体">已经存在Q再创徏的话Q将会自动命名ؓ</span> App2 <br /> (6)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal">     </span>znode <span style="font-family: 宋体">可以被监控,包括q个目录节点中存储的数据的修改,子节点目录的变化{,一旦变化可以通知讄监控的客LQ这个功能是</span>zookeeper<span style="font-family: 宋体">对于应用最重要的特性,通过q个Ҏ可以实现的功能包括配置的集中管理,集群理Q分布式锁等{?/span></span>  <br /> <br /> <span lang="EN-US"><o:p style="font-size: 10pt"><strong><span style="font-family: 宋体">通过</span>java<span style="font-family: 宋体">代码使用</span>zookeeper <br /> </strong></o:p></span><span lang="EN-US"><span style="font-size: 10pt"><span lang="EN-US">Zookeeper</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的用主要是通过创徏?/span><span lang="EN-US">jar</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">包下?/span><span lang="EN-US">Zookeeper</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">实例Qƈ且调用其接口Ҏq行的,主要的操作就是对</span><span lang="EN-US">znode</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的增删改操作Q监?/span><span lang="EN-US">znode</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的变化以及处理?/span></span></span><span lang="EN-US"><o:p> <br /> <br /> </o:p></span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">以下Z要的</span><span lang="EN-US">API</span><span style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">使用和解?/span></span></span></p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #008000">//</span><span style="color: #008000">创徏一个Zookeeper实例Q第一个参Cؓ目标服务器地址和端口,W二个参CؓSession时旉Q第三个点变化时的回调方?/span><span style="color: #008000"><br /> <img id="Codehighlighter1_136_262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_262_Open_Text.style.display='none'; Codehighlighter1_136_262_Closed_Image.style.display='inline'; Codehighlighter1_136_262_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_136_262_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_136_262_Closed_Text.style.display='none'; Codehighlighter1_136_262_Open_Image.style.display='inline'; Codehighlighter1_136_262_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #000000">ZooKeeper zk </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ZooKeeper(</span><span style="color: #000000">"</span><span style="color: #000000">127.0.0.1:2181</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">500000</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Watcher() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_136_262_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_136_262_Open_Text"><span style="color: #000000">{<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />           </span><span style="color: #008000">//</span><span style="color: #008000"> 监控所有被触发的事?/span><span style="color: #008000"><br /> <img id="Codehighlighter1_216_254_Open_Image" onclick="this.style.display='none'; Codehighlighter1_216_254_Open_Text.style.display='none'; Codehighlighter1_216_254_Closed_Image.style.display='inline'; Codehighlighter1_216_254_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_216_254_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_216_254_Closed_Text.style.display='none'; Codehighlighter1_216_254_Open_Image.style.display='inline'; Codehighlighter1_216_254_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" /></span><span style="color: #000000">             </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> process(WatchedEvent event) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_216_254_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_216_254_Open_Text"><span style="color: #000000">{<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />           </span><span style="color: #008000">//</span><span style="color: #008000">dosomething</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" /></span><span style="color: #000000">           }</span></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />      }</span></span><span style="color: #000000">);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">创徏一个节点rootQ数据是mydata,不进行ACL权限控制Q节点ؓ怹性的(卛_Lshutdown了也不会消失)</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/root</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">mydata</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">在root下面创徏一个childone znode,数据为childone,不进行ACL权限控制Q节点ؓ怹性的</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/root/childone</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">childone</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">取得/root节点下的子节点名U?q回List<String></span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.getChildren(</span><span style="color: #000000">"</span><span style="color: #000000">/root</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">取得/root/childone节点下的数据,q回byte[]</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.getData(</span><span style="color: #000000">"</span><span style="color: #000000">/root/childone</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">true</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">修改节点/root/childone下的数据Q第三个参数为版本,如果?1Q那会无视被修改的数据版本,直接Ҏ</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.setData(</span><span style="color: #000000">"</span><span style="color: #000000">/root/childone</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">childonemodify</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">删除/root/childoneq个节点Q第二个参数为版本,Q?的话直接删除Q无视版?/span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.delete(</span><span style="color: #000000">"</span><span style="color: #000000">/root/childone</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />      <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">关闭session</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.close();<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div>  <br /> <strong><span style="font-family: 'Courier New'; color: black"><span style="font-size: 10pt"><span style="font-family: 'Courier New'; color: black">Zookeeper</span><span style="font-family: 宋体; color: black">的主应用场景实现思\Q除d方示例)</span></span></span> <br /> </strong><span style="font-size: 10pt"><span style="font-family: 'Courier New'; color: black"><strong><br /> (1)</strong></span><span style="font-family: 宋体; color: black"><strong>配置理<br /> </strong></span></span><span style="font-family: 宋体; color: black"><span style="font-size: 10pt">集中式的配置理在应用集中是非常常见的Q一般商业公司内部都会实C套集中的配置理中心Q应对不同的应用集群对于׃n各自配置的需求,q且在配|变更时能够通知到集中的每一个机器?br /> </span></span><span style="font-size: 10pt"><span style="font-family: 'Courier New'; color: black"><br /> Zookeeper</span><span style="font-family: 宋体; color: black">很容易实现这U集中式的配|管理,比如?/span><span style="font-family: 'Courier New'; color: black">APP1</span><span style="font-family: 宋体; color: black">的所有配|配|到</span><span style="font-family: 'Courier New'; color: black">/APP1 znode</span><span style="font-family: 宋体; color: black">下,</span><span style="font-family: 'Courier New'; color: black">APP1</span><span style="font-family: 宋体; color: black">所有机器一启动对</span><span style="font-family: 'Courier New'; color: black">/APP1</span><span style="font-family: 宋体; color: black">q个节点q行监控</span><span style="font-family: 'Courier New'; color: black">(zk.exist(</span><span style="font-family: 'Courier New'; color: #2a00ff">"/APP1"</span><span style="font-family: 'Courier New'; color: black">,true)),</span><span style="font-family: 宋体; color: black">q且实现回调Ҏ</span><span style="font-family: 'Courier New'; color: black">Watcher</span><span style="font-family: 宋体; color: black">Q那么在</span><span style="font-family: 'Courier New'; color: black">zookeeper</span><span style="font-family: 宋体; color: black">?/span><span style="font-family: 'Courier New'; color: black">/APP1 znode</span><span style="font-family: 宋体; color: black">节点下数据发生变化的时候,每个机器都会收到通知Q?/span><span style="font-family: 'Courier New'; color: black">Watcher</span><span style="font-family: 宋体; color: black">Ҏ会被执行,那么应用再取下数据即?/span><span style="font-family: 'Courier New'; color: black">(zk.getData(</span><span style="font-family: 'Courier New'; color: #2a00ff">"/APP1",false,null</span><span style="font-family: 'Courier New'; color: black">));<br /> </span></span><span style="font-family: 宋体; color: black"><span style="font-size: 10pt"><br /> 以上q个例子只是单的_颗_度配置监控Q细颗粒度的数据可以q行分层U监控,q一切都是可以设计和控制的?/span></span>     <img border="0" alt="" src="http://www.aygfsteel.com/images/blogjava_net/bucketli/ttt.jpg" /><br /> <strong><span style="font-size: 10pt"><span style="font-family: 'Courier New'; color: black">(2)</span><span style="font-family: 宋体; color: black">集群理</span></span> <br /> </strong><span style="font-family: 宋体; color: black"><span style="font-size: 10pt">应用集群中,我们常常需要让每一个机器知道集中Q或依赖的其他某一个集)哪些机器是活着的,q且在集机器因为宕机,|络断链{原因能够不在h工介入的情况下迅速通知到每一个机器?br /> </span></span><span style="font-size: 10pt"><span style="font-family: 'Courier New'; color: black"><br /> Zookeeper</span><span style="font-family: 宋体; color: black">同样很容易实现这个功能,比如我在</span><span style="font-family: 'Courier New'; color: black">zookeeper</span><span style="font-family: 宋体; color: black">服务器端有一?/span><span style="font-family: 'Courier New'; color: black">znode</span><span style="font-family: 宋体; color: black">?/span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS,</span><span style="font-family: 宋体; color: black">那么集群中每一个机器启动的时候都去这个节点下创徏一?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL</span><span style="font-family: 宋体; color: black">cd的节点,比如</span><span style="font-family: 'Courier New'; color: black">server1</span><span style="font-family: 宋体; color: black">创徏</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS/SERVER1(</span><span style="font-family: 宋体; color: black">可以使用</span><span style="font-family: 'Courier New'; color: black">ip,</span><span style="font-family: 宋体; color: black">保证不重?/span><span style="font-family: 'Courier New'; color: black">)</span><span style="font-family: 宋体; color: black">Q?/span><span style="font-family: 'Courier New'; color: black">server2</span><span style="font-family: 宋体; color: black">创徏</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS/SERVER2</span><span style="font-family: 宋体; color: black">Q然?/span><span style="font-family: 'Courier New'; color: black">SERVER1</span><span style="font-family: 宋体; color: black">?/span><span style="font-family: 'Courier New'; color: black">SERVER2</span><span style="font-family: 宋体; color: black">?/span><span style="font-family: 'Courier New'; color: black">watch /APP1SERVERS</span><span style="font-family: 宋体; color: black">q个父节点,那么也就是这个父节点下数据或者子节点变化都会通知对该节点q行</span><span style="font-family: 'Courier New'; color: black">watch</span><span style="font-family: 宋体; color: black">的客L。因?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL</span><span style="font-family: 宋体; color: black">cd节点有一个很重要的特性,是客户端和服务器端q接断掉或?/span><span style="font-family: 'Courier New'; color: black">session</span><span style="font-family: 宋体; color: black">q期׃使节Ҏ失,那么在某一个机器挂掉或者断铄时候,其对应的节点׃消失Q然后集中所有对</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS</span><span style="font-family: 宋体; color: black">q行</span><span style="font-family: 'Courier New'; color: black">watch</span><span style="font-family: 宋体; color: black">的客L都会收到通知Q然后取得最新列表即可?br /> </span></span><span style="font-size: 10pt"><span style="font-family: 宋体; color: black"><br /> 另外有一个应用场景就是集?/span><span style="font-family: 'Courier New'; color: black">master,</span><span style="font-family: 宋体; color: black">一?/span><span style="font-family: 'Courier New'; color: black">master</span><span style="font-family: 宋体; color: black">挂掉能够马上能从</span><span style="font-family: 'Courier New'; color: black">slave</span><span style="font-family: 宋体; color: black">中选出一?/span><span style="font-family: 'Courier New'; color: black">master,</span><span style="font-family: 宋体; color: black">实现步骤和前者一P只是机器在启动的时候在</span><span style="font-family: 'Courier New'; color: black">APP1SERVERS</span><span style="font-family: 宋体; color: black">创徏的节点类型变?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL_SEQUENTIAL</span><span style="font-family: 宋体; color: black">cdQ这h个节点会自动被编P例如</span></span>           <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath1</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath2</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath3</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000"> 创徏一个子目录节点</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />System.out.println(zk.getChildren(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">false</span><span style="color: #000000">));<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div>  <span style="font-size: 10pt"><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">打印l果Q?/span></span><span style="font-family: 'Courier New'; color: black; font-size: 10pt; mso-font-kerning: 0pt" lang="EN-US"><span style="font-size: 10pt">[testChildPath10000000000, testChildPath20000000001, testChildPath40000000003, testChildPath30000000002]<br /> <br /> </span><o:p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">testRootData</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000"> 创徏一个子目录节点</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath1</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath2</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath3</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000"> 创徏一个子目录节点</span><span style="color: #008000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">zk.create(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath/testChildPath4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />System.out.println(zk.getChildren(</span><span style="color: #000000">"</span><span style="color: #000000">/testRootPath</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">false</span><span style="color: #000000">));<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <span style="font-family: 宋体; color: black; font-size: 10pt"><span style="font-size: 10pt"><span style="font-family: 宋体; color: black">打印l果:</span><span style="font-family: 'Courier New'; color: black">[testChildPath2, testChildPath1, testChildPath4, testChildPath3]<br /> </span></span></span><span style="font-family: 'Courier New'; color: black; font-size: 10pt"><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br /> 我们默认规定~号最的?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master,</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">所以当我们?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">/APP1SERVERS</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">节点做监控的时候,得到服务器列表,只要所有集机器逻辑认ؓ最编可点ؓ</span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Q那?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">p选出Q而这?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">宕机的时候,相应?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">znode</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">会消失,然后新的服务器列表就被推送到客户端,然后每个节点逻辑认ؓ最编可点ؓ</span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Q这样就做到动?/span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US">master</span><span style="font-family: 宋体; color: black; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">选D?br /> </span><span style="font-family: 'Courier New'; color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt" lang="EN-US"><o:p></o:p></span><img border="0" alt="" src="http://www.aygfsteel.com/images/blogjava_net/bucketli/xxx.jpg" /><br /> <br /> <strong>ȝ</strong>  <p style="text-indent: -18pt; margin-left: 18pt" class="MsoListParagraph"><span style="font-family: 宋体">我们初步使用了一?/span>zookeeper<span style="font-family: 宋体">q且试着描述了几U应用场景的具体实现思\Q接下来的文章,我们会尝试着LI一?/span>zookeeper<span style="font-family: 宋体">的高可用性与</span>leaderElection<span style="font-family: 宋体">法?/span></p> <p><span style="font-family: 宋体"><strong>参?/strong>Q?/span><a >http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/</a></p> <p>      <a >http://hadoop.apache.org/zookeeper/docs/current/</a></p> <p>      <a >http://rdc.taobao.com/team/jm/archives/448</a><br /> </span></o:p></span></p> <img src ="http://www.aygfsteel.com/BucketLi/aggbug/341268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BucketLi/" target="_blank">BucketLI</a> 2010-12-21 18:58 <a href="http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVAU程池代码浅?/title><link>http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html</link><dc:creator>BucketLI</dc:creator><author>BucketLI</author><pubDate>Thu, 16 Dec 2010 05:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html</guid><wfw:comment>http://www.aygfsteel.com/BucketLi/comments/340295.html</wfw:comment><comments>http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BucketLi/comments/commentRss/340295.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BucketLi/services/trackbacks/340295.html</trackback:ping><description><![CDATA[     摘要:  1.       ExecutorService  Java?.5开始正式提供了q发?而这个ƈ发包里面除了原子变量,synchronizer,q发容器,另外一个非帔R要的Ҏ就是线E池.对于U程池的意义,我们q边不再多说. 上图是线E池的主体类?ThreadPoolExecutor是应用最为广泛的一?..  <a href='http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html'>阅读全文</a><img src ="http://www.aygfsteel.com/BucketLi/aggbug/340295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BucketLi/" target="_blank">BucketLI</a> 2010-12-16 13:57 <a href="http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVAq发容器代码随读http://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.htmlBucketLIBucketLIThu, 25 Nov 2010 05:43:00 GMThttp://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.htmlhttp://www.aygfsteel.com/BucketLi/comments/335623.htmlhttp://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.html#Feedback3http://www.aygfsteel.com/BucketLi/comments/commentRss/335623.htmlhttp://www.aygfsteel.com/BucketLi/services/trackbacks/335623.html阅读全文

BucketLI 2010-11-25 13:43 发表评论
]]>
Log4j代码随读http://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.htmlBucketLIBucketLIFri, 22 Oct 2010 02:40:00 GMThttp://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.htmlhttp://www.aygfsteel.com/BucketLi/comments/335618.htmlhttp://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.html#Feedback1http://www.aygfsteel.com/BucketLi/comments/commentRss/335618.htmlhttp://www.aygfsteel.com/BucketLi/services/trackbacks/335618.html阅读全文

BucketLI 2010-10-22 10:40 发表评论
]]>
JAVA LOCK代码析http://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.htmlBucketLIBucketLIThu, 30 Sep 2010 04:05:00 GMThttp://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.htmlhttp://www.aygfsteel.com/BucketLi/comments/333471.htmlhttp://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.html#Feedback2http://www.aygfsteel.com/BucketLi/comments/commentRss/333471.htmlhttp://www.aygfsteel.com/BucketLi/services/trackbacks/333471.html阅读全文

BucketLI 2010-09-30 12:05 发表评论
]]>
Netty代码分析http://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.htmlBucketLIBucketLISat, 25 Sep 2010 04:10:00 GMThttp://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.htmlhttp://www.aygfsteel.com/BucketLi/comments/332462.htmlhttp://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.html#Feedback1http://www.aygfsteel.com/BucketLi/comments/commentRss/332462.htmlhttp://www.aygfsteel.com/BucketLi/services/trackbacks/332462.html阅读全文

BucketLI 2010-09-25 12:10 发表评论
]]>
վ֩ģ壺 ͨ| е| Ĭ| Ȫ| ӱ| կ| | º| | | ƽ| ۳| | | | | ƽ| | | | | ¤| | | | ɽ| ƾ| ľ| ¡| ǭ| | | ֬| | | | γ| ³ƶ| Ƿ| | Ϻ|