作者:Sanjay Ghemawat
          Howard Gobioff
          Shun-Tak Leung
翻译:tinyfool

2.4 单一主服务器

单一的主服务器大大简化了我们的设计,这样主服务器可以通过全局的信息精确确定块的位置以及进行复制决定。然而,我们必须减少主服务器对数据读写的影响,避免使主服务器成为系统的瓶颈。客户端不通过主服务器读写数据。反之,客户端向主服务器询问它应该联系的块服务器。客户端短期缓存这些信息,后续的操作直接跟块服务器进行。

让我们解释下图一表示的一次简单读取的流程。首先,利用固定的块尺寸,客户端把文件名和程序指定的字节偏移转换成文件的块索引。然后,它把文件名和块索引发送给主服务器。主服务器回答相应的块句柄和副本们的位置。客户端用文件名和块索引作为键值缓存这些信息。

然后客户端发送请求到其中的有一个副本处,一般会选择最近的。这个请求指定了块的块句柄和字节范围。对同一块的更多读取不需要客户端和主服务器通讯,除非缓存的信息过期或者文件被重新打开。实际上,客户端通常在一次请求中查询多个块,而主服务器的回应也可以包含紧跟着这些请求块后面的块的信息。这些额外的信息实际上,在没有代价的前提下,避免了客户端和服务器未来的几次通讯。