??xml version="1.0" encoding="utf-8" standalone="yes"?>91成人免费观看网站,欧美日韩国产亚洲沙发,亚洲成人在线http://www.aygfsteel.com/BucketLi/every thing come from new!zh-cnSat, 05 Jul 2025 10:01:26 GMTSat, 05 Jul 2025 10:01:26 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.html团队内部成员分n?jin)这?/span>google初读?jin)?/span>,想把他译下来,明显感觉如果q样的翻译发出去,所以改成了(jin)概要式的博文,如有不解或者错误的地方,正文

Megastore它的底层数据存储依赖Bigtable,实现?/span>,不同的是,的数据模?/span>(同时提供数据的强一致性解x(chng)?/span>(ZMVCCq且数据进行细颗粒度的分区(所?/span>datacenter然后数据更新在机房间进行同步复?/span>(中的数据一?/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: ?hu)?><strong>介绍<br /> </strong></span>zookeeper<span style="font-family: ?hu)?>是一个ؓ(f)分布式应用提供一致性服务的软gQ它是开源的</span>Hadoop<span style="font-family: ?hu)?>目中的一个子目Qƈ且根?/span>google<span style="font-family: ?hu)?>发表?/span><The Chubby lock service for loosely-coupled distributed systems><span style="font-family: ?hu)?>论文来实现的Q接下来我们首先来安装用下q个软gQ然后再来探索下其中比较重要一致性算法?/span>  <br /> </span></span><br /> <strong style="font-size: 10pt">zookeeper<span style="font-family: ?hu)?>安装和?br /> </span></strong><span style="font-size: 10pt">zookeeper<span style="font-family: ?hu)?>的安装基本上可以按照</span> http://hadoop.apache.org/zookeeper/docs/current/ zookeeperStarted.html <span style="font-family: ?hu)?>q个面上的步骤完成安装Q这里主要介l下部v一个集的步骤Q因个官斚w面似乎讲得ƈ不是非常详细</span>(Running Replicated Zookeeper)<span style="font-family: ?hu)?>?br /> </span><span style="font-family: ?hu)?><br /> ׃手头机器不Q所以在一台机器上部v?/span>3<span style="font-family: ?hu)?>?/span>server,<span style="font-family: ?hu)?>如果你手头也比较紧,也可以这么做。那么我Z(jin)</span>3<span style="font-family: ?hu)?>个文件夹Q如?br /> </span></span><strong><span style="font-size: 10pt"><strong>server1   server2   server3<br /> </strong></span></strong><span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?><br /> 然后每个文g多w面解压一?/span>zookeeper<span style="font-family: ?hu)?>的下载包Qƈ且还Z(jin)几个文g夹,Ml构如下</span>,<span style="font-family: ?hu)?>最后那个是下蝲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: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>那么首先q入</span>data<span style="font-family: ?hu)?>目录Q创Z?/span>myid<span style="font-family: ?hu)?>的文Ӟ里面写入一个数字,比如我这个是</span>server1,<span style="font-family: ?hu)?>那么写一?/span>1<span style="font-family: ?hu)?>Q?/span>server2<span style="font-family: ?hu)?>对应</span>myid<span style="font-family: ?hu)?>文g写?/span>2<span style="font-family: ?hu)?>Q?/span>server3对应myid文g?span style="font-family: ?hu)?>写个</span>3<br /> </span></span><br /> <span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>然后q入</span><strong>zookeeper-3.3.2/conf</strong><span style="font-family: ?hu)?>目录Q那么如果是刚下q来Q会(x)?/span>3<span style="font-family: ?hu)?>个文Ӟ</span><strong>configuration.xml, log4j.properties,zoo_sample.cfg</strong>,<span style="font-family: ?hu)?>q?/span>3<span style="font-family: ?hu)?>个文件我们首先要做的是在这个目录创Z?/span>zoo.cfg<span style="font-family: ?hu)?>的配|文Ӟ当然你可以把</span>zoo_sample.cfg<span style="font-family: ?hu)?>文gҎ(gu)</span>zoo.cfg<span style="font-family: ?hu)?>Q配|的内容如下所C:(x)</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: ?hu)?><br /> </span></span><br /> <span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>标红的几个配|应该官|讲得很清楚?jin),只是需要注意的?/span>clientPort<span style="font-family: ?hu)?>q个端口如果你是?/span>1<span style="font-family: ?hu)?>台机器上部v多个</span>server,<span style="font-family: ?hu)?>那么每台机器都要不同?/span>clientPort<span style="font-family: ?hu)?>Q比如我</span>server1<span style="font-family: ?hu)?>?/span>2181,server2<span style="font-family: ?hu)?>?/span>2182<span style="font-family: ?hu)?>Q?/span>server3<span style="font-family: ?hu)?>?/span>2183<span style="font-family: ?hu)?>Q?/span>dataDir<span style="font-family: ?hu)?>?/span>dataLogDir<span style="font-family: ?hu)?>也需要区分下?/span> <br /> <br /> <span style="font-family: ?hu)?>最后几行唯一需要注意的地方是</span> server.X <span style="font-family: ?hu)?>q个数字是对应</span> data/myid<span style="font-family: ?hu)?>中的数字。你?/span>3<span style="font-family: ?hu)?>?/span>server<span style="font-family: ?hu)?>?/span>myid<span style="font-family: ?hu)?>文g中分别写入了(jin)</span>1<span style="font-family: ?hu)?>Q?/span>2<span style="font-family: ?hu)?>Q?/span>3<span style="font-family: ?hu)?>Q那么每?/span>server<span style="font-family: ?hu)?>中的</span>zoo.cfg<span style="font-family: ?hu)?>都配</span>server.1,server.2,server.3<span style="font-family: ?hu)?>?/span>OK<span style="font-family: ?hu)?>?jin)。因为在同一台机器上Q后面连着?/span>2<span style="font-family: ?hu)?>个端?/span>3<span style="font-family: ?hu)?>?/span>server<span style="font-family: ?hu)?>都不要一P否则端口冲突Q其中第一个端口用来集成员的信息交换Q第二个端口是在</span>leader<span style="font-family: ?hu)?>挂掉时专门用来进行选D</span>leader<span style="font-family: ?hu)?>所用?br /> <br /> </span></span></span><span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>q入</span>zookeeper-3.3.2/bin <span style="font-family: ?hu)?>目录?span style="font-family: ?hu)?>Q?strong>./</strong></span></span></span></span><span style="font-family: ?hu)?><span style="font-size: 10pt"><strong>zkServer.sh start</strong></span></span><span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>启动一?/span>server,<span style="font-family: ?hu)?>q时?x)报大量错误Q其实没什么关p,因ؓ(f)现在集群只v?/span>1<span style="font-family: ?hu)?>?/span>server<span style="font-family: ?hu)?>Q?/span>zookeeper<span style="font-family: ?hu)?>服务器端h?x)根?/span>zoo.cfg<span style="font-family: ?hu)?>的服务器列表发v选D</span>leader<span style="font-family: ?hu)?>的请求,因ؓ(f)q不上其他机器而报错,那么当我们vW二?/span>zookeeper<span style="font-family: ?hu)?>实例后,</span>leader<span style="font-family: ?hu)?>会(x)被选出Q从而一致性服务开始可以用,q是因ؓ(f)</span>3<span style="font-family: ?hu)?>台机器只要有</span>2<span style="font-family: ?hu)?>台可用就可以选出</span>leader<span style="font-family: ?hu)?>q且对外提供服务</span>(2n+1<span style="font-family: ?hu)?>台机器,可以?/span>n<span style="font-family: ?hu)?>台机器挂?/span>)<span style="font-family: ?hu)?>?br /> <br /> </span></span></span><span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>接下来就可以使用?jin),我们可以先通过</span> zookeeper<span style="font-family: ?hu)?>自带的客L(fng)交互E序来简单感受下</span>zookeeper<span style="font-family: ?hu)?>到底做一些什么事情。进?/span>zookeeper-3.3.2/bin<span style="font-family: ?hu)?>Q?/span>3<span style="font-family: ?hu)?>?/span>server<span style="font-family: ?hu)?>中Q意一个)(j)下,</span><strong>./zkCli.sh –server 127.0.0.1:2182</strong>,<span style="font-family: ?hu)?>我连的是开着</span>2182<span style="font-family: ?hu)?>端口的机器?br /> <br /> </span><span style="font-family: ?hu)?>那么Q首先我们随便打个命令,因ؓ(f)</span>zookeeper<span style="font-family: ?hu)?>不认识,他会(x)l出命o(h)?/span>help,<span style="font-family: ?hu)?>如下?/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: ?hu)?>查看当前节点数据</span>),<br /> ls2(<span style="font-family: ?hu)?>查看当前节点数据q能看到更新ơ数{数?/span>) ,<br /> create(<span style="font-family: ?hu)?>创徏一个节?/span>) ,<br /> get(<span style="font-family: ?hu)?>得到一个节点,包含数据和更新次数等数据</span>),<br /> set(<span style="font-family: ?hu)?>修改节点</span>)<br /> delete(<span style="font-family: ?hu)?>删除一个节?/span>)<br /> </span><span style="font-family: ?hu)?><br /> <span style="font-size: 10pt"><span style="font-family: ?hu)?>通过上述命o(h)实践Q我们可以发玎ͼ</span>zookeeper<span style="font-family: ?hu)?>使用?jin)一个类似文件系l的?wi)结构,数据可以挂在某个节点上,可以对这个节点进行删攏V另外我们还发现Q当改动一个节点的时候,集群中活着的机器都?x)更新到一致的数据?/span> <br /> </span></span><br /> <span style="font-size: 10pt"><strong>zookeeper</strong><span style="font-family: ?hu)?><strong>的数据模?br /> </strong></span></span><span style="font-family: ?hu)?><span style="font-size: 10pt"><span style="font-family: ?hu)?>在简单用了(jin)</span>zookeeper<span style="font-family: ?hu)?>之后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: ?hu)?>每个节点?/span>zookeeper<span style="font-family: ?hu)?>中叫?/span>znode,<span style="font-family: ?hu)?>q且其有一个唯一的\径标识,?/span>/SERVER2<span style="font-family: ?hu)?>节点的标识就?/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: ?hu)?>可以有子</span>znode<span style="font-family: ?hu)?>Qƈ?/span>znode<span style="font-family: ?hu)?>里可以存数据Q但?/span>EPHEMERAL<span style="font-family: ?hu)?>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: ?hu)?>中的数据可以有多个版本,比如某一个\径下存有多个数据版本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: ?hu)?>可以是(f)时节点,一旦创?/span> znode <span style="font-family: ?hu)?>的客L(fng)与服务器失去联系Q这?/span> znode <span style="font-family: ?hu)?>也将自动删除Q?/span>Zookeeper <span style="font-family: ?hu)?>的客L(fng)和服务器通信采用长连接方式,每个客户端和  服务器通过?j)蟩来保持连接,q个q接状态称?/span> session<span style="font-family: ?hu)?>Q如?/span> znode <span style="font-family: ?hu)?>是(f)时节点,q个</span> session <span style="font-family: ?hu)?>失效Q?/span>znode <span style="font-family: ?hu)?>也就删除?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: ?hu)?>的目录名可以自动~号Q如</span> App1 <span style="font-family: ?hu)?>已经存在Q再创徏的话Q将?x)自动命名?f)</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: ?hu)?>可以被监控,包括q个目录节点中存储的数据的修改,子节点目录的变化{,一旦变化可以通知讄监控的客L(fng)Q这个功能是</span>zookeeper<span style="font-family: ?hu)?>对于应用最重要的特性,通过q个Ҏ(gu)可以实现的功能包括配置的集中管理,集群理Q分布式锁等{?/span></span>  <br /> <br /> <span lang="EN-US"><o:p style="font-size: 10pt"><strong><span style="font-family: ?hu)?>通过</span>java<span style="font-family: ?hu)?>代码使用</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: ?hu)? mso-fareast-font-family: ?hu)? 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: ?hu)? mso-fareast-font-family: ?hu)? 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: ?hu)? mso-fareast-font-family: ?hu)? 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ƈ且调用其接口Ҏ(gu)q行的,主要的操作就是对</span><span lang="EN-US">znode</span><span style="font-family: ?hu)? mso-fareast-font-family: ?hu)? 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: ?hu)? mso-fareast-font-family: ?hu)? 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">的变化以?qing)处理?/span></span></span><span lang="EN-US"><o:p> <br /> <br /> </o:p></span><span style="font-family: ?hu)? mso-fareast-font-family: ?hu)? 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: ?hu)? mso-fareast-font-family: ?hu)? 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: ?hu)? mso-fareast-font-family: ?hu)? 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ؓ(f)目标服务器地址和端口,W二个参Cؓ(f)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节点ؓ(f)怹性的(卛_L(fng)shutdown?jin)也不?x)消失)</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节点ؓ(f)怹性的</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那?x)无视被修改的数据版本,直接?gu)</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: ?hu)? color: black">的主应用场景实现思\Q除d方示例)(j)</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: ?hu)? color: black"><strong>配置理<br /> </strong></span></span><span style="font-family: ?hu)? color: black"><span style="font-size: 10pt">集中式的配置理在应用集中是非常常见的Q一般商业公司内部都?x)实C套集中的配置理中心(j)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: ?hu)? color: black">很容易实现这U集中式的配|管理,比如?/span><span style="font-family: 'Courier New'; color: black">APP1</span><span style="font-family: ?hu)? color: black">的所有配|配|到</span><span style="font-family: 'Courier New'; color: black">/APP1 znode</span><span style="font-family: ?hu)? color: black">下,</span><span style="font-family: 'Courier New'; color: black">APP1</span><span style="font-family: ?hu)? color: black">所有机器一启动对</span><span style="font-family: 'Courier New'; color: black">/APP1</span><span style="font-family: ?hu)? 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: ?hu)? color: black">q且实现回调Ҏ(gu)</span><span style="font-family: 'Courier New'; color: black">Watcher</span><span style="font-family: ?hu)? color: black">Q那么在</span><span style="font-family: 'Courier New'; color: black">zookeeper</span><span style="font-family: ?hu)? color: black">?/span><span style="font-family: 'Courier New'; color: black">/APP1 znode</span><span style="font-family: ?hu)? color: black">节点下数据发生变化的时候,每个机器都会(x)收到通知Q?/span><span style="font-family: 'Courier New'; color: black">Watcher</span><span style="font-family: ?hu)? color: black">Ҏ(gu)会(x)被执行,那么应用再取下数据即?/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: ?hu)? 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: ?hu)? color: black">集群理</span></span> <br /> </strong><span style="font-family: ?hu)? color: black"><span style="font-size: 10pt">应用集群中,我们常常需要让每一个机器知道集中Q或依赖的其他某一个集)(j)哪些机器是活着的,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: ?hu)? color: black">同样很容易实现这个功能,比如我在</span><span style="font-family: 'Courier New'; color: black">zookeeper</span><span style="font-family: ?hu)? color: black">服务器端有一?/span><span style="font-family: 'Courier New'; color: black">znode</span><span style="font-family: ?hu)? color: black">?/span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS,</span><span style="font-family: ?hu)? color: black">那么集群中每一个机器启动的时候都去这个节点下创徏一?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL</span><span style="font-family: ?hu)? color: black">cd的节点,比如</span><span style="font-family: 'Courier New'; color: black">server1</span><span style="font-family: ?hu)? color: black">创徏</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS/SERVER1(</span><span style="font-family: ?hu)? color: black">可以使用</span><span style="font-family: 'Courier New'; color: black">ip,</span><span style="font-family: ?hu)? color: black">保证不重?/span><span style="font-family: 'Courier New'; color: black">)</span><span style="font-family: ?hu)? color: black">Q?/span><span style="font-family: 'Courier New'; color: black">server2</span><span style="font-family: ?hu)? color: black">创徏</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS/SERVER2</span><span style="font-family: ?hu)? color: black">Q然?/span><span style="font-family: 'Courier New'; color: black">SERVER1</span><span style="font-family: ?hu)? color: black">?/span><span style="font-family: 'Courier New'; color: black">SERVER2</span><span style="font-family: ?hu)? color: black">?/span><span style="font-family: 'Courier New'; color: black">watch /APP1SERVERS</span><span style="font-family: ?hu)? color: black">q个父节点,那么也就是这个父节点下数据或者子节点变化都会(x)通知对该节点q行</span><span style="font-family: 'Courier New'; color: black">watch</span><span style="font-family: ?hu)? color: black">的客L(fng)。因?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL</span><span style="font-family: ?hu)? color: black">cd节点有一个很重要的特性,是客户端和服务器端q接断掉或?/span><span style="font-family: 'Courier New'; color: black">session</span><span style="font-family: ?hu)? color: black">q期׃(x)使节Ҏ(gu)失,那么在某一个机器挂掉或者断铄时候,其对应的节点׃(x)消失Q然后集中所有对</span><span style="font-family: 'Courier New'; color: black">/APP1SERVERS</span><span style="font-family: ?hu)? color: black">q行</span><span style="font-family: 'Courier New'; color: black">watch</span><span style="font-family: ?hu)? color: black">的客L(fng)都会(x)收到通知Q然后取得最新列表即可?br /> </span></span><span style="font-size: 10pt"><span style="font-family: ?hu)? color: black"><br /> 另外有一个应用场景就是集?/span><span style="font-family: 'Courier New'; color: black">master,</span><span style="font-family: ?hu)? color: black">一?/span><span style="font-family: 'Courier New'; color: black">master</span><span style="font-family: ?hu)? color: black">挂掉能够马上能从</span><span style="font-family: 'Courier New'; color: black">slave</span><span style="font-family: ?hu)? color: black">中选出一?/span><span style="font-family: 'Courier New'; color: black">master,</span><span style="font-family: ?hu)? color: black">实现步骤和前者一P只是机器在启动的时候在</span><span style="font-family: 'Courier New'; color: black">APP1SERVERS</span><span style="font-family: ?hu)? color: black">创徏的节点类型变?sh)?/span><span style="font-family: 'Courier New'; color: black">EPHEMERAL_SEQUENTIAL</span><span style="font-family: ?hu)? color: black">cdQ这h个节点会(x)自动被编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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; font-size: 10pt"><span style="font-size: 10pt"><span style="font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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">节点做监控的时候,得到服务器列表,只要所有集机器逻辑认ؓ(f)最编可点ؓ(f)</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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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">?x)消失,然后新的服务器列表就被推送到客户端,然后每个节点逻辑认ؓ(f)最编可点ؓ(f)</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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)? color: black; mso-fareast-font-family: ?hu)? 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: ?hu)?>我们初步使用?jin)一?/span>zookeeper<span style="font-family: ?hu)?>q且试着描述?jin)几U应用场景的具体实现思\Q接下来的文章,我们?x)尝试着LI一?/span>zookeeper<span style="font-family: ?hu)?>的高可用性与</span>leaderElection<span style="font-family: ?hu)?>法?/span></p> <p><span style="font-family: ?hu)?><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开始正式提供了(jin)q发?而这个ƈ发包里面除了(jin)原子变量,synchronizer,q发容器,另外一个非帔R要的Ҏ(gu)就是线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 发表评论
]]>
վ֩ģ壺 | ۶| ػʵ| Դ| | ˻| | ˶| ˫Ѽɽ| | ͭ| | ͭ| | ʡ| ɽ| Ϫ| | Ļ| | | | Ӻ| | | ĺ| ̨| ʡ| μԴ| | ڳ| ͤ| | ϰ| ¤| | | | | | º|