2015年5月28日11時許,,攜程網(wǎng)官網(wǎng)出現(xiàn)大面積癱瘓,網(wǎng)頁版和手機APP均不能正常使用,。攜程方面對此回應(yīng)稱服務(wù)器遭到不明攻擊,。直至 28日晚上22:45,,攜程官方回應(yīng)稱,,經(jīng)技術(shù)人員搶修,除個別業(yè)務(wù)外,,攜程官方網(wǎng)站及APP恢復(fù)正常,,經(jīng)過排查,攜程鄭重聲明,,數(shù)據(jù)沒有丟失,,預(yù)訂數(shù)據(jù)也保存完整。
此次攜程網(wǎng)站宕機還影響到了在線旅游市場供應(yīng)商及其他合作伙伴,。同程網(wǎng)就表示,,因為部分酒店訂單來自攜程,導(dǎo)致其網(wǎng)上給的部分酒店訂單無法成交,。但是同程網(wǎng)對攜程表示理解和支持,。攜程的合作伙伴陽光車導(dǎo)還發(fā)聲表示攻擊攜程的敵人也是自己的敵人。
按照攜程一季度財報公布的數(shù)據(jù),,攜程宕機的損失為平均每小時106.48萬美元。受此影響,,攜程股價盤前暴跌11.67%,,報72美元,。 5月28日,在納斯達克掛牌交易的攜程股價開盤跌了3.32%,。
事件發(fā)生的第二天(5月29日),,攜程發(fā)布官方情況說明稱,此次事件是由于員工錯誤操作,,刪除了生產(chǎn)服務(wù)器上的執(zhí)行代碼導(dǎo)致,,現(xiàn)已恢復(fù),,未造成客戶信息泄露,。
經(jīng)攜程技術(shù)排查,確認此次事件是由于員工錯誤操作,刪除了生產(chǎn)服務(wù)器上的執(zhí)行代碼導(dǎo)致,。
一般來說,,類似攜程這樣的大型網(wǎng)站承載著繁多業(yè)務(wù),,其后臺是一個由SOA(面向服務(wù))架構(gòu)組成的龐大服務(wù)器集群,看似簡單的一個頁面背后由上千個應(yīng)用子系統(tǒng)以及上千個WebService組成,而每個應(yīng)用子系統(tǒng)和每個WebService之間都存在著相互調(diào)用的依賴關(guān)系。
攜程網(wǎng)發(fā)生宕機事件后,,攜程的技術(shù)人員除了需要恢復(fù)生產(chǎn)服務(wù)器上的執(zhí)行代碼以外,,還需要做的是恢復(fù)并確保每個應(yīng)用子系統(tǒng)以及每個WebService的功能正常,同時確保應(yīng)用子系統(tǒng)與WebService間的調(diào)用關(guān)系得以正常執(zhí)行,。
這種驗證性的操作需要攜程的工程師及運維人員通力合作,,盡快恢復(fù)生產(chǎn)代碼并通過反復(fù)地,、持續(xù)性地調(diào)試以確保應(yīng)用子系統(tǒng)與WebService功能的正常運行。
從此事件中可以看出底層基礎(chǔ)建設(shè)的重要性,,而作為服務(wù)器的運維也有越來越高的要求,。
1) 承載能力優(yōu)先 ——隨后再進行優(yōu)化 —— 不遵守這條規(guī)則必定帶來故障停機時間。不要在故障停機時間的壓力下進行優(yōu)化——要先集中精力提高承載能力,。

2) 以Postgres為例,,一定要確保你的每一個網(wǎng)絡(luò)都能匹配得上你的WAL文件、Slony復(fù)制,、快照技術(shù)以及基于磁盤的DB版本化(快照的衍生品)
3) 不要把問題‘優(yōu)化’到你的架構(gòu)之中,。為了解決問題而新加進來的一些東西往往后來都會變成運維沉重的負擔。 要確保在運維工程化中開發(fā)出來的工具交接完整,。過后再回頭進行進一步的開發(fā)往往不靈,。更重要的是,變更請求可能會破壞已經(jīng)安排好的工程計劃,。
4) 保持簡單,。保持簡單,因為你很聰明 別把事搞的太復(fù)雜 因為你行的,。
(譯者:KISS 原則 Keep It Simple, Stupid)
5)應(yīng)該非常謹慎地使用 緩存 ,,為了保護資源一致性,它很難進行水平縮放,。
如果你作的是一個可以橫向擴展的東西,,
明智或?qū)徤鞯淖龇ㄊ遣灰砑拥木彺鎸印?
如果非要使用,它應(yīng)該是為最終用戶獲得性能,,
不是為了贏得一個網(wǎng)站的容量;
6) 不要所有代碼都自己寫; 不要所有東西都外包; 在合適的時間使用合適的工具,完成你的工作.
(譯者: 不要重復(fù)造輪子)
7)協(xié)商-真正有效的談判唯一方式是先作一些調(diào)研,制定一些可行的性方案.這樣你可以挑選你的首席開發(fā)商,如果你真的需要. 別虛張聲勢.
8)一直保持N+1。如果N=1,,無論任何情況下不要輕易使用+1,,這個1只用于當N down機情況下。當使用冗余服務(wù)器來承載負載時候,,不要讓你的系統(tǒng)超過49%的負荷,。當有機會能只用N+2的架構(gòu)時候,使用它,。
9)數(shù)據(jù)丟失不是任何一個公司所能承擔的風險–這是舉世所知的真理,。數(shù)據(jù)丟失造成的損失遠遠大于保持數(shù)據(jù)不丟失所花的成本。
10)無論何時何地盡可能并行化,。這是復(fù)路考慮最重要的手段,。比如,,如果利用MogileFS來做位置感知,并且需要實時的復(fù)制數(shù)據(jù),,一個可行的方法是每一臺MogileFS服務(wù)器可以復(fù)制它的數(shù)據(jù)去MogileFS的負載均衡中心,。盡可能多的啟用多的平行。
11)閱讀手冊,。至今,,我還是堅持要先通讀RAID卡的手冊,以確認是否有什么細微的差別,。惡魔都隱藏在細節(jié)里,。做足功課吧!
12)知道瓶頸所在,并知道怎么去定位它,,一層層排查,,查找是不是硬盤、內(nèi)存或者cpu的阻塞了,。通常這個很簡單,。
13)定期做系統(tǒng)容量管理程序。積極一點,。如果沒有容量數(shù)據(jù)的曲線,,你很難知道你系統(tǒng)的薄弱之處。
14)不要促成失敗,,不要害怕改變,。
15)別挖陷阱給自己跳。不要認為你的工作成果將能作為未來的工作的動力,。
16 )運維人員寫的代碼應(yīng)該是運維工具,,而不是應(yīng)用軟件。
17)在運維團隊中,,不要低估了項目管理,、文檔撰寫以及財務(wù)分析人員的價值。他們比給予工資更有價值,。
18)監(jiān)控一切,。報警異常問題。其他部分記錄數(shù)據(jù)用來做趨勢分析信息,。
19)定期的流程查看各個地方的趨勢數(shù)據(jù),。
20)不要把監(jiān)控弄的很亂,不然他就沒有啥意義了,。
21)要確保監(jiān)控系統(tǒng)簡單到讓公司的每個人都能上手,。你可能會很吃驚監(jiān)控數(shù)據(jù)指標轉(zhuǎn)換成為業(yè)務(wù)指標、市場指標和銷售等等指標有多頻繁。
22 ) 只在可以做出相應(yīng)改善的地方做檢查,。 否則就不要浪費時間了,。 23)公開你的檢查報告,并附上相關(guān)數(shù)據(jù),,以便他人可以容易的閱讀到關(guān)鍵點,,并能關(guān)聯(lián)到響應(yīng)的數(shù)據(jù)。
24)在每一個技術(shù)點都分配人手,。
25)要給重要人員配備后備人手,。
26)要不斷的招聘。甚至是當你沒有名額,,也要一直招聘,。
27)要嚴于律己。無論你有多聰明或者你認為你多NB,,你也要不斷的提高自己,。
28 )要盡可能多的把自己和其他公司做比較。眼光要往外看,。 29) 挑選一個展會或回憶,,只有一個,一年一次,,去參加,。如果展會一年舉辦多次,之參加一次,。
30) 購買你需要的,,而非你想要的。永遠都不要摘掉企業(yè)這頂帽子帶上“什么對我是最簡單最安全的”這頂帽子,。
31)永遠只做最生意有益的事情,,即使這意味著你需要離開。
32)正式問責機制——記錄承諾,,標記它們,,揭示為兌現(xiàn)的承諾。
33) 你不應(yīng)失敗兩次以上,??謶指杏悬c好處。但要知道長期犯錯和無意犯錯的區(qū)別,。
34無情一些——你的對手如此。
35)視工作為在你完成時需要簽上你的名字,。這也意味著完成你的工作,。
36)變得對別人有用。
37)與初創(chuàng)公司合作——提供你的專業(yè)技術(shù)和規(guī)模,你將獲得免費的產(chǎn)品作為回報,,有時甚或一生,。
38)容量是一個業(yè)務(wù)/產(chǎn)品問題。這意外著每個頁面,、每個請求,、每次登錄的網(wǎng)絡(luò)成本等等在做正確的業(yè)務(wù)/產(chǎn)品決策時候都必須是都透明
39)一直打破預(yù)算。運維團隊通常是最大的花費者,。通常沒有收入沒有達到預(yù)算,,但是運維團隊可以有很多方法來延期采購。
40)過去能正常的做的事,,不見得現(xiàn)在或者未來都會正常,。所以做的時候,先用工具測試一下,。
41)文檔化,。把所有東西都寫成文檔。要讓新人挨個去問怎么做事,。
42)用一張大尺寸的圖繪制你數(shù)據(jù)中心的網(wǎng)絡(luò)拓撲,。
43 )用一張圖描繪出你每一個產(chǎn)品的業(yè)務(wù)流程圖。 44) Faq-O-Matic, Wiki, 在這里人們可以很容易的發(fā)布“這是如何修復(fù)這個”的文章,,并讓它容易被找到的地方,。這里是技術(shù)編寫者能派上用場的地方,但是,,最重要的是使文檔更容易,,即使是非正式的。
45) 確保所有人,,任何人都可以被替換,。
46)多數(shù)人在家里做的比在辦公室里更多,有些人則不然,。
47)捆綁下單——你可以要求更多折扣,,更好的條款等等。當你成批購進硬件時,。你可以要求一切——最低價格,,備件包,租賃期限,,只要他們還沒有得到訂單,。
48)同你的供貨商保持長期關(guān)系——確保你在下份工作時依然能夠聯(lián)系他們。
49)給運維團隊的每一個人配置可以用來遠程工作的超級裝備:掌上電腦,、無線上網(wǎng)卡,、24英寸液晶顯示器等等。雇傭大拿得到回報要遠大于遠程雇傭的本地人員。記住運維工程師都是用電達人,,能充分的利用屏幕上的每一個像素點,。
50) 完全陷入IT標準的泥潭。直到Mac運行office 2007和outlook,,你必須運行windows,。間斷的。除非全用mac本,,否則這會破壞會議日程表,、聯(lián)系人或者郵件列表的辦公效率。如果有個員工愿意工作的在 xp環(huán)境,。這是非常少,。這條法則,現(xiàn)在是陳舊的/未公認的,,陷入泥潭不一定是最好的方法,。這個列表非常的07化。
51 )有個合理的采購流程,。知道你的預(yù)算,,確信能管好它。從財務(wù)得到實際的金額,。在技術(shù)驅(qū)動的預(yù)算/報告和財務(wù)驅(qū)動的預(yù)算/報告直接往往有一定的差距,。作為一個搞的運維管理者要能形成模型把這些差距計入銷售總成本中。一個理解這些事情的CFO有助于推動業(yè)務(wù)決策,。
52)周會一定要持續(xù)進行,。對上次會議的事件逐一落實結(jié)果和追責。
53)建立一個分離的逐級升級系統(tǒng),,用以消除由于開發(fā)者代碼的問題對線上系統(tǒng)的不良影響,。這主要是運維問題、代碼問題都存在的情況下在開發(fā)跟蹤系統(tǒng)或者運維跟蹤系統(tǒng)中往往會丟掉,,最后無人理睬,。建立一個獨立的跟蹤系統(tǒng)來解決這些問題可以使得問題簡單清晰。
54 )產(chǎn)品開發(fā)從設(shè)計開始的每個階段都要和運維相結(jié)合,。這樣,,擴展性,監(jiān)控和可靠性都融入到產(chǎn)品里,。這樣同時也可以確保運維負責的硬件采購,、監(jiān)控系統(tǒng)按時到位,運維手冊得到及時更新,,最后產(chǎn)品按照預(yù)計時間上線運行并且都符合運維標準,。
55)在公司真正的實踐——Sarbanes,,WebTrust 安全審計認證,SAS 70 審計標準,,Visa 和銀行等等。如果你真的成功了,,這些都是你不得不打交道的,。早點開始這些準備其實很簡單,不需要太多的知識,。部署一個工單/任務(wù)跟蹤工具,,使用它。把變更控制和變更管理納入同樣的系統(tǒng)里,,使用它,。其他信息也可以放進來。系統(tǒng)就可以幫助我們找出像“上周變更了什么”這類信息,。
56)簡化給冗余留和多點登錄的流程,。一開始或許很難,但是一個沒有真正的擴展性和可靠性的系統(tǒng),,才會真正耽誤你獲得成功的時間,。
57)Oracle 標準版(SQL Server 標準版)是值得購買的。如果你可以限制住自己不超過標準版的需求,,那就絕對值得買,,哪怕你剛剛開始創(chuàng)業(yè)還不需要他。
58)Postgres 和 MySQL 是一個免費的考慮,。如果你不是特別在意事務(wù)完整性,,MySQL 是很好的選擇。直到”真空”和Postgres單詞的強制鏈被打斷,,Postgres代表一個不可預(yù)知的,,通常消極詭異的數(shù)據(jù)庫。
59)容量設(shè)計應(yīng)該按照每日峰值再上拋 20% ~ 30% 的冗余,。除非你是個遷移技術(shù)熱衷者,。
60)盡量多讀一些經(jīng)濟雜志。它們通常是免費的,,只需你填寫一些調(diào)查問卷就可以免費獲得,。新聞的價值是巨大的。讓他們投遞到你家里,,工作的時候讀雜志的機會趨近于零,。
61)保障安全。開發(fā)人員不應(yīng)該有線上環(huán)境的權(quán)限,,應(yīng)該做代碼復(fù)核,。這是和運維之間的職責分離,。運維團隊中應(yīng)該有人控制其他運維人員權(quán)限的權(quán)限。制定員工手冊,,告知違反安全條例所帶來的嚴重后果,。從開始就要從物理的、邏輯的,、功能的各個方面來保護客戶的數(shù)據(jù)安全和隱私,。萬一有客戶要和你對峙起來,你發(fā)現(xiàn)起來發(fā)現(xiàn)自己只是靠勇氣和勤奮來保護客戶數(shù)據(jù),,那你就傻了,。
62) 控制好訪問入口。首先要保證大家可以正常完成工作;其次要確保你知道他們是從哪里登錄的,。啟用雙因素身份驗證方法,。
63)對于人們訪問生產(chǎn)環(huán)境必經(jīng)之路的壁壘和網(wǎng)關(guān)宿主,擊鍵記錄很重要,。對于 Windows 可能稍微有點難度,,不過有些網(wǎng)關(guān)可以提供自動截屏功能。
64)如果有狀況的情況下,,確保有冗余登錄點連線到生產(chǎn)環(huán)境,。不要期望公司的 VPN 在網(wǎng)絡(luò)中斷的時候還能連上生產(chǎn)環(huán)境。直接把 VPN 架設(shè)在線上環(huán)境里,。
65)使用 LDAP 認證,,哪怕你只有 10 臺機器,通過復(fù)制 passwd 和 shadow 文件的方式來管理,,你也需要 LDAP 認證,。
66)不要低估在 UNIX 環(huán)境中一臺 Windows Server 2003(2008)設(shè)備的作用。如果只是因為不懂 Windows,,那么去學,,而不是排斥它。
67)不要在無效的無線方案上浪費大家的時間,。人們都機動的,,他們希望在沙發(fā)上,會議室里,,門口,,到處都要上網(wǎng)。一定要保證無線ad的可靠,。
68) 總有人把額外的精力和時間都投入到工作上——直接通過他們的請假單好了,。而另一些人恰恰相反只把注意力放在怎么通過自己的請假單。在個人時間安排上,,運維人員總是做出巨大的犧牲,,他們隨時準備凌晨3點爬起床快速響應(yīng)排障需求,。
69)通過集中式的關(guān)系數(shù)據(jù)庫管理你所有的產(chǎn)品成果。然后通過數(shù)據(jù)復(fù)制分發(fā)到資產(chǎn),,人員,,網(wǎng)絡(luò),合同等所有數(shù)據(jù)到異地,。沒錯,,要的是一個在線的實時可用的復(fù)制,而不是每天晚上備份到磁帶,。
70)盡可使用自動化流程以確保安全,包括操作系統(tǒng)或者產(chǎn)品的上線,,文件的分發(fā),,日志的分析等。
71)自動化操作通過運維數(shù)據(jù)庫獲得配置(真理來源),。
72)服務(wù)器通常有三種狀態(tài)——離線,,在線,產(chǎn)品態(tài),。在線就是說正在通過 cfengine,、rsync 或者其他你在使用的工具完成配置。產(chǎn)品態(tài)表示已經(jīng)走流量了,。同時還需要一個狀態(tài),,這個狀態(tài)下的設(shè)備可以在不提供生產(chǎn)服務(wù)的情況下收集或者測試數(shù)據(jù)。
73)注重日志數(shù)據(jù),。在設(shè)備下線或者重建之前,,一定要先導(dǎo)出日志。
74)如果規(guī)模發(fā)展太快以至于沒有太多時間來做優(yōu)化,,那就盡力鎖定一切——流程還能進行即可,,就不要改變它,直到后來有了絕對必要的理由,??傊i定默認值,,等待成長到必要時再審視,。
75)你永遠無法避免運維工程師在你基礎(chǔ)設(shè)施最關(guān)鍵的地方犯錯——比如在哪臺機器上不小心執(zhí)行 rm -rf / 命令。
76)為團隊保持好玩和有趣的氣氛——如果他們不再享受他們的工作,,他們就會找別的事情來消遣,。要讓團隊有主人翁意識,運維不是哪個經(jīng)理的個人任務(wù),。
77)提供 99.999% 可用性的真正價值在于讓我們有能力保持靈活,。這意味著當你需要的時候可以充分利用冗余,。這會讓物理變更、設(shè)備登入點變化,、代碼修改和回退等等都游刃有余,。這個對于公司本身價值巨大,甚至比對客戶還大,。
78)如果你能做到 99.999%,,給客戶100% 的服務(wù)承諾。
79) 不要丟掉按流程發(fā)布軟件的能力,。應(yīng)該丟掉的是你自己回滾或者轉(zhuǎn)移到舊版本代碼的能力,。壓根就不應(yīng)該“處理”這種徒勞的失敗轉(zhuǎn)移。當事情變得不 如人意的時候,,你更應(yīng)該做的是找個大玩意兒來擋住你的肥屁股,。CYA = 保持敏捷 = 成功的公司。
80) 在腦子里要清楚知道為什么以及這樣做的為了達到的目的,,為客戶構(gòu)建產(chǎn)品每一個具體步驟,。不管你部署給最終用戶的是什么,把這些放在最先考慮,,即你所有(基礎(chǔ)設(shè)施,、流程和人員)的設(shè)計都是為了提供最好的服務(wù)和產(chǎn)品。
81)第一次就要做對了,。很少有機會讓你回去在做一遍的,。重做是對公司資源的巨大浪費。要提高命中率,,一次就要成功,。
82)接觸業(yè)內(nèi)人士、盟友和類似的企業(yè),,看看他們的運維是怎么做的,。很可能他們碰到了跟你一樣的挑戰(zhàn),而解決的方法更好,。不要害怕分享自己的經(jīng)驗和處理過程,,因為別人也會回饋的。他山之石,,可以攻玉!
83)招人要招那些好到可以讓你擔心位子不保的那樣的人,,招你欣賞和可以學習的榜樣,招那些你愿意和他一起工作的,。這感覺甚至超過你招聘一個工作考評為A的員工,。
84) IT 和運維是完全不同的兩個概念。一個不錯的運維經(jīng)理應(yīng)該可以管理好企業(yè)IT,,但是一個傳統(tǒng)的 IT工程師很難有能力處理互聯(lián)網(wǎng)運維任務(wù),。
85)當你開始一份新工作或者在每年的起始,,都應(yīng)該去爭取預(yù)算。這不是說推車那老破車往前走,,而應(yīng)該是基 于歷史數(shù)據(jù)做出最佳推薦方案,。如果你正在評估一份新工作,請確認你完完全全的知道預(yù)算以及預(yù)算的來源,。同時,,還應(yīng)該有完善這份預(yù)算的權(quán)利。