0%

Zookeeper详解

客户端连接时如何选择连接节点。

  1. 客户端connectstring:localhost:2181,localhost:2182,localhost:2183
  2. 通过类client.StaticHostProvider类维护地址列表。
  3. 通过解析connectstring后,进行地址随机排序,形成最终的地址列表。
  4. 每次从形成的地址列表中选择第一个地址进行连接,如果连接不上再选择第二个地址,如果当前节点是列表最后一个节点,则重新选择第一个节点,相当于循环选择。
  5. 通过随机排序,每个zk客户端随机的链接zk服务器节点,分布相对均匀。

zk会话

什么是zk会话

  1. 会话代表客户端与服务端的连接。
  2. 底层通讯通过TCP协议进行连接通讯。
  3. 网络出现抖动或者暂时断网时,并不意味着会话一定断开。
  4. 会话的对象实现是SessionImpl(此类是SessionTrackerImpl静态内部类),包括4个属性:sessionID,唯一标识一个会话,在zk服务端具备全局唯一性。Timeout:会话超时时间,创建客户端zk对象时传入,服务器会根据最小会话时间和最大会话时间来明确此值是什么(如果介于2者之间,直接使用此值,如果小于最小时间,使用最小时间,如果大于最大时间,使用最大时间89)。Ticktime:下次会话超时时间,与“分桶策略”有关。isClosing:标记一个会话是否已经被关闭,当服务器检测到有会话失效时,就会把此会话标识为已关闭(CLOSE),此状态一直存在直到会话被清除。
  5. 会话的状态:CONNECTING,CONNECTED,RECONNECTING,RECONNECTED,CLOSE。
Read more »

1
watcher由于通讯问题,如果是高并发,频繁写入或更新时候,并不是所有的变更通知都会通过watcher感知到,所以最好改用消息中间件来处理。

ZAB协议

Zookeeper Atomic Broadcast即原子消息广播协议。

ZAB协议用在哪些地方

选举过程,数据写入过程。
zab的核心是定义了那些会改变zk服务器数据状态的事务请求的处理方式。

所有事物请求必须由一个全局唯一的服务器来协调处理,这个服务器被称为leader服务器,余下的服务器则称为follower。leader负责将一个客户端请求转换成一个事务Proposal(提议),并将该Proposal分发给集群中所有的follower。之后leader等待所有follower的反馈,一旦超过半数的follower进行了正确的反馈,那么leader就会再次向所有的follower分发commit消息,要求follower将前一个Proposal进行提交。

Read more »

Zookeeper的watcher

在zookeeper中,有个很重要的概念就是watcher,可以看做是swing中的listener,只要你注册了watcher,那么当zk节点被操作时,你就可以通过watcher感知到。也可以理解为事件回调接口。
客户端通过

public class ZooKeeper{…}

进行远程连接和维护结构。

zookeeper watcher接口

1
2
3
4
graph TD
A["interface Watcher"] -->|innerClass|B["interface Event"]
B -->|innerClass|D["enum KeeperState"]
B -->|innerClass|C["enum EventType"]
Read more »

布局

View的关系

一个界面只能有一个根view,ViewGroup是也是一种view,通常用来作为多个view的容器, 进行界面布局,它是矩形的 。view和view间的关系,父子,兄弟关系,就像XML的结构一样。同样的可以多级的嵌套。

ViewGroup继承于View,实现了ViewParent和ViewManager接口,可作为容器view的view继承了ViewGroup,而普通的view则直接继承View并且没有实现那2个接口,因此所有view【类没有定义为final】都可以通过继承后实现ViewParent和ViewManager接口变为容器view,很多自定的view其实都是用过继承,实现多个接口来做出想要的功能的。

布局方式【待补充】

主要的布局方式有:
LinearLayout,RelativeLayout,Grid View,List View,Recycler View。

子view的大小设置方式:

  1. 固定宽高:设置一个固定值,超出部分会被截去。
  1. 设置为wrap-content,会自适应view的内容大小。
  1. 设置为match-parent,会和父view一样的尺寸。
**宽高可以分别设置**

权重layout-weight

view有布局权重,权重越大,所能分配到的父view的剩余空间越大,权重相等,会平分剩余的空间。可以用来作为布局中视图的均匀分布【垂直或水平】。

Read more »

dp与px换算,sp同:
px=dp(dpi/160)
dp=px/(dpi/160)=px
160/dpi
dpi=(对角线长度像素值)/手机显示屏尺寸
对角线长度像素值=(分辨率宽的平方+分辨率高的平方)开平方

权限控制 ACL(access control list)

zk的权限控制是用过固定的字符串模式来表示的。

权限组成

1
[scheme]:[id]:[permission]

“[ ]”中是字符串变量。

scheme:验证策略,shceme有:world,auth,digest,ip,super。
id:权限被赋予的对象,不同的scheme有不同的id。
permission:权限组合,为:c[创建],r[读],d[删除],w[写],a[权限控制]中的一个或多个组成。如:crd。

1
acl权限没有继承关系,仅仅会针对当前节点。
Read more »