因为TFS是采用星型的设计架构的,通过一个Nameserver和多个Dataserver来对外进行服务,并且Nameserver中的元数据均是存放在内存中,因此如何减少Nameserver中内存的占用量,以及如何提高Nameserver的服务能力,减少单点的压力便成了TFS进行优化的一个重要方向。
对于读文件操作,客户端首先将TFS文件名进行解析(其实这一步也是为了减轻Ns的压力,将文件名的解析工作由客户端来做),拿到Blockid和Fileid,通过Blockid向Ns进行请求,拿到该Block对应的Ds列表,然后再和Ds进行交互读文件。事实上,针对同一个Block进行多次读操作,如果有缓存存在,那么就不必要每次在读真正数据之前都和Ns进行交互了,这样就可以减轻Ns很大一部分压力了。所以,我们针对这一方面的优化做了本地缓存和远程缓存(均设置了开关),远程缓存采用的是淘宝另一个KV分布式存储产品Tair。因此,针对存储产品而言,前端增加缓存往往能带来一定的优化,而且效果也是显而易见的。