拯救者Linux:我是如何給我的團隊引入Linux的
在項目早期就遇到公開的失敗后,一個著名大學的 IT 團隊決定將他們的 web 注冊系統部署到 Linux上,此舉幾乎將服務器的***用戶訪問量提高了 3 倍
1998年,我在明尼蘇達大學為一個新的 web 團隊管理他們的服務器管理組。明尼蘇達大學是一個非常大的大學,個個院校擁有接近 6000 名在校大學生。當時學校是用一個上了年紀的大型機系統來做學生的檔案管理系統,這種系統已經過時了,所以需要做出改變。
這個系統不是 Y2K 類型的(LCTT 譯注:保存年份時只用兩位數,導致記錄 2000 年時計算機會記錄為 1900 年,詳見 What Does Y2K Compliant Mean?),所以我們準備建立一個由仁科軟件公司來交付的新的學生檔案管理系統。這個新系統對明尼蘇達大學來說有很多作用,不僅能夠管理學生的檔案,還能提供其他的一些功能。然而它卻缺少了一項關鍵特性:你不能在你的瀏覽器上通過 web 來給你的班級進行注冊。
按照今天的標準來看,這是一個重大的疏忽,但是在上世紀九十年代,互聯網還是一個新生概念。亞馬遜才建立不久,ebay 剛創業一年,google 呱呱墜地,Wikipedia 還沒有影兒。所以 1998 年仁科公司沒有支持 web 在線注冊課程這個功能也就不足為奇了。但是明尼蘇達大學作為 Gopher 網絡的發源地,并且給之前的大型機系統開發了一套 web 功能接口,我們覺得 web 在線注冊功能對于這個新的學生檔案管理系統是至關重要的。
我們在這個 web 團隊的任務就是去實現此管理系統的 web 在線注冊功能。
幸運的是,我們并不是孤軍奮戰。我們聯系了 IBM ,在第二年一起開始來搭建這個新的 web 在線注冊系統。IBM 負責提供硬件和軟件環境來運行這個 web 系統:3 個運行***的 AIX 系統(類 UNIX 操作系統)、IBM Java 和 IBM WebSphere 平臺的 SP 電腦節點,并用一個 IBM 的負載均衡器來實現 3 個節點的負載分流。
AIX network diagram
在經過一年多的開發和測試后,我們的系統終于上線了!但不幸的是失敗卻接踵而至。
負載過大
在開發過程中,我們無法準確地模擬測試真實場景下許多學生同時登錄的場景。原因不是沒有測試環境,明尼蘇達大學有定制的 web 負載測試軟件包,而且 IBM 有自己的工具做補充,但是這個 web 系統在當時對我們來說實在是太陌生了,我們沒有意識到這些測試工具是不能滿足要求的。
通過數月的測試,我們將此 web 系統的預期負載量調整到 240 個并發用戶。但不幸的是,我們實際的使用量卻是預期的兩倍左右,在***天系統上線時,超過 400 名學生馬上同時登錄進系統,由于負載遠遠超出預期值,3 臺 web 服務器直接宕機了。由于持續的高負載,服務器一直崩潰,只能不斷地重啟。一臺剛重啟完,另一臺又宕機重啟了,這種場景居然持續了一個月。
由于不能有效地通過 web 注冊,學生只能通過原來的方法來注冊:來到登記員的辦公室,拿著筆注冊,然后再出門。當地報紙也幸災樂禍地嘲諷道:"電腦軟件的失敗強迫學生只能面對面地注冊!"
Negative headlines about web registration crashes
面對失敗這個事實,我們盡自己全力在下一個開發周期中來提高軟件性能,在之后 6 個月的時間里,我們瘋狂地想去增強這套系統的負載能力。盡管增加了更多的代碼,調整了多次配置,還是不能支持更多的用戶。盡力了,然而面對的還是失敗。
就如所料的,在下一個迭代周期后,迎接我們的還是失敗。服務器由于負載問題一次又一次地宕機。這一次新聞標題已經變成了:“web 注冊系統就是垃圾”。
在開始下一個為期 6 個月的迭代前,我們已經絕望了。沒有人知道服務器不停宕機的原因,我們已經預期這個問題現在是無解的。我們是要采取一些措施來搞定這個問題,但是怎么做呢?以下是我們討論得出的方法:
是否需要切換新的平臺?
IBM 當時引入了 Linux,給它的 Java 和 WebSphere 平臺做了二次開發。所有產品都獲得了紅帽公司的 RHEL 認證,并且有幾個產品已經在我們的桌面系統上運行了。我們意識到了現在在 Linux 上已經有了完整的生態系統來運行我們的 web 管理系統,但是它能表現的比 AIX 更好嗎?
在搭建好一個測試服務器并進行基本的負載測試后,我們驚奇的發現一臺 Linux 服務器能夠輕松地支持之前 3 臺 AIX 服務器所不能支持的負載量,在相同的 web 代碼、IBM Java 和 WebSphere 平臺下,單臺 Linux 服務器能夠支持超過 200 個用戶。
我們將這個消息告訴了登記員和 CIO,他們同意將 web 注冊系統切換到 Linux 平臺上。雖然這是我們***次在明尼蘇達大學跑 Linux,但是失敗已成習慣,反而無所畏懼了。AIX 只會失敗,Linux 卻是我們唯一的希望。
我們馬上基于 Linux 來進行開發。另一個組的同事也提供了幾臺 Intel 服務器來給我們使用,我們給服務器裝上紅帽系統和相關的 IBM 組件,然后在新系統上進行了持續性的負載測試,令人欣喜的是,Linux 服務器沒有出現任何問題。
經過兩個月高強度的開發測試,我們的新系統終于上線了,而且是巨大的成功!在巨大的負載下,web 注冊系統在 Linux 的表現都堪稱***。同時在線峰值甚至超過了 600 名用戶。Linux 拯救了明尼蘇達大學的 web 注冊系統~
成功的經驗
當我回首這個項目時,我發現你可以用以下幾個點來向你的團隊介紹 Linux:
1、 解決問題, 不要自欺欺人
當我們提議在企業中使用 Linux 時,并不是因為我們認為 Linux 很酷才使用它。當然,我們是 Linux 的愛好者并且已經在自己的環境中運行過它,但是我們在公司是為了解決問題的。能用 Linux 是因為我們的登記員和出資人同意 Linux 是解決問題的一個方法,而不僅僅是因為 Linux很酷我們想用它。
2、 盡可能小的去做改變
我們的成功是建立在 IBM 已經基于 Linux 做出了它的 Java 和 WebSphere 產品的基礎上的。這能讓我們在將 web 系統從 AIX 切換到 Linux 上不用做過多的修改適配。兩者比起來只有硬件和操作系統改變了,其他系統相關的組件都保持了一致,這些都是保證平臺切換成功的基石。
AIX cost diagram
Linux cost diagram
3、 誠實對待風險和回報
我們的問題很明顯:web 注冊系統在前兩個迭代周期中都失敗了,而且很可能再次失敗。當我們將自己的想法(AIX 切換到 Linux)告訴出資方后,我們對其中的風險和回報是心知肚明的。如果我們什么都不做,就只有失敗,如果我們嘗試切換到 Linux 平臺,我們可能會成功,而且從最初的測試結果分析,成功的概率是高于失敗的。
而且就算在 Linux 平臺下項目還是失敗了,我們也可以迅速地切換回 AIX 服務器。有了這些細致的分析和措施,終于使登記員能夠安心讓我們試試 Linux。
4、 言簡意賅地交流
在項目平臺切換的過程中,我們做了一個整體計劃。我們在一張白紙上明確地寫下了我們計劃做什么,為什么要這么做。這種方式的成功關鍵就在于計劃的簡短性。領導們不喜歡像看小說一樣來看技術性的主意,他們不想糾纏在技術細節中。所以我們有意地在執行層面上進行計劃安排,在框架層面上進行描述。
當我們在進行平臺切換時,我們會定期的告訴出資人當前進展。當新系統成功完成后,我們每天都會提交更新,報告已經有多少學生成功通過此系統完成注冊和遇到的問題。
盡管這個項目已經過去了接近 20 年,但是其中的經驗教訓在今天仍然適用。盡管 Linux 在其中起了舉足輕重的作用,但是最重要的還是我們成功地將所有人的目標引導到解決共同的問題上。我認為這種經驗也可以運用到很多你所面對的事情當中。