Why Existing Databases (RAC) are So Breakable
Why Existing Databases (RAC) are So Breakable!Why Existing Databases (RAC) are So Breakable!核心观
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