2.5.1 如何描述需求
在描述需求时,我们要考虑的是:如何用寥寥数语勾勒出一个系统的功能。
以GFS(Google File System,Google文件系统)为例,其需求可以被描述为:
GFS is designed to provide efficient, reliable access to data using large clusters of commodity hardware.
(GFS的设计目的是,基于商用硬件组成的大型集群,为其提供有效和可靠的数据访问机制。)
从上面这句话中我们可以得到如下几个要点。
(1)GFS是用来保存数据的。
(2)GFS用于很大的集群(Large Cluster)。
(3)GFS用于标准的商用硬件(Commodity Hardware),而不是专用的硬件。
(4)GFS提供有效的(Efficient)、可靠的(Reliable)数据访问机制。
在获得这些需求信息后,是不是就可以开始做系统设计了?并不是,我们还需要更加详细的信息,例如:
(1)这个系统可以存储的文件数量是几百万、几千万个,还是几十亿个?
(2)这个系统存储的文件的大小是如何分布的,是都为相同大小,还是分布在一个很大的范围内?是几十KB,还是几百MB、几百GB?
(3)这个系统的总存储容量,是几百GB,还是几百TB,或是几百PB?
(4)这个系统的读写能力是怎样的,包括每秒读写文件的次数、数据传输速率、读写延迟等参数。
(5)这个系统的容错能力是怎样的,计划在哪些错误场景下可以继续工作。是几台存储服务器发生故障,还是单/多个机房发生故障?
(6)这个系统在一致性方面的定位是什么样的,是强一致、弱一致,还是最终一致?
(7)这个系统对外的接口是什么样的,是通用的文件读写接口,还是特殊的接口?
……
类似这样的需求描述,还需要列出很多条才能对GFS这样的存储系统的需求做出完整和准确的刻画。其中,任何一点变化,都可能使系统的设计发生很大变化。
而且在需求描述中,需要使用精确的数字来刻画需求。对于很多指标来说,量变会导致质变。例如,总存储量从几百TB改变为几百PB,会导致设计发生重大变化。