
Vagrant Tutorial(1)雲端研發人員,你也需要虛擬機!
前言在進入本系列文章的正題之前,讓我們先問一個問題:為什麼研發人員也需要虛擬機呢? 虛擬機?那不是伺服器維運人員才需要知道的嗎? 常見的原因是,研發者用的本機電腦,與真正上線服務的電腦,兩者的作業系統及相關組態,甚至連本性都很不一樣。我們需要一種方法,模擬出一個遠端的環境,既是獨立於本機的乾淨隔離環境,又要保持與本機互連的彈性。最後,為了讓整個團隊能在一致的環境下協同研發,這種組態設定知識,也要形諸文件,可程式化,可再現,予以版本控制,也就是所謂的 “infrastructure as code”。 為什麼兩者會不一樣呢?這得從頭說起⋯⋯ 雲端主機的作業系統市占率拜 Xen、KVM、Hyper-V 等 hypervisor 虛擬化技術進步之賜,雲端主機產業發達。你可以選用像 Linode 或 DigitalOcean 這類的 VPS,也可以像 Amazon EC2 或 Google Compute Engine 這類更重量級的雲端服務。大概快則一分鐘,慢則數分鐘,就可新開或複製一份執行個體 (instance) 上線運作。 就是因為太方便了,許多沒有舊包袱的研發團隊,除了人手一台筆電外,早已不再採購高規格的實體主機,全盤雲端化。你隨時可以 ssh 或 RDP 遠端登入進去(也許會再多加一層 VPN);至於這主機本體,是擺在台灣的內湖、板橋、彰化機房,還是位於美國、新加坡或日本,老實說,除了連線速度之外,可能根本沒有人會在意。 這些雲端主機,在 hypervisor 上面所搭載的作業系統,多半是哪些呢? 根據 W3Techs 的全球調查,純以 Web 網站的市占率而言,泛 Unix 家族就占了 2/3。若再針對其中的 Linux 予以細分:
不難發現,這些最受歡迎的 Linux 發行版,也都是各大雲端主機服務商優先提供的預載系統。 這項調查只針對 Web 網站,沒涵蓋到 API、資料庫、中介軟體等後端伺服器或大型主機,但雖不中亦不遠矣。事實上,打自 LAMP 浪潮以降,接續 NoSQL 革命,幾乎已經宣判 Linux 是低成本、高性能雲端伺服器的王道。 對這議題有興趣的,請參閱 Wikipedia 的 Usage share of operating systems 條目。 你自己的桌機或筆電,也是用 Linux 嗎?以上講的是遠在天邊的伺服器。那麼,近在眼前的桌機或筆電呢?仍然是 Linux 當道嗎? 一般老百姓的上網電腦,據 Net Applications 顧問機構調查,Windows 新舊版本的總市占率超過八成;另一個機構 StatCounter 也有類似的結論(詳細數據請見本文附錄)。 不過,軟體研發人員這種奇特生物,對於朝夕相處的謀生工具,評估角度不見得和普通老百姓一樣。這方面似乎沒有可靠的普查,但若不求量化數字,仍可從許多角度側面觀察質化內涵。 首先,這種生物每天都在跟程式語言打交道,不會故意選一個不合身的工作環境(作業系統、編輯器、編譯器、整合開發環境⋯⋯)來開發程式。譬如說,如果你每天都在寫 Objective-C 程式,幾乎可以斷定,你身邊會有一台 Mac OS X 的電腦。同理,如果你的主力是 C#,那麼,如果你不在 Windows 裡面打滾,等於是自找麻煩。 因此,我們拿程式語言及所屬的技術圈,做為旁敲側擊切入點。即使不是決定因素,至少也是高度相關的指標。 拿本文附錄所列的熱門程式語言,逐一分析,約可粗分為幾類:
很顯然的,研發者用的本機電腦,百花齊放,各有所好;與真正上線服務的電腦,兩者的作業系統,難以強求完全相同。 什麼?軟體組態問題?我就是升級狂呀!除了作業系統之外,軟體組態也是另一個有差異的地方。 傳統上,軟體團隊可分為開發組 (development) 及維運組 (operation)。開發組走在技術最前線,求新求變,愛嘗鮮;維運組則力求服務穩定,傾向保守,座右銘是:“if it ain’t broke, don’t fix it”。 電腦會忠實反映這兩種不同的心態取向。 研發人員總是克制不住想升級到最新軟體,實驗最新功能;但真正上線服務的電腦,往往還停留在「傳說中最穩定的某個舊版本」,不輕易競逐版本。一段時間過後,歧異就會出現。 就以幾個典型的伺服器軟體為例。以下是 2014 年 8 月 8 日父親節當天,用 Ubuntu 14.04 LTS 的查詢結果,皆以各軟體的 stable 版為準:
補充說明:
軟體版本不同,就有機會出現不一致的執行結果,出現所謂 “it works on my machine” 這種很難 debug 的問題。 這畢竟是研發黑手專用的機器呀!其實更根本的差異是,研發人員的本機,本來就是為了研發軟體而存在,會盡可能給人方便。反之,真正上線服務的電腦,只要把這台電腦被賦予的少樣特定任務做好就夠了,不必成為樣樣都裝的萬能機器,反而要做足防護,並榨乾最後一滴性能。因此:
很顯然的,研發者用的本機電腦,與真正上線服務的電腦,兩者之間,不僅是作業系統,就連軟體組態,也都難以強求完全相同。研發者必須意識到這種現實,學習在兩種系統之間切換心智模式。 好吧,有黑客精神的你,或許為了自我挑戰,刻意把手邊桌機或筆電多切出一塊 Linux 開機分割區(像我的 MacBook Air 就挪出一個 Ubuntu 14.04 開機選項),軟體組態都刻意與伺服器主機分毫不差,以方便在本機進行某些逼真的實驗。但萬一你想在一台本機上玩玩 Hadoop cluster 呢?你的電腦可以無性生殖 N 台嗎? 那,該怎麼辦? 小結拜敏捷開發 (agile) 思潮所賜,及早測試、及早整合、頻繁整合、持續整合等機制,成為研發團隊流程改善的目標。DevOps 觀念也告訴我們:研發者若能在毋需大幅改變自身習慣的情況下,常與正式上線機雷同的環境為伍,就能盡早揭露出潛在的功能面及非功能面瑕疵。 因此,研發者需要一種方法,能在本機模擬出那些電腦叢集,越像越好。模擬出來的環境,既是獨立於本機的乾淨隔離環境,又要保持與本機互連的彈性。最後,為了讓整個團隊能在一致的環境下協同研發,這種組態設定知識,也要形諸文件,可程式化,可再現,予以版本控制,也就是所謂的 “infrastructure as code”。 簡單的答案是:你需要虛擬機! 複雜一點的答案呢,且聽下回分解。 附錄A:桌機筆電作業系統市占率據 Net Applications 顧問機構調查,一般老百姓的上網電腦,Windows 新舊版本的總市占率超過八成: 另一個機構 StatCounter 也有類似的結論:
附錄B:程式語言市占率根據 TIOBE Programming Community Index(常簡稱為 TIOBE Index)的調查,最熱門的程式語言分別是:
資料來源:http://www.tiobe.com/index.php/content/paperinfo/tpci/ – 2014/07/06 再看另一份由 DedaSys 所做的 Programming Language Popularity 調查: |
alexk1107
12/04
大的方向與結構受用充實了,謝謝!