课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的程序员都掌握了分布式服务开发的相关技术,而今天我们就通过案例分析来了解一下,分布式服务框架的应用。
Zookeeper作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是Zookeeper并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,后面将会详细介绍Zookeeper能够解决的一些典型问题,这里先介绍一下,Zookeeper的操作接口和简单使用示例。
常用接口列表
客户端要连接Zookeeper服务器可以通过创建org.apache.zookeeper.ZooKeeper的一个实例对象,然后调用这个类提供的接口来和服务器交互。
前面说了ZooKeeper主要是用来维护和监控一个目录节点树中存储的数据的状态,所有我们能够操作ZooKeeper的也和操作目录节点树大体一样,如创建一个目录节点,给某个目录节点设置数据,获取某个目录节点的所有子目录节点,给某个目录节点设置权限和监控这个目录节点的状态变化。
这些接口通过方法名,方法功能描述表示:
Stringcreate(Stringpath,byte[]data,ListACLacl,CreateModecreateMode)创建一个给定的目录节点path,并给它设置数据,CreateMode标识有四种形式的目录节点,分别是PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加1,然后返回给客户端已经成功创建的目录节点名;EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是session超时,这种节点会被自动删除;EPHEMERAL_SEQUENTIAL:临时自动编号节点
Statexists(Stringpath,booleanwatch)判断某个path是否存在,并设置是否监控这个目录节点,这里的watcher是在创建ZooKeeper实例时指定的watcher,exists方法还有一个重载方法,可以指定特定的watcher
Statexists(Stringpath,Watcherwatcher)重载方法,这里给某个目录节点设置特定的watcher,Watcher在ZooKeeper是一个核心功能,Watcher可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应
voiddelete(Stringpath,intversion)删除path对应的目录节点,version为-1可以匹配任何版本,也就删除了这个目录节点所有数据
ListStringgetChildren(Stringpath,booleanwatch)获取指定path下的所有子目录节点,同样getChildren方法也有一个重载方法可以设置特定的watcher监控子节点的状态
StatsetData(Stringpath,byte[]data,intversion) 给path设置数据,可以指定这个数据的版本号,如果version为-1怎可以匹配任何版本
byte[]getData(Stringpath,booleanwatch,Statstat) 获取这个path对应的目录节点存储的数据,数据的版本等信息可以通过stat来指定,同时还可以设置是否监控这个目录节点数据的状态
voidaddAuthInfo(Stringscheme,byte[]auth)客户端将自己的授权信息提交给服务器,服务器将根据这个授权信息验证客户端的访问权限。
StatsetACL(Stringpath,ListACLacl,intversion) 给某个目录节点重新设置访问权限,需要注意的是Zookeeper中的目录节点权限不具有传递性,父目录节点的权限不能传递给子目录节点。目录节点ACL由两部分组成:perms和id。
Perms有ALL、READ、WRITE、CREATE、DELETE、ADMIN几种
而id标识了访问目录节点的身份列表,默认情况下有以下两种:
ANYONE_ID_UNSAFE=newId("world","anyone")和AUTH_IDS=newId("auth","")分别表示任何人都可以访问和创建者拥有访问权限。
ListACLgetACL(Stringpath,Statstat)获取某个目录节点的访问权限列表
除了以上这些上表中列出的方法之外还有一些重载方法,如都提供了一个回调类的重载方法以及可以设置特定Watcher的重载方法,具体的方法可以参考org.apache.zookeeper.ZooKeeper类的API说明。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。