《停機(jī)維護(hù)時(shí)長(zhǎng)縮短5倍,全靠這3個(gè)秘訣》要點(diǎn):
本文介紹了停機(jī)維護(hù)時(shí)長(zhǎng)縮短5倍,全靠這3個(gè)秘訣,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
作者:朱志武
騰訊游戲高級(jí)運(yùn)維工程師,騰訊學(xué)院講師.2013年入職騰訊,專注游戲的運(yùn)維工作,關(guān)注用戶體驗(yàn)以及對(duì)運(yùn)維工作的知識(shí)沉淀.
只需3步,看我們是如何把一款國(guó)內(nèi)排名前3的端游停機(jī)維護(hù)時(shí)間從1.5小時(shí)優(yōu)化到0.3小時(shí).
端游的停機(jī)維護(hù)是游戲的業(yè)務(wù)運(yùn)維負(fù)責(zé),定期的停機(jī)維護(hù)本身是枯燥的.
為了不那么寂寞,我們有著一顆“每次都比上一次好一點(diǎn)”的心.每次維護(hù)后都輸出總結(jié),總結(jié)踩過(guò)的坑,思考可以提升的點(diǎn).
就這樣,經(jīng)過(guò)數(shù)十次的維護(hù)變更,我們把停機(jī)維護(hù)的維護(hù)時(shí)間從1.5小時(shí)優(yōu)化到0.3小時(shí).同時(shí)總結(jié)了一套提升停機(jī)維護(hù)效率的經(jīng)驗(yàn).
這個(gè)經(jīng)驗(yàn)不僅僅適用端游的停機(jī)維護(hù),同樣適用手游、Web、ERP等環(huán)境的停機(jī)維護(hù)和變更.
接下來(lái)將從“流程優(yōu)化”和“重命名式更新方式”兩個(gè)維度來(lái)解讀.
以前我們游戲的停機(jī)維護(hù)時(shí)間差不多是1.5小時(shí),后來(lái)我們對(duì)著維護(hù)的CHECKLIST,在思考:
Checklist是停機(jī)維護(hù)前梳理的本次停機(jī)維護(hù)操作的事項(xiàng),執(zhí)行時(shí)嚴(yán)格按照次序執(zhí)行,最簡(jiǎn)單的Checklist是基于EXCEL,好一點(diǎn)是把Checklist線上化,再好一點(diǎn)是有一套自由編排的停機(jī)維護(hù)系統(tǒng),流程走到那一步時(shí)自動(dòng)執(zhí)行對(duì)應(yīng)的操作.
剖析原來(lái)停機(jī)期間的關(guān)鍵步驟,以節(jié)省停機(jī)時(shí)間為目的,將可以提前做的事情(如提前變更配置)和延后做的事情(如版本校驗(yàn))脫離出停機(jī)流程.
以下是流程優(yōu)化前后停機(jī)關(guān)鍵路徑的變化
來(lái)看一個(gè)動(dòng)畫版的,更生動(dòng)一些
可以看到之前很多在停機(jī)關(guān)鍵路徑的步驟分離到停機(jī)前關(guān)鍵路徑和停機(jī)后關(guān)鍵路徑.
就是這樣一個(gè)小的手術(shù),我們來(lái)看看每個(gè)環(huán)節(jié)都節(jié)省了多少時(shí)間.
以下是我們梳理的每個(gè)環(huán)節(jié)節(jié)省的停機(jī)時(shí)間
總的來(lái)看,通過(guò)流程優(yōu)化,我們把原來(lái)的停機(jī)維護(hù)時(shí)間從 1.5小時(shí)優(yōu)化成0.5小時(shí).
經(jīng)過(guò)流程優(yōu)化之后,發(fā)現(xiàn)停機(jī)維護(hù)還需要半小時(shí),還能不能再快一些呢?
我們?cè)瓉?lái)的服務(wù)器補(bǔ)丁更新方式是類似cp的方式,這種方式會(huì)真的復(fù)制十幾 G的游戲資源文件,非常恐怖.
除了慢以外,幾千臺(tái)服務(wù)器并發(fā)執(zhí)行時(shí),經(jīng)常有幾百臺(tái)因?yàn)镮/0問(wèn)題,無(wú)法及時(shí)響應(yīng)執(zhí)行結(jié)果.
眾所周知,在操作系統(tǒng)中,對(duì)目錄名的修改(MOVE)只是在文件系統(tǒng)中改個(gè)名而已,數(shù)據(jù)塊本身不會(huì)修改.
而對(duì)目錄或文件的復(fù)制(COPY)會(huì)切切實(shí)實(shí)的修改對(duì)應(yīng)的數(shù)據(jù)塊,會(huì)耗用很大的I/O資源.
要知其所以然,所以我們要再深入一些.
我們先來(lái)做一個(gè)對(duì)10G文件cp和mv的耗時(shí)測(cè)試,算了下差不多是3萬(wàn)倍.
為什么相差這么大呢? 這個(gè)要說(shuō)說(shuō)Linux的文件系統(tǒng).
對(duì)于cp來(lái)說(shuō),inode和對(duì)應(yīng)的data blocks都會(huì)重新創(chuàng)建,而mv僅在目錄中修改對(duì)應(yīng)的名稱而已,inode不會(huì)變.
(注:ls –i可以查看文件的inode,上圖可以看到cp會(huì)改變inode,mv不會(huì).)
原因是目錄中保存inode和文件名的對(duì)應(yīng)關(guān)系(詳見Wikipedia的Inode).
于是我用組合命令展示這個(gè)對(duì)應(yīng)關(guān)系的結(jié)構(gòu)應(yīng)該是這樣的:
來(lái)看看專業(yè)文檔( file system internals)中的圖是怎么樣的.
反正有時(shí)間,接著在展開一下.剛剛我們?cè)诓榭茨夸洉r(shí)發(fā)現(xiàn)有. 和 .. 文件(Linux中目錄也看作是文件),目錄的硬鏈接數(shù)和這個(gè)也有關(guān)系.
ls 命令的-l參數(shù)結(jié)果中有一項(xiàng)是硬鏈接數(shù):
這個(gè)在stat中找到(詳細(xì)在Wikipedia的Hard link ).
由于指向同一個(gè)文件的所有硬鏈接inode號(hào)是一樣,我們通過(guò)實(shí)驗(yàn)來(lái)論證這一點(diǎn).
簡(jiǎn)單看,你創(chuàng)建一個(gè)目錄,他的硬鏈接數(shù)是2,在這個(gè)目錄下創(chuàng)建1級(jí)子目錄,該目錄的硬鏈接會(huì)+1 ,看起來(lái)是一個(gè)目錄的硬鏈接是一級(jí)子目錄數(shù)量+2.(小聲說(shuō),這個(gè)是我猜的,沒(méi)找到官網(wǎng)說(shuō)明.)
另外這個(gè)是在不允許目錄創(chuàng)建硬鏈接的前提下,Wikipedia的Hard link提到現(xiàn)代的操作系統(tǒng)不允許目錄創(chuàng)建軟鏈接,但UNIX System V是可以的).
說(shuō)完目錄是inode 和 文件名的對(duì)應(yīng)表后,我們?cè)贁U(kuò)展1個(gè)小知識(shí).
如何刪除文件名是亂碼的文件?
那我們可以找到它對(duì)應(yīng)的inode號(hào),然后用find刪除他.
好吧,這里只是簡(jiǎn)單概述,大家想深入的話,可以了解Linux的文件系統(tǒng).
擴(kuò)展閱讀:
(1) debugfs恢復(fù)linux下刪除文件(debugfs配合dd命令)
(2) inode在內(nèi)核中定義的structure
(3) 硬盤的結(jié)構(gòu)原理
Windows平臺(tái)也非常類似,以NTFS文件系統(tǒng)為例.
NTFS文件系統(tǒng)中,目錄的名字存儲(chǔ)在MFT(主文件表)中的File Name Attribute (FN)里,所以在同一個(gè)文件系統(tǒng)(通俗的講,就是分區(qū),D盤、E盤)內(nèi),修改目錄的名字不會(huì)進(jìn)行真正數(shù)據(jù)區(qū)的變動(dòng),秒級(jí)可以完成.
說(shuō)完兩個(gè)平臺(tái)里對(duì)目錄改名在文件系統(tǒng)中的變化后,我們來(lái)看看在停機(jī)維護(hù)中如何利用這個(gè)特性呢.
停機(jī)維護(hù)前,把當(dāng)前運(yùn)行的業(yè)務(wù)目錄CURRENT rsync同步到臨時(shí)目錄OLD,再把更新補(bǔ)丁覆蓋到臨時(shí)目錄OLD,之后改名為NEW(就是明天要發(fā)布的版本目錄).
停機(jī)維護(hù)時(shí),只需一個(gè)重命名的操作.
把業(yè)務(wù)目錄CURRENT改名為OLD,NEW改為CURRENT.
So easy!
動(dòng)畫版的,可能更容易理解.
停機(jī)維護(hù)時(shí)單臺(tái)服務(wù)端補(bǔ)丁的更新只需要1秒,原來(lái)可是需要20分鐘.
由于幾千臺(tái)服務(wù)器更新存在3分鐘左右的隊(duì)列時(shí)間,所以實(shí)際的服務(wù)端補(bǔ)丁更新時(shí)間從25分鐘降到了3分鐘,效率提升了8倍.
漂亮的搞定問(wèn)題后,我們需要靜下來(lái)思考,是否能有方法論可以沉淀.
流程優(yōu)化,我們?cè)谟螒蜻\(yùn)營(yíng)規(guī)范里要說(shuō)明,讓業(yè)務(wù)運(yùn)維詳盡分析你的停機(jī)維護(hù)CHECKLIST,去思考這些步驟為什么一定要在停機(jī)時(shí)完成,能否變通的把他放到停機(jī)前完成,又或是停機(jī)后.
“重命名式更新”,我們?cè)谟螒蜻\(yùn)營(yíng)規(guī)范里要說(shuō)明,你的更新方式是否是最優(yōu)的,耗時(shí)最少的.能否在更新前就已經(jīng)準(zhǔn)備好.
我們不能一味的只是完成停機(jī)維護(hù)操作本身,否則難以體現(xiàn)運(yùn)維的價(jià)值.我們不要做搬運(yùn)工.
停機(jī)優(yōu)化,通過(guò)“流程優(yōu)化”和“重命名式更新”,我們把停機(jī)維護(hù)的時(shí)間從1.5小時(shí)蛻變成0.3小時(shí).相信你也可以,趕緊行動(dòng)吧!
文章出處:高效運(yùn)維
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/4477.html