这本书,我看了两遍。为什么看两遍呢,因为说实话,第一遍没有完全看懂。 第一遍读过来,感觉作者讲了很多东西,但似乎又什么都没讲,总之看完之后有一种很奇怪的感觉。于是,便看了第二遍。第二遍读下来,才算是对这本书有了一个清楚的认识。
按照书中作者的说法,这本书不是讲"如何使用Hadoop的书,而是一本讲实现Hadoop功能的书,是一本讲如何简化实现分布式技术核心功能的书”。 作者希望读者能够通过这本书快速的掌握分布式系统理论并能够设计自己的分布式系统。
第一遍读下来,这本书的确讲到了分布式系统设计的方方面面,从并行计算到分布式协调,从分布式缓存到消息队列,包括分布式文件系统以及分布式作业调度,都有涉及。
然而,仔细的在读一遍,却发现,虽然作者将这些方面都写到了,然而却不能不给人以浅尝辄止的感觉。这也就是为什么我第一遍读完,感觉作者讲了很多,又似乎没有将什么的感觉的由来。 书中的很多概念,并没有讲透讲明。虽然给出了实现和例子,却没有深入的原理性的介绍;虽然列出了大段大段的源码;但却没有仔细的讲解;虽然涉及了一些原理,却没有详细的讲明。所以看完之后,却多了不少的疑问。
比如,作者在3.5节,提到了他自己涉及的集群,采用的是与Paxos不同的领导者选举算法。然而,对这种不同的算法,却只是简单的说了一句话,那就是,一旦集群中的领导者故障,其他节点,会先询问别的机器是否愿意担当领导者,如果没人愿意那么自己便成为领导者。 听起来似乎很有道理,然而仔细一想,却发现这里面有好几个问题。当领导者故障后,如果多个节点同时发起询问其他机器的请求,系统该如何处理?每台服务器收到别人的询问后,该以什么样的原则来决定是自己担当?还是谦让出去? 都没有进一步说明。而只是给出了配置和演示的例子。让看书的人一头雾水。
又比如,当集群中的领导者故障了,客户端该如何知道谁是新的领导者?也没有相应的说明,读了书中给出的源码后,才发现,原来是需要在客户端配置所有集群服务器的地址,一旦连不上领导者,就需要轮询所有的服务器。
除此之外,在降到分布式缓存的时候,作者提到了一致性哈希算法存在的一些问题,比如扩容的时候需要成倍扩容等。然后给出了自己的日期取模算法。但是作者给出的算法似乎只适用于不会过期的数据的缓存,如果数据是临时性的缓存,用作者的这种方法气死并没有什么意义,而且还多出了一个步骤。
而后面的分布式文件系统,与其说是一个分布式文件系统,倒不如说是一个FTP服务器集群。一个不考虑大文件分割存储的分布式文件系统,又能符合几分分布式文件系统的要求呢?
书中的最后几章,给人的感觉,完全像是作者对自己实现的这个分布式系统的广告和推销,大量的介绍了自己系统提供的API和接口,举出了例子该怎么去用。却完全没有涉及底层的原理,以及自己该如何去实现。
如果说,看这本书的目的真的是像作者说的“实现Hadoop”的话,恐怕读者真的是要失望了。在短短的200多页的一本书中,就想要将有关分布式系统的方方面面讲透,这几乎是一个不可能完成的任务。
当然,这本书也不是一无是处。我觉得,与其说这本书能用来实现一个“Hadoop”,还不如说这是一本适合用来初步了解分布式系统的书。通过这本书,倒是可以大概的了解所谓分布式系统的一些概念,了解分布式系统能够做什么,它的优势。并且能够了解分布式系统都有哪些部分组成。一个完整的分布式系统需要提供哪些功能。
总之,这本书并不是一个很深入的技术和原理性的书籍,更适合作为入门或者需要初步了解分布式系统的人来读。