停机维护时长缩短5倍,全靠这3个秘诀
《停机维护时长缩短5倍,全靠这3个秘诀》要点:
只需3步,看我们是如何把一款国内排名前3的端游停机维护时间从1.5小时优化到0.3小时. 1、背景介绍端游的停机维护是游戏的业务运维负责,定期的停机维护本身是枯燥的. 为了不那么寂寞,我们有着一颗“每次都比上一次好一点”的心.每次维护后都输出总结,总结踩过的坑,思考可以提升的点. 就这样,经过数十次的维护变更,我们把停机维护的维护时间从1.5小时优化到0.3小时.同时总结了一套提升停机维护效率的经验. 这个经验不仅仅适用端游的停机维护,同样适用手游、Web、ERP等环境的停机维护和变更. 2、停机优化(1.5小时→0.3小时)接下来将从“流程优化”和“重命名式更新方式”两个维度来解读. 2.1 流程优化以前我们游戏的停机维护时间差不多是1.5小时,后来我们对着维护的CHECKLIST,在思考:
2.1.1 剖析停机关键路径剖析原来停机期间的关键步骤,以节省停机时间为目的,将可以提前做的事情(如提前变更配置)和延后做的事情(如版本校验)脱离出停机流程. 以下是流程优化前后停机关键路径的变化 来看一个动画版的,更生动一些 可以看到之前很多在停机关键路径的步骤分离到停机前关键路径和停机后关键路径. 就是这样一个小的手术,我们来看看每个环节都节省了多少时间. 2.1.2 收益对比以下是我们梳理的每个环节节省的停机时间 总的来看,通过流程优化,我们把原来的停机维护时间从 1.5小时优化成0.5小时. 经过流程优化之后,发现停机维护还需要半小时,还能不能再快一些呢? 2.2 重命名式更新我们原来的服务器补丁更新方式是类似cp的方式,这种方式会真的复制十几 G的游戏资源文件,非常恐怖. 除了慢以外,几千台服务器并发执行时,经常有几百台因为I/0问题,无法及时响应执行结果. 2.2.1 为什么不用mv的方式呢?众所周知,在操作系统中,对目录名的修改(MOVE)只是在文件系统中改个名而已,数据块本身不会修改. 而对目录或文件的复制(COPY)会切切实实的修改对应的数据块,会耗用很大的I/O资源. 要知其所以然,所以我们要再深入一些. 2.2.1.1 Linux平台对目录的MV 和 CP的差别我们先来做一个对10G文件cp和mv的耗时测试,算了下差不多是3万倍. 为什么相差这么大呢? 这个要说说Linux的文件系统. 对于cp来说,inode和对应的data blocks都会重新创建,而mv仅在目录中修改对应的名称而已,inode不会变. (注:ls –i可以查看文件的inode,上图可以看到cp会改变inode,mv不会.) 原因是目录中保存inode和文件名的对应关系(详见Wikipedia的Inode). 于是我用组合命令展示这个对应关系的结构应该是这样的: 来看看专业文档( file system internals)中的图是怎么样的. 反正有时间,接着在展开一下.刚刚我们在查看目录时发现有. 和 .. 文件(Linux中目录也看作是文件),目录的硬链接数和这个也有关系. ls 命令的-l参数结果中有一项是硬链接数: 这个在stat中找到(详细在Wikipedia的Hard link ). 由于指向同一个文件的所有硬链接inode号是一样,我们通过实验来论证这一点. 简单看,你创建一个目录,他的硬链接数是2,在这个目录下创建1级子目录,该目录的硬链接会+1,看起来是一个目录的硬链接是一级子目录数量+2.(小声说,这个是我猜的,没找到官网说明.) 另外这个是在不允许目录创建硬链接的前提下,Wikipedia的Hard link提到现代的操作系统不允许目录创建软链接,但UNIX System V是可以的). 说完目录是inode 和 文件名的对应表后,我们再扩展1个小知识. 如何删除文件名是乱码的文件? 那我们可以找到它对应的inode号,然后用find删除他. 好吧,这里只是简单概述,大家想深入的话,可以了解Linux的文件系统. 扩展阅读: (1) debugfs恢复linux下删除文件(debugfs配合dd命令) (2) inode在内核中定义的structure (3) 硬盘的结构原理 2.2.1.2 ?Windows平台对目录的MV和CP的差别Windows平台也非常类似,以NTFS文件系统为例. NTFS文件系统中,目录的名字存储在MFT(主文件表)中的File Name Attribute (FN)里,所以在同一个文件系统(通俗的讲,就是分区,D盘、E盘)内,修改目录的名字不会进行真正数据区的变动,秒级可以完成. 说完两个平台里对目录改名在文件系统中的变化后,我们来看看在停机维护中如何利用这个特性呢. 2.2.2 停机维护前的准备操作停机维护前,把当前运行的业务目录CURRENT rsync同步到临时目录OLD,再把更新补丁覆盖到临时目录OLD,之后改名为NEW(就是明天要发布的版本目录).
(编辑:ASP站长网) |