原理讲解
1. 读、写缓存技术原理
上图所示是读缓存和写缓存的系统结构图,aSAN分为客户端和服务端两部分,客户端和服务端通过网络进行通信,读缓存位于客户端,写缓存位于服务端,客户端是跟虚拟机在一起的,而服务端则是跟数据在一起的,或者换句话说:虚拟机在哪,读缓存就在哪;副本在哪,写缓存就在哪。
之所以要把读缓存放在虚拟机所在的位置,是因为离虚拟机越近,意味着IO路径越短,延时越低,性能越高。之所以要把写缓存放到副本所在的位置,是为了数据安全,写数据的时候,数据会被同时写入到所有副本的写缓存,这样某个主机的SSD出现故障,也不会出现数据丢失的问题。
为了提供最佳的读性能,读缓存被设计成位于最靠近虚拟机的地方,读缓存缓存的数据是在物理主机内有效的,在上图中,如果VM1的运行位置从host1迁移host2,原来host1中缓存的数据就失效了,需要在host2重新缓存。如果host1关机重启,那么host1上的读缓存将被清空,因为有可能在host1关机的期间,其他主机如host2更改了数据,host1的读缓存数据已经不可信了,所以关机重启后,读缓存失效导致读性能直线下降,需要重新缓存后,性能才会恢复到原有的水平。读缓存的原理是把经常读的数据缓存起来,这样下次读的时候,读缓存模块就直接从缓存盘里面读取,这里有就有一个缓存命中率的问题,如果要读的数据已经被缓存起来了,那就命中了缓存,如果没有被缓存起来,那就是没命中缓存,需要从底层的数据盘读,所以读缓存有一个命中率的问题。
写缓存用于对写进行加速,VM写的数据交给aSAN客户端,读缓存会检查一下要写的数据是否已经被读缓存缓存起来了,如果已经被缓存起来了,那就要更新读缓存里面的数据,否则下次读的时候,就会从读缓存里面读到旧的无效数据。然后aSAN客户端会把写操作通过网络同时往所有的副本写入,上图示例中,采用2副本,写操作会同时发往2个副本的服务端,写缓存模块把数据写入到缓存盘后,就返回写入成功,后面再慢慢地把数据从缓存盘回写到数据盘上,由于写入缓存盘就直接返回写入成功了,所以写延时非常的低。
跟读缓存相比,写缓存不存在是否命中的问题,但是为了数据可靠性,会同时往所有副本写数据,需要走网络,所以对于写操作来说,网络才是瓶颈所在。
2.数据分层技术原理 分层跟读、写缓到底有什么不同的地方呢?我们可以这样来理解: 读、缓存只是把缓存盘当成一个临时的缓存空间使用,数据的真正存储位置是在数据盘; 而分层则是把 SSD 缓存盘也当成数据盘来用,数据存在缓存盘的分层空间里面后,就是数据的真正存储位置了,不存在读缓存失效的问题。 跟写缓存一样,分层模块位于aSAN服务端,分层也是基于冷热数据识别,把热数据存储在SSD分层,把冷数据存储在HDD分层。
读数据的时候,VM向aSAN客户端发出读命令,aSAN客户端通过网络把命令发送给aSAN服务端,分层模块先从缓存盘的分层空间查找要读取的数据,如果在缓存盘,则从缓存盘读取,否则从数据盘读取,如果在缓存盘的分层空间里面找到要读取的数据了,则说命中了SSD分层,否则就是没有命中,所以对于分层的读来说,也有命中率的问题。
要写数据的时候,VM向aSAN客户端发出写命令,aSAN客户端通过网络向所有副本发送写命令,aSAN服务端接收到写命令后,这个数据写到哪里呢?新产生的数据,我们就认为他是热数据,因为我们认为新产生的数据在不久的将来会 被使用到,所以这个数据会被写入SSD分层。
不断地往SSD分层写入数据,SSD分层空间尽早会用光,这时候就面临一个调度的问题,随着时间的推移,SSD分层空间不够了,SSD分层空间里面肯定有一些数据变成了冷数据,这些冷数据不应该再占用高性能的SSD空间,就把这些数据从SSD调出到HDD数据盘里面去。相反,有一些HDD里面的冷数据,在某个阶段被读的次数增多,慢慢地变成了热数据,就再把它从HDD调入到SSD里面。这就是SSD分层的冷热调度问题。 |