读书吐槽 - 《ZooKeeper:分布式过程协同技术详解》
最近在读一本书《ZooKeeper:分布式过程协同技术详解》,荣凯拉(Junqueira, B.)著,谢超译。刚读到第二章,感觉有些不对,有些段落反复读了多遍,也没看明白是想说明什么问题。。当时是亚马逊在打折,12.99入手的kindle版,觉得蛮便宜也没仔细看评价,现在有点后悔了。。翻译得确实有些词不达意,如果有想买这本书的兄弟, 三思 还是不要买了,翻译得确实有点水,英文比较好的可以去看看英文原版。
摘抄一段大家感受一下。
本段在原书的第2章第1.3节,完全摘录,包括标点都未做更改。
通知机制的一个重要保障是,对同一个znode的操作,先向客户端传送通知,然后再对该节点进行变更。如果客户端对一个znode设置了监视点,而该node发生了两个连续更新。第一次更新后,客户端在观察第二次变化前就接收到了通知,然后读取znode中的数据。我们认为主要特性在于通知机制阻止了客户端所观察的更新顺序。虽然ZooKeeper的状态变化传播给某些客户端时更慢,但我们保障客户端以全局的顺序来观察ZooKeeper的状态。
你看明白他在说什么了么。。
然后我找了一下原书是怎么写的:
One important guarantee of notifications is that they are delivered to a client before any other change is made to the same znode. If a client sets a watch to a znode and there are two consecutive updates to the znode, the client receives the notification after the first update and before it has a chance to observe the second update by, say, reading the znode data. The key property we satisfy is the one that notifications preserve the order of updates the client observes. Although changes to the state of ZooKeeper may end up propagating more slowly to any given client, we guarantee that clients observe changes to the ZooKeeper state according to a global order.
我的理解是这样的:
通知机制的一个重要保障是,保证一个znode上的更新通知在另一个新的更新之前送达到监听的客户端。比如一个客户端监听了某个znode,并且在该znode上发生了两次连续更新,那么客户端会在第一个更新完成之后,并且在第二个更新开始之前收到通知,然后读取数据。我们最关注的一个特性是通知机制保证了客户端观察到更新的顺序,虽然这有可能造成ZooKeeper的状态变更会更慢地传递给客户端,但保证了所有的客户端收到更新通知的顺序都是一致的。
这样读起来就通顺多了。
另外再指出一处勘误,仍旧是这第2章第1.3节,图2.3的下边,有一个假设事件按以下顺序发生,第二条:
2.客户端c1连接后,向/tasks中添加了一个新的任务。
原书为:
2. Client c2 comes and adds a task to /tasks.
不知道是出版的时候没有仔细检查还是生成电子书的时候出错了。
感觉就像是在骗钱。。