知識(shí)
互聯(lián)網(wǎng)時(shí)代,知識(shí)是一個(gè)特別簡(jiǎn)單的問題?;ヂ?lián)網(wǎng)就是一個(gè)非常有效的知識(shí)存儲(chǔ)系統(tǒng),對(duì)很多問題而言,“我來為你 Google-下"都是高效且往往也是高產(chǎn)的回答。關(guān)于操作Web基礎(chǔ)結(jié)構(gòu)的幾乎你想知道(或不想知道)的任何事情,你猜對(duì)了,都在Web上。
把自己限制在Web上查找信息,喔喔,那就局限了。在這個(gè)過程中,盡管感覺不同,可你并非獨(dú)自一人。你有同伴,如同你需要他們一樣,他們也同樣需要你。用戶組(各種各樣)遍及全球,這可是分享知識(shí)的絕佳場(chǎng)所。
要是你正讀到這里的話,你肯定早已經(jīng)知道書本對(duì)于獲取知識(shí)的價(jià)值了,所有資深的Web運(yùn)維工程師的一個(gè)共同點(diǎn)是都擁有一個(gè)相當(dāng)規(guī)模的書架。試著在你的組織內(nèi)部成立一個(gè)圖書俱樂部,如果你的組織太小,那就在本地用戶組里問問,看有沒有同道者。
互聯(lián)網(wǎng)行業(yè)的一個(gè)獨(dú)特之處就是幾乎所有東西都是公開的,事實(shí)上,有專有權(quán)的東西也是極少的,而更為獨(dú)特的是,幾乎所有規(guī)范文本都是免費(fèi)的。互聯(lián)網(wǎng)是怎么工作的?交換這里有IE的規(guī)范說明交換的原理;IP:這里有RFC791;TCP:RFC793;HTTP:RFC2616。你可以讀讀這些規(guī)范文本,從而對(duì)互聯(lián)網(wǎng)的工作原理有一個(gè)透徹的理解。這些協(xié)議規(guī)定了網(wǎng)絡(luò)服務(wù)的規(guī)則,你對(duì)這些協(xié)議的理解越深,你的決策就會(huì)越有水平。但不能就此止步!TCP可能是在RFC793中描述的,但TCP的各種細(xì)節(jié)、擴(kuò)展以及后來的“發(fā)展”都是在RFC1323、2001、2018、2581等文本中描述的,所以,還需要進(jìn)一步深入研究?;蛟S研究一下TCP是從哪里來的,也是值得的:請(qǐng)看RFC761。
讓我們?cè)賮砜纯蠢碚撆c實(shí)踐的難解之謎。TCP的RFC就是理論,每個(gè)操作系統(tǒng)中實(shí)現(xiàn)TCP棧的代碼就是實(shí)踐。理論與實(shí)踐的輝煌撞擊(glorious collision)就是不同TCP實(shí)現(xiàn)之間互操作性(或互不操作性)的微妙之處,而由此產(chǎn)生的爆炸就是慢速的下載,掛起的會(huì)話,以及沮喪的用戶。
在你走在從學(xué)徒到師傅的路途中,盡可能多地占有信息是你的職責(zé),這樣你的大腦才能將那些細(xì)微之處進(jìn)行排序、過濾、關(guān)聯(lián),使其成為一幅簡(jiǎn)明、精確的圖畫,從而有助于你的決策一一不管是長(zhǎng)期的架構(gòu)設(shè)計(jì)的關(guān)鍵決策,還是臨時(shí)的排除故障的決策。
工具
工具,在我的經(jīng)驗(yàn)里,是計(jì)算史上持續(xù)時(shí)間最長(zhǎng)、言辭最激烈的爭(zhēng)論之 對(duì)Emacs、Subversion對(duì)Git、Java對(duì)PHP一從不同陣營(yíng)的爭(zhēng)論開始,迅速地演化為愚蠢的門派之戰(zhàn)。
簡(jiǎn)單的事實(shí)是,雖然這些工具各有優(yōu)缺點(diǎn),然而人們使用這些工具卻都取得了成功。為什么人們要使用所有這些不同的工具呢?為什么我們還要制造更多的工具呢?當(dāng)ThomasCarlyle和 Benjamin Franklin說“人類是使用工具的動(dòng)物”和“人類是制造工具的動(dòng)物”時(shí),我認(rèn)為他們道出了人類本性中某種重要的東西。因?yàn)橹圃炫c使用工具是我們的本性那為什么我們還要進(jìn)行無(wú)謂的爭(zhēng)論呢?雖然 Thoreau/在某些問問題上很尖刻,但他的評(píng)論“人類已經(jīng)成為他們的工具了”,我覺得在現(xiàn)代語(yǔ)境下,也是同樣準(zhǔn)確的。
這個(gè)簡(jiǎn)單的事實(shí),在Emerson那里得到了最好的表達(dá):“所有的工具和機(jī)器歸根到底都只是人類肢體和感覺器官的延長(zhǎng)。”這很好地道出了那個(gè)古老的格言:師傅不是用工具煉成的。在互聯(lián)網(wǎng)應(yīng)用的環(huán)境中,你會(huì)看得更清楚,五花八門的語(yǔ)言、平臺(tái)、技術(shù)都能夠成功地組合在一起,將這些成功地構(gòu)建為一個(gè)架構(gòu)的,不是Java或PHP,而是設(shè)計(jì)與實(shí)現(xiàn)它的工程師一一那些師傅們。
工程上的一個(gè)真理是,不管在用的工具是什么,要了解你的工具,這是在這個(gè)行業(yè)登堂入室的前提。你的工具必須成為你的肢體和感覺器官的延長(zhǎng)。對(duì)于工程師和非工程師都同樣深入了解,不要僅僅為了一張證書。你必須了解工具的效果,以及與環(huán)境的交互能力 清楚的是,事情發(fā)生時(shí),再抱著本工具說明書來看,則無(wú)異于遠(yuǎn)水救近火。對(duì)你的工具要句話,必須要實(shí)用。
運(yùn)維工程師的工具箱中的一個(gè)強(qiáng)有力的工具,就是系統(tǒng)調(diào)用跟蹤器(system call tracer),系統(tǒng)不同,這個(gè)工具也可能稍有差別。Solaris的是truss,Linux的是strace,F(xiàn)REEBSD的是
ktrace,而Mac OS X本來是ktrace,可后來?yè)Q成了用處不大的 truss系統(tǒng)調(diào)用跟蹤器就是一個(gè)窺視孔,透過這個(gè)孔,你可以看到操作系統(tǒng)在用戶空間和內(nèi)核空間的交互作用,換句話說,如果不是計(jì)算密集的操作,這個(gè)工具能夠告訴你應(yīng)用程序正在請(qǐng)求什么,滿足這個(gè)請(qǐng)求花了多長(zhǎng)時(shí)間。
在Solaris、Opensolaris、 FREEBSD、Mac OS X,以及其他一些平臺(tái)中,Dtrace具占有獨(dú)特的地位。但Dtrace卻應(yīng)該在這里提一下。Dtrace在系統(tǒng)可觀測(cè)性(system observability)方面是一個(gè)巨大的飛躍,有經(jīng)驗(yàn)的工程師通過這個(gè)工具,可以獲得對(duì)系統(tǒng)更為深人的理解,這在以前是不可能做到的。然而, Dtrace就像神諭一樣玄妙深?yuàn)W,一方面是其深邃的洞察力,另一方面就是答案的質(zhì)量取決于問題的質(zhì)量。從另一方面來說,系統(tǒng)調(diào)用追蹤器的預(yù)言就像雪崩一樣洶涌而來很容易引你上鉤,但要在大量的輸出信息中找到所需要的東西,卻是一個(gè)真正的挑戰(zhàn)。
我們?cè)趺凑務(wù)撈鹧┍篮蜕裼鍋砹?支撐Web的架構(gòu)沒有固定的形態(tài),一般也都是異質(zhì)的環(huán)境,從這點(diǎn)來看,這倒是一個(gè)恰當(dāng)當(dāng)?shù)谋扔?。使?nbsp;strace探測(cè)你的Web服務(wù)器正在做什么肯定非常令人興查(而且不用花太多時(shí)間,一般也都能做些優(yōu)化)。但發(fā)生問題時(shí),除非是非常有經(jīng)驗(yàn)的工程師,你要是第一次查看那些輸出,則對(duì)你基本上沒有價(jià)值,事實(shí)上,卻反而浪費(fèi)你大量的時(shí)間與精力。問題在于,這是一件需要經(jīng)驗(yàn)才能對(duì)付的事情,而你只是個(gè)新手。在發(fā)生“問題”時(shí),從這樣的工具中查看輸出,試圖找出不尋常的模式,是符合邏輯的。很清楚,你如果在正常操作模式下都不能使用探測(cè)工具的話,則比較的基礎(chǔ)也就不存在了。從而所有輸出模式都是不尋常的。那些看起來與題有關(guān)的模式,其實(shí)并不是,這種情況經(jīng)常碰到,導(dǎo)致在這上面浪費(fèi)了大量時(shí)間。
傳播關(guān)于工具的爭(zhēng)論往往是重要的,這樣你就能夠針對(duì)工具對(duì)問題的適用性進(jìn)行選擇,而不會(huì)僅限于自己的個(gè)人喜好。 FREEBSD項(xiàng)目是一個(gè)極好的例子,它的發(fā)布管理絕對(duì)是一流的,使用的工具卻是被大多數(shù)人認(rèn)為完全過時(shí)的版本控制系統(tǒng)(CVS)。許多成功的架構(gòu)是建立在PHP語(yǔ)言之上的,而PHP卻缺乏很多現(xiàn)代語(yǔ)言都具有的一些特性。而從另一方面來看,很多項(xiàng)目,雖然裝備了最強(qiáng)有力的工具,仍然失敗了。靈巧地運(yùn)用工具的能力,比工具本身的質(zhì)量要重要得多。話雖如此,有經(jīng)驗(yàn)的工程師還是應(yīng)該手邊備一件合適的高質(zhì)量工具的。
經(jīng)驗(yàn)
任何情況下,經(jīng)驗(yàn)都是最有力的武器之一。經(jīng)驗(yàn)意味著太多的東西,所以特別重要。從最本質(zhì)的意義上來說,經(jīng)驗(yàn)意味著良好的判斷力,而良好的判斷力卻是從很多失敗中取得的。從理論與實(shí)踐的沖突中,我們可以看出殘酷與美麗。沖突無(wú)疑有犧牲一一數(shù)據(jù)丟失、服務(wù)中斷、激怒用戶,以及金錢損失一一但同時(shí),沖突的完整情景和病理卻有著深邃的美:職責(zé)受到了挑戰(zhàn)(你可能因此而丟掉飯碗),非預(yù)期的結(jié)果也得以彩顯,而比這些更重要的,這是你成為病理學(xué)家(pathologist)千載難逢的機(jī)會(huì),而且對(duì)于理論與實(shí)踐在哪里分道揚(yáng)鑣會(huì)有更加深入的理解。
經(jīng)驗(yàn)與知識(shí)是緊密相關(guān)的,知識(shí)可以認(rèn)為是他人經(jīng)驗(yàn)的總結(jié)。你有了這些知識(shí),并不就能把握知識(shí)背后的深刻意蘊(yùn),這是需要直接經(jīng)驗(yàn)才能獲得的。經(jīng)由經(jīng)驗(yàn)?zāi)サZ的洞察力(這種洞察力在僅有知識(shí)的情況下是不會(huì)有的)具有洞幽燭微的能力,才能夠探出問題所在,而知識(shí)背后的深刻意蘊(yùn)則能夠讓你靈活應(yīng)用學(xué)得的教訓(xùn),解決這里的問題。
經(jīng)驗(yàn)既是一個(gè)名詞,也是一個(gè)動(dòng)詞:獲得經(jīng)驗(yàn),與應(yīng)用經(jīng)驗(yàn),同樣容易(也同樣困難)。
無(wú)經(jīng)驗(yàn)者的機(jī)構(gòu)化挑戰(zhàn)
盡管獲得經(jīng)驗(yàn)就像簡(jiǎn)單的“做事”一樣容易,但在Web運(yùn)維中,就是一個(gè)制造糟糕判斷并從中脫險(xiǎn)的過程。然而,問題在于:身處這樣一個(gè)激烈競(jìng)爭(zhēng)的行業(yè),有哪一個(gè)機(jī)構(gòu)愿意讓
自己的員工制造糟糕判斷呢?回答這樣的問題并執(zhí)行這樣的計(jì)劃,對(duì)于想擁有職業(yè)Web運(yùn)維工程師的任何一家公司,都是基本的要求。這個(gè)問題的答案分為兩部分:一陰,一陽(yáng)。
首先,為了讓初級(jí)和中級(jí)工程師制造糟糕判斷,必須保證安全。這通過將每次糟糕判斷的責(zé)任和造成的損失控制在一定的限度內(nèi)來實(shí)現(xiàn),環(huán)境(工作區(qū)、網(wǎng)絡(luò)、系統(tǒng)、代碼)要能夠完整地從偶爾的糟糕判斷中脫險(xiǎn)。你肯定不希望被通到這樣的份上,僅僅由于一次糟糕判斷,就將員工炒魷魚(雖然我知道這不能完全避免,但總是一個(gè)美好的目標(biāo))。失誤越大,從教訓(xùn)中學(xué)到的就越深入和持久。這讓我們進(jìn)入了答案的第二部分
相同的糟糕判斷水遠(yuǎn)不要犯第二次。錯(cuò)誤可以發(fā)生,糟糕的判斷事實(shí)上也總會(huì)遇到,但不能從自己的錯(cuò)誤中學(xué)到數(shù)訓(xùn),是不可原諒的。雖然意外總是存在的,你應(yīng)該期待并倡導(dǎo)這樣一種文化:對(duì)重復(fù)糟糕判斷的零容忍。
“資深運(yùn)維”的概念
一直困擾著我的一個(gè)問題,是初級(jí)運(yùn)維工程師申請(qǐng)資深職位。他們的想法是知識(shí)決定了一個(gè)人在團(tuán)隊(duì)中的地位,正像其他領(lǐng)域一樣,這是絕對(duì)錯(cuò)誤的。一名資深工程師最大的特點(diǎn)是其致與可靠的良好判斷力,很顯然,這要在需要做出判斷的場(chǎng)合經(jīng)受鍛煉,而且有一個(gè)簡(jiǎn)單的數(shù)學(xué)算法需要做出判斷的場(chǎng)合的困難程度乘以任職期限。在一個(gè)經(jīng)常發(fā)生災(zāi)難性性事故的運(yùn)維團(tuán)隊(duì)中空降,是可以在“快車道”上迅速成長(zhǎng)的。在一個(gè)位置上待10年,從來沒有做出過挑戰(zhàn)性的決策也是可能的,其結(jié)果就是,沒有積累起任何有價(jià)值的經(jīng)驗(yàn)。
X一代(甚至Y一代)奉行即時(shí)滿足的文化。我與一大批的工程師共同工作過,他們期望他們的“職業(yè)路徑”在5年之內(nèi)能夠達(dá)到最高位置,只是因?yàn)樗麄兎浅B斆?。我認(rèn)為對(duì)這么一大批人來說是不可能的,不是每個(gè)人都能夠做到資深工程師。就算5年之后,你做到了資深工程師,難道這就是你的頂峰了嗎?再一個(gè)5年之后,你就不累積寶貴的經(jīng)驗(yàn)了嗎?到時(shí)候應(yīng)該是什么呢?“超級(jí)工程師(super engineer)”?5年之后又是什么呢?“無(wú)敵工程師(super- duper engineer)”?我認(rèn)為我們這個(gè)行業(yè)的年輕人不值得為此煩惱,真實(shí)情況是,極少有工程師會(huì)在Web運(yùn)維領(lǐng)域干上15年。我們這個(gè)行業(yè)的變化性很強(qiáng),很多人被選拔到了管理崗位,或作為企業(yè)家冒險(xiǎn)運(yùn)維自己的事情去了。
對(duì)進(jìn)入這個(gè)領(lǐng)域而沒有什么經(jīng)驗(yàn)的工程師,我的忠告是:耐心。然而,這句箴言明顯自相矛盾,在你能夠領(lǐng)悟其真意之前,你的耐心恐怕早就跑光了。
紀(jì)律
紀(jì)律,在我看來,是我們這個(gè)行業(yè)中最大的災(zāi)難。Web運(yùn)維,從其進(jìn)人結(jié)構(gòu)規(guī)劃、過程設(shè)設(shè)計(jì)、人員訓(xùn)練之后,業(yè)績(jī)就非常槽糕。作為我工作的一部分,我做了很多評(píng)估,走訪了很
多公司,對(duì)他們的組織結(jié)構(gòu)、運(yùn)維實(shí)踐、整體架構(gòu)進(jìn)行復(fù)審,以便能夠識(shí)別出一但業(yè)務(wù)規(guī)模上來之后,什么時(shí)候以及哪里會(huì)出問題。
猜猜我經(jīng)??吹绞裁?我看到的是懶懶的牛仔和持槍歹徒,這是狂野西部(Wild,WildWest)啊。情經(jīng)常被吹噓為程序員的必需品質(zhì),在Perl社區(qū)(這一點(diǎn)已經(jīng)成為其符咒的一部分),其意義并非真如字面所示(在符咒中已經(jīng)進(jìn)一步簡(jiǎn)化為野做),而是通過盡可能正確面高效地做事,從而為解決同樣同題,面盡可能地少做工作一這其實(shí)離橫情已經(jīng)很遠(yuǎn)了。不幸的是,程序設(shè)計(jì)和運(yùn)維領(lǐng)域的其他人卻將真正的懶惰作為一種我稱之為“我的地盤你休想”的做慢。
紀(jì)律就是可控制的行為,來自于培訓(xùn)、學(xué)習(xí)和實(shí)踐。以我的經(jīng)驗(yàn),紀(jì)行律應(yīng)該是Web運(yùn)維團(tuán)隊(duì)最普通的要素,缺乏紀(jì)律的結(jié)果就是不協(xié)調(diào)、效率低下。
紀(jì)律不是通過書本可以教的東西,必須通過實(shí)踐養(yǎng)成。你接手的每個(gè)任務(wù)都要用長(zhǎng)遠(yuǎn)的眼光來對(duì)待。對(duì)你的崗位和職責(zé)要長(zhǎng)期經(jīng)營(yíng),處理問題的解決方案要5年之后還能夠滿意,這些是實(shí)踐的良好基礎(chǔ),紀(jì)律從此實(shí)踐中即可養(yǎng)成。
軟件工程(一個(gè)密切相關(guān)的領(lǐng)域)在紀(jì)律上卻有不錯(cuò)的成績(jī),我覺得這挺有諷刺意味的。我猜Web運(yùn)維領(lǐng)域缺乏紀(jì)律性的根本原因是缺乏職業(yè)路徑,這看起來好像是一個(gè)雞與蛋的問題,我X對(duì)這個(gè)行業(yè)很快就會(huì)有一個(gè)明確的職業(yè)路徑還是充滿信心的。
參與職業(yè)的網(wǎng)站建設(shè)規(guī)劃設(shè)計(jì),對(duì)于在這個(gè)行業(yè)工作的工程師來說,肯定是是非常重要的。Web已經(jīng)在那兒了,架構(gòu)在Web上的服務(wù)正在變得越來越關(guān)鍵,Web運(yùn)維“職業(yè)”是不可缺少的。通過參與,你就更能夠確信,當(dāng)初吸引你進(jìn)來的這種工作的特質(zhì),將持續(xù)你的整個(gè)職業(yè)生涯。
本文地址:http://m.cdrpkj.cn//article/3303.html