??xml version="1.0" encoding="utf-8" standalone="yes"?>在线精品视频在线观看高清,国产欧美一区二区精品性色超碰,国产一区二区三区站长工具 http://www.aygfsteel.com/BucketLi/every thing come from new! zh-cn Mon, 19 May 2025 04:33:04 GMT Mon, 19 May 2025 04:33:04 GMT 60 Google Megastore初探 http://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.htmlBucketLI BucketLI Mon, 14 Feb 2011 04:44:00 GMT http://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.html http://www.aygfsteel.com/BucketLi/comments/344259.html http://www.aygfsteel.com/BucketLi/archive/2011/02/14/344259.html#Feedback 1 http://www.aygfsteel.com/BucketLi/comments/commentRss/344259.html http://www.aygfsteel.com/BucketLi/services/trackbacks/344259.html dq底 ,团队内部成员分n了这?/span>google论文 ,初读了下 ,发现其有蛮多有意思的东西 ,想把他译下来 ,但是译了一部?/span>,明显感觉如果q样的翻译发出去 ,很可能误人子?/span>,所以改成了概要式的博文 ,q篇文章会将原论文最核心的几个部分做不完全的译和个人理?/span>,如有不解或者错误的地方 ,h看原论文,q希望能够指?谢谢 .
正文
Megastore是谷歌一个内部的存储pȝ ,它的底层数据存储依赖 Bigtable,也就是基?/span>NoSql实现?/span>,但是和传l的 NoSql不同的是 ,它实CcM RDBMS的数据模?/span>(便捷?/span>),同时提供数据的强一致性解x?/span>(同一?/span>datacenter,Z MVCC的事务实?/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
]]>zookeeper使用和原理探IӞ一Q?/title> http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.htmlBucketLI BucketLI Tue, 21 Dec 2010 10:58:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html http://www.aygfsteel.com/BucketLi/comments/341268.html http://www.aygfsteel.com/BucketLi/archive/2010/12/21/341268.html#Feedback 15 http://www.aygfsteel.com/BucketLi/comments/commentRss/341268.html http://www.aygfsteel.com/BucketLi/services/trackbacks/341268.html zookeeper 介绍
zookeeper是一个ؓ分布式应用提供一致性服务的软gQ它是开源的 Hadoop目中的一个子目Qƈ且根?/span>google发表?/span><The Chubby lock service for loosely-coupled distributed systems>论文来实现的Q接下来我们首先来安装用下q个软gQ然后再来探索下其中比较重要一致性算法?/span>
zookeeper安装和?br />
zookeeper的安装基本上可以按照 http://hadoop.apache.org/zookeeper/docs/current/ zookeeperStarted.html q个面上的步骤完成安装Q这里主要介l下部v一个集的步骤Q因个官斚w面似乎讲得ƈ不是非常详细 (Running Replicated Zookeeper)?br />
׃手头机器不Q所以在一台机器上部v?/span>3?/span>server,如果你手头也比较紧,也可以这么做。那么我Z 3个文件夹Q如?br />
server1 server2 server3
然后每个文g多w面解压一?/span>zookeeper的下载包Qƈ且还Z几个文g夹,Ml构如下 ,最后那个是下蝲q来压羃包的解压文g
data dataLog logs zookeeper-3.3.2
那么首先q入 data目录Q创Z?/span>myid的文Ӟ里面写入一个数字,比如我这个是 server1,那么写一?/span>1Q?/span>server2对应 myid文g写?/span>2Q?/span>server3对应myid文g?span style="font-family: 宋体">写个 3
然后q入 zookeeper-3.3.2/conf 目录Q那么如果是刚下q来Q会?/span>3个文Ӟ configuration.xml, log4j.properties,zoo_sample.cfg ,q?/span>3个文件我们首先要做的是在这个目录创Z?/span>zoo.cfg的配|文Ӟ当然你可以把 zoo_sample.cfg文gҎ zoo.cfgQ配|的内容如下所C:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=xxxx/zookeeper/server1/data
dataLogDir=xxx/zookeeper/server1/dataLog
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
标红的几个配|应该官|讲得很清楚了,只是需要注意的?/span>clientPortq个端口如果你是?/span>1台机器上部v多个 server,那么每台机器都要不同?/span>clientPortQ比如我 server1?/span>2181,server2?/span>2182Q?/span>server3?/span>2183Q?/span>dataDir?/span>dataLogDir也需要区分下?/span>
最后几行唯一需要注意的地方是 server.X q个数字是对应 data/myid中的数字。你?/span>3?/span>server?/span>myid文g中分别写入了 1Q?/span>2Q?/span>3Q那么每?/span>server中的 zoo.cfg都配 server.1,server.2,server.3?/span>OK了。因为在同一台机器上Q后面连着?/span>2个端?/span>3?/span>server都不要一P否则端口冲突Q其中第一个端口用来集成员的信息交换Q第二个端口是在 leader挂掉时专门用来进行选D leader所用?br />
q入 zookeeper-3.3.2/bin 目录?span style="font-family: 宋体">Q?strong>./ zkServer.sh start 启动一?/span>server,q时会报大量错误Q其实没什么关p,因ؓ现在集群只v?/span>1?/span>serverQ?/span>zookeeper服务器端h会根?/span>zoo.cfg的服务器列表发v选D leader的请求,因ؓq不上其他机器而报错,那么当我们vW二?/span>zookeeper实例后, leader会被选出Q从而一致性服务开始可以用,q是因ؓ 3台机器只要有 2台可用就可以选出 leaderq且对外提供服务 (2n+1台机器,可以?/span>n台机器挂?/span>)?br />
接下来就可以使用了,我们可以先通过 zookeeper自带的客L交互E序来简单感受下 zookeeper到底做一些什么事情。进?/span>zookeeper-3.3.2/binQ?/span>3?/span>server中Q意一个)下, ./zkCli.sh –server 127.0.0.1:2182 ,我连的是开着 2182端口的机器?br />
那么Q首先我们随便打个命令,因ؓ zookeeper不认识,他会l出命o?/span>help,如下?/span>
ls(查看当前节点数据 ),
ls2(查看当前节点数据q能看到更新ơ数{数?/span>) ,
create(创徏一个节?/span>) ,
get(得到一个节点,包含数据和更新次数等数据 ),
set(修改节点 )
delete(删除一个节?/span>)
通过上述命o实践Q我们可以发玎ͼ zookeeper使用了一个类似文件系l的树结构,数据可以挂在某个节点上,可以对这个节点进行删攏V另外我们还发现Q当改动一个节点的时候,集群中活着的机器都会更新到一致的数据?/span>
zookeeper 的数据模?br />
在简单用了 zookeeper之后Q我们发现其数据模型有些像操作系l的文gl构Q结构如下图所C?br />
(1) 每个节点?/span>zookeeper中叫?/span>znode,q且其有一个唯一的\径标识,?/span>/SERVER2节点的标识就?/span>/APP3/SERVER2
(2) Znode可以有子 znodeQƈ?/span>znode里可以存数据Q但?/span>EPHEMERALcd的节点不能有子节?br />
(3) Znode中的数据可以有多个版本,比如某一个\径下存有多个数据版本Q那么查询这个\径下的数据就需要带上版本?br />
(4) znode 可以是时节点,一旦创?/span> znode 的客L与服务器失去联系Q这?/span> znode 也将自动删除Q?/span>Zookeeper 的客L和服务器通信采用长连接方式,每个客户端和 服务器通过心蟩来保持连接,q个q接状态称?/span> sessionQ如?/span> znode 是时节点,q个 session 失效Q?/span>znode 也就删除?br />
(5) znode 的目录名可以自动~号Q如 App1 已经存在Q再创徏的话Q将会自动命名ؓ App2
(6) znode 可以被监控,包括q个目录节点中存储的数据的修改,子节点目录的变化{,一旦变化可以通知讄监控的客LQ这个功能是 zookeeper对于应用最重要的特性,通过q个Ҏ可以实现的功能包括配置的集中管理,集群理Q分布式锁等{?/span>
通过 java代码使用 zookeeper
Zookeeper 的用主要是通过创徏?/span>jar 包下?/span>Zookeeper 实例Qƈ且调用其接口Ҏq行的,主要的操作就是对 znode 的增删改操作Q监?/span>znode 的变化以及处理?/span>
以下Z要的 API 使用和解?/span>
// 创徏一个Zookeeper实例Q第一个参Cؓ目标服务器地址和端口,W二个参CؓSession时旉Q第三个点变化时的回调方?/span>
ZooKeeper zk = new ZooKeeper( " 127.0.0.1:2181 " , 500000 , new Watcher() {
// 监控所有被触发的事?/span>
public void process(WatchedEvent event) {
// dosomething
}
} );
// 创徏一个节点rootQ数据是mydata,不进行ACL权限控制Q节点ؓ怹性的(卛_Lshutdown了也不会消失)
zk.create( " /root " , " mydata " .getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 在root下面创徏一个childone znode,数据为childone,不进行ACL权限控制Q节点ؓ怹性的
zk.create( " /root/childone " , " childone " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
// 取得/root节点下的子节点名U?q回List<String>
zk.getChildren( " /root " , true );
// 取得/root/childone节点下的数据,q回byte[]
zk.getData( " /root/childone " , true , null );
// 修改节点/root/childone下的数据Q第三个参数为版本,如果?1Q那会无视被修改的数据版本,直接Ҏ
zk.setData( " /root/childone " , " childonemodify " .getBytes(), - 1 );
// 删除/root/childoneq个节点Q第二个参数为版本,Q?的话直接删除Q无视版?/span>
zk.delete( " /root/childone " , - 1 );
// 关闭session
zk.close();
Zookeeper 的主应用场景实现思\Q除d方示例)
(1)配置理
集中式的配置理在应用集中是非常常见的Q一般商业公司内部都会实C套集中的配置理中心Q应对不同的应用集群对于׃n各自配置的需求,q且在配|变更时能够通知到集中的每一个机器?br />
Zookeeper很容易实现这U集中式的配|管理,比如?/span>APP1 的所有配|配|到 /APP1 znode 下, APP1 所有机器一启动对 /APP1 q个节点q行监控 (zk.exist( "/APP1" ,true)), q且实现回调Ҏ Watcher Q那么在 zookeeper ?/span>/APP1 znode 节点下数据发生变化的时候,每个机器都会收到通知Q?/span>Watcher Ҏ会被执行,那么应用再取下数据即?/span>(zk.getData( "/APP1",false,null ));
以上q个例子只是单的_颗_度配置监控Q细颗粒度的数据可以q行分层U监控,q一切都是可以设计和控制的?/span>
(2) 集群理
应用集群中,我们常常需要让每一个机器知道集中Q或依赖的其他某一个集)哪些机器是活着的,q且在集机器因为宕机,|络断链{原因能够不在h工介入的情况下迅速通知到每一个机器?br />
Zookeeper同样很容易实现这个功能,比如我在 zookeeper 服务器端有一?/span>znode ?/span>/APP1SERVERS, 那么集群中每一个机器启动的时候都去这个节点下创徏一?/span>EPHEMERAL cd的节点,比如 server1 创徏 /APP1SERVERS/SERVER1( 可以使用 ip, 保证不重?/span>) Q?/span>server2 创徏 /APP1SERVERS/SERVER2 Q然?/span>SERVER1 ?/span>SERVER2 ?/span>watch /APP1SERVERS q个父节点,那么也就是这个父节点下数据或者子节点变化都会通知对该节点q行 watch 的客L。因?/span>EPHEMERAL cd节点有一个很重要的特性,是客户端和服务器端q接断掉或?/span>session q期׃使节Ҏ失,那么在某一个机器挂掉或者断铄时候,其对应的节点׃消失Q然后集中所有对 /APP1SERVERS q行 watch 的客L都会收到通知Q然后取得最新列表即可?br />
另外有一个应用场景就是集?/span>master, 一?/span>master 挂掉能够马上能从 slave 中选出一?/span>master, 实现步骤和前者一P只是机器在启动的时候在 APP1SERVERS 创徏的节点类型变?/span>EPHEMERAL_SEQUENTIAL cdQ这h个节点会自动被编P例如
zk.create( " /testRootPath/testChildPath1 " , " 1 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
zk.create( " /testRootPath/testChildPath2 " , " 2 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
zk.create( " /testRootPath/testChildPath3 " , " 3 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
// 创徏一个子目录节点
zk.create( " /testRootPath/testChildPath4 " , " 4 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println(zk.getChildren( " /testRootPath " , false ));
打印l果Q?/span> [testChildPath10000000000, testChildPath20000000001, testChildPath40000000003, testChildPath30000000002]
zk.create( " /testRootPath " , " testRootData " .getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 创徏一个子目录节点
zk.create( " /testRootPath/testChildPath1 " , " 1 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
zk.create( " /testRootPath/testChildPath2 " , " 2 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
zk.create( " /testRootPath/testChildPath3 " , " 3 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
// 创徏一个子目录节点
zk.create( " /testRootPath/testChildPath4 " , " 4 " .getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
System.out.println(zk.getChildren( " /testRootPath " , false ));
打印l果: [testChildPath2, testChildPath1, testChildPath4, testChildPath3]
我们默认规定~号最的?/span>master, 所以当我们?/span>/APP1SERVERS 节点做监控的时候,得到服务器列表,只要所有集机器逻辑认ؓ最编可点ؓ master Q那?/span>master p选出Q而这?/span>master 宕机的时候,相应?/span>znode 会消失,然后新的服务器列表就被推送到客户端,然后每个节点逻辑认ؓ最编可点ؓ master Q这样就做到动?/span>master 选D?br />
ȝ
我们初步使用了一?/span>zookeeperq且试着描述了几U应用场景的具体实现思\Q接下来的文章,我们会尝试着LI一?/span>zookeeper的高可用性与 leaderElection法?/span>
参?/strong>Q?/span>http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
http://hadoop.apache.org/zookeeper/docs/current/
http://rdc.taobao.com/team/jm/archives/448
]]> JAVAU程池代码浅?/title> http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.htmlBucketLI BucketLI Thu, 16 Dec 2010 05:57:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html http://www.aygfsteel.com/BucketLi/comments/340295.html http://www.aygfsteel.com/BucketLi/archive/2010/12/16/340295.html#Feedback 0 http://www.aygfsteel.com/BucketLi/comments/commentRss/340295.html http://www.aygfsteel.com/BucketLi/services/trackbacks/340295.html 阅读全文 ]]> JAVAq发容器代码随读 http://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.htmlBucketLI BucketLI Thu, 25 Nov 2010 05:43:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.html http://www.aygfsteel.com/BucketLi/comments/335623.html http://www.aygfsteel.com/BucketLi/archive/2010/11/25/335623.html#Feedback 3 http://www.aygfsteel.com/BucketLi/comments/commentRss/335623.html http://www.aygfsteel.com/BucketLi/services/trackbacks/335623.html 阅读全文 ]]> Log4j代码随读 http://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.htmlBucketLI BucketLI Fri, 22 Oct 2010 02:40:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.html http://www.aygfsteel.com/BucketLi/comments/335618.html http://www.aygfsteel.com/BucketLi/archive/2010/10/22/335618.html#Feedback 1 http://www.aygfsteel.com/BucketLi/comments/commentRss/335618.html http://www.aygfsteel.com/BucketLi/services/trackbacks/335618.html 阅读全文 ]]> JAVA LOCK代码析 http://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.htmlBucketLI BucketLI Thu, 30 Sep 2010 04:05:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.html http://www.aygfsteel.com/BucketLi/comments/333471.html http://www.aygfsteel.com/BucketLi/archive/2010/09/30/333471.html#Feedback 2 http://www.aygfsteel.com/BucketLi/comments/commentRss/333471.html http://www.aygfsteel.com/BucketLi/services/trackbacks/333471.html 阅读全文 ]]> Netty代码分析 http://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.htmlBucketLI BucketLI Sat, 25 Sep 2010 04:10:00 GMT http://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.html http://www.aygfsteel.com/BucketLi/comments/332462.html http://www.aygfsteel.com/BucketLi/archive/2010/09/25/332462.html#Feedback 1 http://www.aygfsteel.com/BucketLi/comments/commentRss/332462.html http://www.aygfsteel.com/BucketLi/services/trackbacks/332462.html 阅读全文 ]]>
վ֩ģ壺
ͨ |
е |
Ĭ |
Ȫ |
ӱ |
կ |
|
º |
|
|
ƽ |
۳ |
|
|
|
|
ƽ |
|
|
|
|
¤ |
|
|
|
ɽ |
ƾ |
ľ |
¡ |
ǭ |
|
|
֬ |
|
|
|
γ |
³ƶ |
Ƿ |
|
Ϻ |