什么促使了分而治之?
一篇清华大学的硕士论文,论述了一种在存储集群环境中,利用独立日志磁盘来同步磁盘数据的技术。虽然仅仅只是分而治之的一个特例,但我们依然可以看看,存储集群的环境中,分而治之是如何发挥作用的。
如我们所知:日志是用来保证文件系统一致性的普遍利用的技术,比如数据库这种必须保证数据一致性的环境,其原理就是IO操作数据先写入日志,当日志写完后即告成功,然后再从日志中将数据异步的后台转移到数据区磁盘空间。
换句话说,日志提供了一个磁盘IO缓冲区,这个缓冲区虽然提高不了IO性能(因为是磁盘IO不是RAMIO),但是他极大的保证了数据一致性,相比用没有掉电保护的RAM来做缓冲区的做法,这种方式更为廉价,但性能很低。有了日志缓冲区,即便突然掉电,日志仍然保存在磁盘上,可以下次通电的时候从日志将数据恢复到数据区。
但是保障了可靠性,就要牺牲性能,由于日志写到磁盘上,造成了IO的瓶颈,虽然前端数据库实例可以并发,但是写日志,仍然是串行写入,而且还必须面对磁盘的IO瓶颈。要提高性能,就要提高成本,比如,不用磁盘而采用nvram来保存日志数据,但显然这样成本太高。
而清华的这个fastsync日志记录系统,其基本原理是这样的:即利用单独的日志记录盘,而不是集成在数据区RAID Group中分出的LUN来记录日志,为什么这么做呢?因为他用了一种特殊的算法,即每个磁道只记录一条到3条日志,而且,通过预测磁头所处的位置的算法,在当前磁头所处的磁道处,不用寻道,就在当前位置进行写操作,当前磁道写一条或者3条日志,然后切换到下一磁道,继续写。
而他参考的前人一篇论文,那篇论文是每个磁道只写一个日志,然后换道,这种一对一的方法,对吞吐量小的IO比较有效,但是对大量快速到来的IO,换道将是一个耗时的操作,所以fastsync做了一些改进,即通过实验,发现每磁道写3条日志,比较适合快速的,大块的IO环境,所以fastsync可以根据IO速度和大小来自动调整写磁道策略。
通过实验,发现这种架构比传统方式快了5倍。而且,对于现在的盘阵系统,如果追求高性能,可以把cache设置为write back,这样同样保证了高I/O速率,而且cache也有电池保护,所以fastsync要想打赢,还有很多工作要做,不过对于追求性价比的用户,fastsync分而治之,将数据库日志记录空间独立出来也不妨是个选择。因为fastsync实现机制涉及到了底层的改变,而且linux没有提供相应的接口来获取磁头当前位置的信息,所以需要重新编译linux内核。
以上只是存储集群领域中独立数据库日志系统的一个特例,我们再来看一下LB集群,将用户的请求,按照一定策略轮询重定向到后端的多台服务器上,实现负载均衡,这也是分的思想。而相关的软件实现方式比如linux下的LVS,硬件产品比如F5,radware,甚至普通的cisco路由器也可以通过NAT来完成简单的轮询。
对于应用层面的用户来说,我们听到众多关于虚拟化、关于存储池的概念,似乎更多地强调了整合的意义。很显然,对于用户来说,后台的精细化和专业化已经不是关注的重点,任何硬件供应商都试图掩盖底层复杂的体系结构,为用户提供清晰简单的界面。而在清晰简单的界面之下,后台的硬件体系,随着功能的日趋完善和复杂,正逐步朝向“分而治之”的方向发展。由通用的变成专属的,由整合的变成独立的,当一些专属功能的硬件部分独立出来后,所提供的运算性能和效率也随之产生了质的飞跃。
利用1万多台PC组成了廉价的分布式集群,是这个思想最成功的典范!理论每秒浮点运算数达到100T!是什么促使了分而治之?就是一个速度,一个性能。
作者联系方式:myprotein@sina.com