啟雲科技技術長撒景賢(圖右)和啟雲科技資訊長沈時宇(圖左)今年中開始改用Docker來執行線上環境高運算需求的3D建模程式,來解決VM更新頻繁困擾,也提高轉移到其他雲端平臺的彈性。

圖片來源: 

iThome

儘管Docker推出不到2年,就吸引了大批開發者和維運人員採用,但多數使用者都只敢在開發或測試環境中使用Docker,連美國都罕見有公司在正式Production的線上環境中採用。可是,在臺灣,有一家今年1月才成立的新創公司啟雲科技,3個月前毅然決然地開始在正式環境中使用Docker,啟雲科技技術長撒景賢表示,Docker是新創公司的槓桿,能讓小公司具備不輸Yahoo這類大型網路公司的能力。

撒景賢可不是憑空比較,幾年前,他曾在臺灣Yahoo任職過3年,當時臺灣Yahoo要接手全球Yahoo新聞網站的平臺開發工作。撒景賢被指派加入負責維護東南亞各國的Yahoo新聞網站的一個數十人規模的開發團隊。在新版新聞網站推出前,撒景賢必須盡可能維護各國舊版新聞網站的穩定性,包括新加坡、馬來西亞、菲律賓、印尼、越南等國。

儘管撒景賢沒有參與維運,他也親眼看到Yahoo這類大型網路公司如何自動化大量部署伺服器的能耐。

例如,當時某地Yahoo新聞網站可能會用到50臺前端伺服器,10臺資料庫,再加上除了Production環境,Yahoo會1比1地配置同樣規格和數量的Stage測試環境,甚至是開發環境,每次部署新版程式就得同時部署2、3百臺伺服器。若用人工處理部署工作,不只曠日廢時,而且只要漏裝了一個套件,就會造成服務大當機,或是因權限設定錯誤造成系統被駭。

小公司用Docker也能具備不輸大公司的部署能力

為了解決大量部署的速度和正確性問題,Yahoo開發了一套內部專用的自動化部署工具稱為Igor,當時可以做到部署一臺伺服器從安裝作業系統和裝妥所需的執行環境軟體,大概只需要半小時。撒景賢表示,這在當時是非常了不起的效率,甚至傳出光只是為了能夠學習使用Igor這套工具,就值得進入Yahoo工作。

不過,同樣的部署需求,撒景賢表示,現在使用Docker只要幾分鐘就可以做到。Docker讓小公司能具備不輸Yahoo這類大公司的能力。

不過,要在Production環境中善用Docker也不是件容易的事,跟App特性有很大的關係。

啟雲目前先將Docker用於執行3D拍拍App所需的後端伺服器。這是一個可以將隨手拍攝的照片轉換成3D模型的App。一手開發這隻App的啟雲科技資訊長沈時宇解釋,手機會將拍攝到的使用者照片傳送到雲端後臺,由後臺一隻名為Avatar的程式來辨識出人臉的五官對應位置,再分區將各部分的影像貼上3D模型,只要6~7秒就可以打造出呈現這個使用者人像的3D虛擬公仔。

這隻負責3D建模的Avatar程式是一隻C++開發的執行檔,原先是Windows版本,後來為了搬上雲端環境改為Linux版。一開始推出3D拍拍時,因價格考量,先租用Azure來執行Avatar程式。

沈時宇租用了4核心的Azure虛擬機器(後簡稱VM),安裝了Ubuntu之後,並將Avatar執行檔和所需函式庫,如C++函式庫、OpenCV圖形函式庫,以及臉型資料、3D建模資料等,一併放入虛擬機器內。

當App將照片傳到Azure上的VM後,再執行一支Avatar程式來計算,完成後將公仔3D建模資料直接回傳給使用者的手機。沈時宇表示,這是一個高度需要運算能力的程式,因此每次執行一個程式就會占用了一個處理器核心,並達到100%的負載。

沈時宇使用Auzre當時還有另一個考量是,Azure可以動態增加或減少線上VM的數量。因為只有建模時才需要執行Avatar程式,多數時間,可能只需2、3臺VM就足以應付,臨時出現多人使用時才需要更多VM。Azure可以依據網路流量動態調整VM的數量,來減少租金成本。

不過,這個好處遇到了App更新卻變成了缺點。因為新創公司規模小,沈時宇一個人就得負責這隻App從開發到維運的所有工作。為了更新那些被關機的VM內的程式,他反而得一一手動啟動這些VM和內部執行環境,再一一更新程式,甚至最長得花上2天時間才能完成一次更新。但是,才開始推出新產品的啟雲科技改版速度快,幾乎每周都需要更新,這個工作反而成了沈時宇一大負擔。後來,沈時宇看到AWS的Elastic Beanstalk支援Docker,因而決定將服務轉移到AWS上來解決這個維運負擔。

一個VM執行一個Container

沈時宇在AWS上的一個VM內就只執行一個Docker的Container。他將Avatar程式和相關所需檔案的部署設定都撰寫在單一個Dockerfile中,上傳到AWS後可以建立Avatar程式所需執行環境的Docker Image檔。每次更新Avatar程式後,只要重新在AWS上部署這個Docker Image檔,就會同時將儲存在S3上的最新版本Avatar程式碼和相關函式庫一起部署到Docker Image內。

當Elastic Beanstalk每次啟動虛擬機器時,會自動依據預先上傳的Dockerfile來建立Avatar所需執行環境。即使是因動態調節用量而關閉的VM,當這個VM被Beanstalk開始時,會自動使用最新版的Docker Image來執行,也就直接升級到了最新版程式的Image,沈時宇不需像以前在Azure平臺上那樣,一一手動開啟VM來更新。

更大個好處是,撒景賢表示,有些時候,在特定國家採用當地的IaaS服務,反而可以比採用全球性的雲端服務如AWS,能夠提供更快的反應速度。改用Docker來執行後端服務後,不只能夠部署到AWS上,也能快速部署到任何可以支援Docker的雲端平臺上。「新創公司也就能夠徹底擺脫對雲端平臺的綁定。」他說。

正因為撒景賢看過Yahoo等大型網路公司,用舊方法來處理舊問題需要花費很多人力,要讓小公司具備大公司的能力,就會願意冒險使用Docker這麼新的工具。

 

 

 


Advertisement

更多 iThome相關內容