2.1设计预期
在设计我们需要的文件系统时,我们用既有机会又有挑战的设计预期来指导我们的工作。前面我们提到了一些关键的信息,这里我们讲更细节的描述我们的设计预期。
- 这个系统由许多廉价易损的普通组件组成。它必须持续监视自己的状态,它必须在组件失效作为一种常态的情况下,迅速地侦测、承担并恢复那些组件失效。
- 这个系统保存一定数量的大文件。我们预期有几百万文件,尺寸通常是100MB或者以上。数GB的文件也很寻常,而且被有效的管理。小文件必须支持,但是不需要去优化。
- 负载中主要包含两种读操作:大规模的流式读取和小规模随机读取。大规模的流式读取通常一次操作就读取数百K数据,更常见的是一次性读取1MB甚至等多。同一个客户机的连续操作通常是对一个文件的某个区域进行连续读取。小规模的随机读取通常是在随机的位置读取几个KB。对性能有所要求的程序通常把小规模的读批量处理并且排序,这样就不需要对文件进行时前时后的读取,提高了对文件读取的顺序性。
- 负载中还包括许多大规模的顺序的写操作,追加数据到文件尾部。一般来说这些写操作跟大规模读的尺寸类似。数据一旦被写入,文件就几乎不会被修改了。系统对文件的随机位置写入操作是支持的,但是不必有效率。
- 系统必须高效的实现良好定义的多客户端并行追加到一个文件的语意。我们的文件经常用于"生产者-消费者"队列,或者多路文件合并。数百个生产者,一个机器一个,同时的对一个文件进行追加。用最小的同步开销实现追加的原子操作是非常重要的。文件可能稍后被读取,也可能一个消费者同步的读取文件。
- 高度可用的带宽比低延迟更加重要。大多数我们的目标程序,在高传输速率下,大块地操作数据,因为大部分单独的读写操作没有严格的响应时间要求。