本文内容非商业用途可无需授权转载,请务必注明作者、微博ID:唐僧_huangliang,以便更好地与读者互动。
关于《炉石传说》数据库故障和回档的消息,我想不少同行朋友都看到了,这两天也有几位DBA、运维专家从技术角度写了不错的分析文章。
记得去年5月,我也写过一篇《Salesforce曝数据丢失原因:存储阵列固件bug?》,以数据库外行的身份简单做了下分析。当时是Oracle数据库+传统集中式存储阵列的配置,而本次业内朋友多猜测炉石传说用的是MySQL,那么数据更多的可能是 在服务器本地RAID上。
由于官方声明中提到了断电,我看叶金荣老师的文章中提到这样一种假设——“有可能还在使用老式的锂电池BBU。所以断电后很容易导致阵列卡cache中的数据丢失,数据库也跟着损坏,以前没少才踩这个坑…”
这让我联想起前几天冬瓜哥发的一篇《为什么Raid卡电池被换为超级电容》,其中有这样一段:
“早期的时候,在某大型互联网公司曾经出现过因为Raid卡固件bug导致的大面积业务瘫痪。当时场景是这样的:由于Raid卡固件bug,到了某个日期时,突然报告电池故障,其实电池并没有故障。随后Raid卡自动进入WriteThrough模式,导致数千台服务器写性能骤降,前端业务直接瘫痪…”
那么,使用BBU电池来做RAID卡缓存掉电保护,真的有这些缺点吗?叶老师和冬瓜哥所说的问题,现在的产品有没有针对性设计考虑?
人说电容好,为啥还有RAID 卡选择电池方案?
关于电池还是电容这个话题,从2009年撰写《永不消逝的缓存数据:Adaptec 5445Z RAID卡评测》时我就开始关注了。

请注意上面照片中的电容包在机箱中的固定方式——当年我在一台工作站上DIY的。不得不说,Adaptec这个品牌在我心中的地位是无法抹去的。当年这款5系列RAID卡使用的主控还是Intel IOP348,在被PMC收购之前。

就在那篇文章中我还曾总结过上面电容+Flash缓存保护相对于传统BBU方案的2条优势,其中引用的数字来自Adaptec ZMCP技术资料,因此大致是站在对电容有利的角度。今天我们就来看看反面观点。
这两年也曾有朋友问我某品牌服务器为什么没有电容保护的RAID卡,为此我找到一份2012年6月的资料《A Comparison Between Li Ion Battery and SupercapTechnologies》(Dell技术白皮书)。
我们知道当前Dell PowerEdge 13G服务器上使用的12Gb SAS RAID是PERC9系列,而这份资料是围绕上一代的PERC8来讲的。
首先,做为现代化的RAID卡,BBU方案也带有backup to Flash(备份到闪存)的设计。BBU供电时间有个1-2分钟足够,对电池实际电量的要求大幅降低,也不用再担心供电恢复时间长而导致写缓存中数据丢失了。
在同等条件下,选择锂离子电池还是超级电容,在服务器设计时都有哪些因素要考虑呢?
-支持新风(Fresh Air)数据中心的散热配置;
-没有性能影响的免维护;
-容量随时间下降要在最恶劣的条件下支持3年保证;(5年或更长如何?)
-物理尺寸和在服务器中的位置,影响服务器开发团队能够达到的最大内存和IO密度。(如刀片/1U机器上的RAID卡模块尺寸)
充放电周期
根据常识,超级电容比锂离子电池支持更大数量的充放电周期。而它们只是用于RAID卡掉电保护的应急电源,平时不需要频繁充放电,所以这一点的影响不明显。
电量密度和物理尺寸
标准超级电容能做到3-5Wh/kg,而锂离子电芯的电量密度则达到100-250Wh/kg,同等重量下后者是前者的30-50倍。由于不同的电量密度,加上较低的最大输出电压,一个超级电容包需要多个电容串行或者并行连接,这个增加了物理尺寸和设计复杂性。
降级和寿命估算
我们知道超级电容和锂离子电池在60-65℃高温下都会加速老化。一般来说,每升高10摄氏度,电容生命周期的缩短速度是锂电池的2倍。

上面图表中的PERC8电池寿命估算,实线为实测而虚线为估算,标星号的虚线以上代表理想工作状况。
从机箱前端进风口到后端(服务器RAID卡位置),我们一般预期环境温度上升10-15℃。那么绿线(40℃)描绘了一个典型的数据中心的机房温度——保持在25-30℃。在这种情况下,PERC8的RAID卡的电池电量在3年后还能保持大约78%的水平,个人感觉实际使用5年或以上应该ok。
在冷却装置减少的数据中心,极限条件下服务器进风温度可能短时达到45℃,此时电池体验到的的温度会达到55℃或者更高。此时PERC8 RAID卡设计支持新风部署,并能够保证3年的电池寿命。在常规部署中,这种高温能力在空调故障或者其它异常事件(如出风口堵塞)中给用户提供了更长的应变时间,以降低风险。
注:Dell FreshAir新风2.0标准可持续耐受40°C (104°F)的进气,耐受最高45 °C (113 °F)的时间长达每年90个小时,建议连续工作不超过1小时。
故障点比较
举例:设计目标为60秒的后备电源到一个RAID卡子系统,来完成数据缓存备份操作到非易失性闪存。
持久时间:60秒
平均电流:750mA
最小放电电压:3V

通过计算,达到上述条件需要3组两两串联的20F 2.7V电容并连使用,总共的故障点达到了6个。

实际情况似乎要好一些。以实际产品为例,2009年的Adaptec 5445Z(512MB缓存)使用了两个2.5V 33F超级电容,串联容量为16.5F;而到了2012年1GB缓存的Adaptec 71605 6Gb SAS RAID卡,两个电容提升为上图中的2.7V 60F(等效于5.4V 30F),估计是因为要备份的数据量增加了。相比之下PERC9具备2GB Cache容量的型号,而下一代RAID卡上出现4GB DRAM也不奇怪…
PERC RAID 卡在电池方面的改进
1 、透明学习周期(TransparentLearn Cycles,不是闪存那个TLC)
这个道理和手机等设备的锂离子电池差不多。为了充分激活容量并保证寿命,锂电池需要定期进行充放电,朋友们在十几年前可能也像我一样听到过类似的建议——手机前3次必须充满,并且尽量减少在还有一定电量时充电。而后来厂商们不怎么提这些注意事项了,不完全充电并不会给充放电循环周期带来明显的影响。这应该与电池(含充电)技术的发展有关。
在本文开头冬瓜哥提到的那个bug,估计就是出在RAID卡定期执行电池充放电这个特性上。早期的RAID卡执行的是完整充放电,如果按照默认保证数据一致性的设定“Write-Through with bad BBU”,会有一段的时间写缓存被禁用的情况,这期间RAID卡写性能降低。而Dell从PERC8开始,TransparentLearn Cycle执行的是部分放电,不会影响到Write-Back写策略。同时,该技术在后台运行对用户完全透明,不需要计划或者关注学习周期的运行。总之就是不影响性能且免维护。
2 、整合到RAID 卡
由于有备份到闪存的设计,电芯的尺寸较小,电池包直接集成到RAID控制卡上。这意味着无需单独固定,没有复杂的连线方案和设计中去掉线缆。

集成锂电池单元的Dell H730(P) mini板载12Gb SAS RAID卡。这种专用接口的RAID卡模块可以降低成本,并节约服务器的PCIe扩展槽位。如果把锂电池换成电容的话,估计尺寸会大不少。
3 、电池质保3 年
从PERC8 RAID卡开始电池包的保修从1年提高到3年。考虑到电池备份方案较高的裕量,该设计预期在超过3年后也能运行良好(具体用户的年限取决于环境温度等)。
从RAID 卡到存储系统
在本文讨论的基础上再延伸一点,去年的《存储峰会随笔:写缓存掉电保护那点事》中我还曾写过:
“最终产品用电池还是电容?提供的电量是多大?主要看2个因素:
1、要写入闪存的内存容量是多少,主要涉及到内存条数和供电时间;
2、除了内存和Flash之外,写入过程还需要给哪些组件供电,比如单纯用FPGA实现,或者要保持CPU的内存控制器工作;
3、这里我再补充个第三条吧。虽然现在基本都将数据备份到闪存了,但还是有人用锂电池。除了电量富余之外,还可以在一段时间内保持内存中的数据,以便再次通电后减少启动恢复的时间。”
总结:电池还要为数据库损坏背锅吗?
综上所述,站在今天技术的角度,如果选择一款合适的带有BBU电池保护RAID卡的服务器,应该基本可以达到与超级电容一样的效果。大家没必要为此而纠结吧?
参考资料
《A Comparison Between Li Ion Battery and Supercap Technologies》
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。进一步交流技术,可以加我的QQ/微信:490834312。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)
尊重知识,转载时请保留全文。感谢您的阅读和支持!《企业存储技术》微信公众号:huangliang_storage
原文链接:http://mp.weixin.qq.com/s?__biz=MzAwODExNjI3NA==&mid=2649775324&idx=1&sn=42abf6a91bf5e39932587cdff15d9d6a&chksm=83773d81b400b4974fe8b447c1d33c9655c49308edaaca45f203aa4d921381a859a2a752c486#rd