Why Existing Databases (RAC) are So Breakable!
Why Existing Databases (RAC) are So Breakable!
核心观点:数据库之所以不可靠是因为磁盘不可靠。而数据库RAC可靠的前提是建立在磁盘非常可靠的基础上的。
该文认为磁盘不可靠的理由:
- 实际的每年磁盘出错率是3%,而不是大多数人认为的0.5-0.9%,两者相差6倍多;
- 磁盘出错率与磁盘类型无关,无论SCSI还是SATA,因此所谓的高端磁盘设备并不能保证一定比普通磁盘可靠更多;RAID呢,该文引用John Mitchell的观点,认为既然RAID的磁盘都是在同一个“盒子”里(它们有着相同的存储模型、有着相同的数据负载并共享同一个电源,处于相同的温度),如果其中某块磁盘因为某种原因坏了,那么其它磁盘以同样的原因坏掉的可能性也很高
- 温度越高的硬盘反而比温度硬盘出错率低。DIY的同学小心了,降温的时候最好绕开硬盘直接给CPU降温。
结论:磁盘出错是不可避免的,因此数据库的设计要针对这一点。Amazon负责S3的资深工程师Jason McHugh在他的演讲Amazon S3: Architecting For Resieliency In The Face Of Failures中也提到Amazon的Simple Storage的设计:不要试图阻止错误的发生,应该假设错误是不可避免的,然后针对这一点进行设计:容错而不是免错。
有趣的是TC的作者Mikio Hirabayashi在Is it Really Durable?一文中也有类似的结论,他在日本最大的网站之一mixi.jp工作,负责数据存储部分,该网站写的吞吐量超过 10,000 QPS,最常见的数据库当掉的原因是硬件故障(尤其是磁盘故障和RAID控制器故障)引起的,他们的解决方案是数据复制:每个数据库服务器至少有一个从数据库服务器,因此每份数据只是复制在两个地方,一个坏掉就替换为新服务器,相应的数据也复制到新服务器上。
耸人听闻的是该文“指出”:内存比磁盘要可靠
作者认为对于单个机器,内存确实是不可靠的,但是如果将数据的多个分布到一个机群中时,情况不同了。作者还引用RAM is the new disk。
作者在GigaSpaces/Cisco工作,正在为Cisco UCS做相关的实验,据说实验结果比较鼓舞人心。
其他参考资料:
http://gashero.iteye.com/blog/416720