随着数据中心网络规模扩大,应用协议也越来越复杂,使得网络设备的软件实现规模庞大。这些软件代码都是人写的,难免有考虑不周或者错误的地方,一旦程序走入错误分支就会引发问题,严重的会造成网络中断。我们经常用千行代码缺陷率来衡量一个软件质量的高低:CMM1级是11.95‰,CMM2级是5.52‰,CMM3级是2.39‰,CMM4级是0.92‰,CMM5级是0.32‰,即便是达到最高的五级,千行代码缺陷率也有0.32‰,这意味着一万行代码里至少可能会有3行是BUG,现在的网络设备操作系统基本都要上千万行,里面隐含的软件BUG数量可想而知,所以难免会出现这样那样的软件问题。发现问题当然要解决,可是数据中心业务全年365天都要无中断运行,全年中业务中断的时长直接决定了数据中心的等级水平,在解决网络设备软件BUG时,要尽量不中断业务,所以从数据中心大规模部署网络设备开始,设备厂商就在不断完善软件BUG修复的方法,下面就来详细说一说。
升级版本
倒退十年,那时还不叫数据中心,叫数据机房,由于互联网业务本身就不够发达,人们对业务的中断不敏感。这时重启下设备,断开十几分钟都是可以接受的,那时的网络能用就行,对速度和中断并不敏感,网络在人们的生活中可有可无。如果网络设备出现了问题,有了软件BUG,直接提供修改的软件版本,设备加载新的解决问题的版本,重启解决问题。人们对网络的要求从来没有像现在这样如此依赖,所以有了问题直接更换新的软件版本解决问题,是比较彻底和快捷的方式,很少有人想到用其它方式来解决问题。不过,随着网络业务的蓬勃发展,人们对网络的要求在不断提升,尤其是24小时全可在线访问的要求,这样通过重启设备去更换新版本的操作是很多数据中心客户都无法接受的,万不得已才会采用这种方法去解决软件BUG。如此,便出现了其它一些更好的解决软件BUG的方式。
加载补丁
打补丁解决现有网络设备软件版本的问题是目前最为通用的做法,对于正在运行的网络设备,直接打一个热补丁,将有问题的程序函数用新的函数替换掉,从而解决问题。这种方式不仅可以解决软件存在的BUG,又不影响设备运行,这种做法广为接受。不过,补丁方式不能解决所有的问题,是有条件的。首先,补丁解决的问题是有限的,如果补丁修改的函数数量过多,会导致补丁规模过大,无法制作或者会引入更多问题;其次,有些软件BUG涉及到软件的初始化或者是宏定义的函数,这些地方必须要重启设备,软件重新初始化才能调到,这样无法通过热补丁的方式解决问题,只能通过冷补丁,也就是打上补丁还需要将设备重启,然后补丁才能生效,冷补丁方式虽然能解决问题,但还是要重启设备;第三,补丁增加了系统风险,补丁是通过很多钩子函数,在原有软件版本里直接调用补丁里的新函数,如果加载的补丁过多,补丁摞补丁,就要考虑补丁之间的影响,以及对软件版本的影响。当一个软件版本的补丁数量超过十个时,就不宜再增加了,太多反而会降低整个设备的运行可靠性。
不中断业务升级版本
显然,补丁不是万能的,很多软件BUG并不能通过补丁全搞定。这时还是要想如何才能升级版本的时候,能不中断业务,于是就有了不中断业务升级技术。这种升级软件版本方式是有条件的,就是设备必须是堆叠环境或者主备环境,运行软件版本的设备业务有备份,在升级整体设备的部分板卡或功能模块时,业务切换到其它部分,保持继续运行。当完成版本升级后,再将业务切回,然后再升级备用板卡或功能模块,最终完成整体设备的软件版本升级。另外,解决问题的软件版本和原有版本差异不能太大,否则两个版本就无法做兼容升级,不兼容版本的升级依然要中断业务,所以解决问题的版本和原有版本差异性不能太大。
自动化升级补丁
现在的补丁或者是版本都需要人工去操作,像运营商的庞大网络,一个城域网就可能有上千台设备,要一一进行补丁升级,工作量巨大,且工作内容重复,枯燥乏味。我们平时用的PC操作系统,可以看到经常提示加载补丁,只要PC连接互联网,就可以自动给PC下载,然后在重启PC时,自动加载补丁,解决原有系统的软件BUG。这种方式在数据中心网络中也可以效仿,但有所不同。我们用的PC在重启的时候就加载补丁,而数据中心网络则不能随便重启,所以补丁加载的时候就会自动打上,自动生效。在数据中心里部署一个服务器,如果有网络设备补丁需要打,就将补丁放在服务器上,服务器会自动同步所有网络里的设备,然后判断是否符合加载补丁要求,如果没有问题则自动将补丁传给设备,设备接受到这个补丁后,完成自动加载,如此可以大大节省打补丁的工作量,这种方式应该是未来我们所追求的方式。同时,未来的网络设备要将软件版本内部的各个功能模块做隔离,相互尽量没有关联和影响,这样一个功能模块有问题,只改这个功能模块基本靠补丁就能搞定,这个补丁甚至可以是对整个功能模块的修改。这样加载这个补丁时,可以对其它功能模块的业务不造成任何影响,只有这个功能模块可能需要重新初始化一下,这样对业务的影响面就小得多,甚至微乎其微。
数据中心网络设备软件也在一直找寻更好的解决软件BUG的方法,相信方法会越来越好,在不影响业务的前提下,将网络设备的软件BUG自动修复。
作者:佚名
来源:51CTO