架构师 Hooya 正带领着他的团队着手开发一款高性能分布式协调工具,暂名 zookeeper。
Hooya开场白:同学们,作为一个分布式协调软件,通知功能是必不可少的。今天我们来 brainstorm 一下如何设计咱 zookeeper 的通知机制吧。
攻城狮小A抢先道:这简单呀,不就是实现一个大号的观察者模式嘛,Client 注册 watcher,Server 在数据改动的时候通知 Client,目测不会太复杂。
Hooya:再简单也要从头开始,我们先定义一下通知的事件吧。
小A一拍脑门:zookeeper 目录按结构存储节点,同时节点上可以存储数据,有了:
enum EventType {
NodeCreated,
NodeDeleted,
DataChanged,
ChildrenChanged;
}
Hooya笑道:小伙子思维很活跃啊。
小A害羞道:嘿嘿,跟据事件类型,Client 注册 watcher 也很简单:
Client.addWatcher(path, eventType, callback);
程序猿小B发问:那 Server 端触发事件的方法该如何表示呢?
小A解释:当 Server 节点数据发生变化的时候,找到其对应的所有 watcher,挨个触发相应的事件,不同事件签名也不一样:
Server.fireDataChangedEvent(path, dataBefore, dataAfter);
Server.fireChildrenChangedEvent