「不要迷信最新技術,不要創造流程達人」!合勤科技分享星雲(Nebula)雲端服務開發經驗

合勤科技在2017年推出的星雲(Nebula)雲網路控制中心,讓旗下的網通產品,也能透過電腦、手機連接雲端來設定、管理,甚至佈署這些產品,大幅度簡化了IT人員的工作流程,也讓網管人員的工作變得更容易。那麼Nebula這個服務當初在規劃時都考慮了哪些重點?要從一個傳統被定位成硬體廠商,轉型成網路服務商,合勤又做了哪些努力?透過合勤科技創新及研發中心技術總監吳俊德的訪問,也許可以從合勤開發Nebula的經驗,給未來想要從事軟體開發的團隊有些啟發。

「不要迷信最新技術,不要創造流程達人」!合勤科技分享星雲(Nebula)雲端服務開發經驗

不要迷信最新技術

當你預計開發一個產品的時候,大概不脫兩種情況,一種是把市場上已經存在的概念加入自己的想法,往自己想要的方向做修正調整或加入新功能;另一種則是做出一個市場上沒有的全新概念產品。

但即使是做一個全新概念產品,意味著我們要重新去訂定所有的規格和標準嗎?通常一間公司裡研發部門的工程師愈多時,愈有這種想要訂定新規則的傾向,覺得別人弄的東西都不夠順手好用。

合勤開始啟動星雲(Nebula) 這個計畫在2015年,那時台灣的SDN聯盟(software-defined networking:軟體定義網路)已經成立了,所以業界已經有許多關於SDN的討論。但合勤在開發Nebula時,開宗明義第一條就是「不要發明新的Protocol(通訊協定)」。

透過網路來遠端控制設備不是新的概念,以往中華電信就可以管理你家中的小烏龜和ADSL數據機,但那時走的是封閉線路的通訊協定;星雲(Nebula)想要架構一個在雲端的控制台來控制這些網通設備,必須透過Internet來完成,其實當時有許多的通訊協定可以選擇,也可以自己再重新定義開發。

但選擇現有通訊協定的好處是,它在市場上經過了考驗,可以把資安的風險降到最低。如果自創協定一開始架構沒有想清楚,等到產品開發到後期發現設計上有漏洞時,光是修補漏洞或是砍掉重練對客戶和產品團隊來說都是相當巨大的成本。所以合勤當時是選擇使用NETCONF這個通訊協定,消除bug並強化功能,而非自己再重新定義開發通訊協定。

所以吳俊德的建議是:「應該大部分採用成熟的科技,只有部分組件可以嘗鮮,除非你有解決問題的資源或是時間足夠等待。」

「不要迷信最新技術,不要創造流程達人」!合勤科技分享星雲(Nebula)雲端服務開發經驗

資安!資安!資安!

提供一個網路服務,確保所有在網路上流通的訊息都能夠得到完整的保護是件重要的事情。星雲(Nebula)的模式是把這些交換器、AP、路由器都放在公司裡,然後使用者可以在家中或是任何一個地方,透過電腦或手機進入Internet雲端來管理這些設備,如果這個路徑是不安全的,那這個服務根本沒有人敢使用。

也許你的服務剛開始時不出名,不是攻擊的目標,但隨著你的公司發展,客戶累積到一定的程度,如果一開始就沒有把資安做好,那麼後續的損失更是不能承受的。所以資安的考慮應該在開發這個產品的第一天,就把它列入重點的項目,絕對不要讓駭客有機可趁,也不要拿自己的商譽和客戶的資料來冒險。

「開放網路軟體安全計畫 Open Web Application Security Project」簡稱OWASP,是一個非營利性的開放社群,主要目標是協助制訂網路軟體安全之標準,在OWASP的眾多計畫中,最知名大概就是「OWASP十大網路應用系統安全弱點」。這10個常見的網路應用系統安全弱點,包括跨網站指令碼、注入碼攻擊、遠端檔案含入、不安全的物件參考、網站的偽造要求......。

合勤旗下有UTM(Unified Threat Management)整合式防火牆產品,把防火牆、入侵偵測防禦、病毒防護、防垃圾郵件、網頁過濾等功能整合在同一台設備上,所以對於OWASP的要求相當清楚。

「不要迷信最新技術,不要創造流程達人」!合勤科技分享星雲(Nebula)雲端服務開發經驗

但OWASP的規範中大多是和網站相關的部分,現在進入IoT的時代,主流的MQTT通訊協定預設是沒有加密的,如果賣的是低單價的產品,不太可能花成本做加密機制。但企業設備上有客戶的各種資料,沒有加密就是把這些資料置於一個不安全的環境中,所以星雲(Nebula)在資料傳輸方面採用2048 bit等級,然後再經過設備會驗證雲端憑證,雲端也會驗證設備憑證的雙向驗證來保護資料的安全。這樣雙向驗證機制,可以避免Nebula的產品發生「中間人攻擊」(man in the middle)的狀況。

同時星雲(Nebula)的服務是架構在AWS上,因此Nebula也把不同的控制權放在不同的Amazon Virtual Private Cloud (Amazon VPC) 裡,把所有的權限一層層隔開。因為現在開發軟體服務或多或少都會使用部分的開源軟體,很難確保這些開源軟體完全沒有漏洞,所以能做的事情就是針對權限做層層把關,萬一有某個地方被攻破了,攻擊者還要多開好幾道門,才可以取得控制終端的權限。就像家裡多裝幾個鎖,可以增加行竊的難度,把失竊的風險降到最低。

在資安世界裡,沒有人敢說自己100%的安全,連大廠Intel 的CPU都會被找到漏洞,最好的策略就是做到每一項安全要求事項,千萬不要偷懶。合勤在開發產品時有一套制度化的資安流程,例如由資深工程師不斷的盯著,在平日就養成這樣的工作習慣,假設沒有在平常的工作中落實,真的出狀況時根本無法修補漏洞。

合勤發展資安產品團隊有一段時間了,資安的觀念深植人心,程式設計師在寫程式碼時也會有一定的要求,甚至禁止有些不安全的寫法。其中,權限控管是很重要的觀念,雖然很麻煩,但能夠把風險降到最低,舉個例子來說,為了工作上的方便而把一些權限很大的金鑰傳來傳去,無形之中會增加各種資安風險,這樣的工作習慣必須避免,資安永遠比方便重要。

選擇容易開發的語言和工具

做雲端服務的有一特性就是「快」,要儘快上線而且各種小改版更新速度也要快。挑選程式語言時,最好挑選開發起來最快的程式語言,或是工程師最熟練,最容易維護的語言。星雲(Nebula)開發專案要啟動時,目前很紅的Go和Docker都剛起步,還很陽春,當時最成熟的是Java,而這兩年因為機器學習很熱門的Python在當時也是選項之一。

當時公司內部有JAVA團隊,對於使用JAVA為開發工具的優點和缺點都很清楚,不過考量到未來 星雲(Nebula)勢必要處理大量的資料,加上當時熟悉Go的人才太少,而Python相對容易處理資料,開發速度也很快,所以就選擇使用Python。

至於開發環境的選擇,合勤內部是讓程式設計師自由選擇,Linux、Mac OS、Windows,自己使用哪個比較有生產力就選擇哪個。但雲端伺服器大多是架構在Linux上,所以有些在Mac OS開發的程式在本地端測試都正常,一旦上了雲端就會發生問題,久了之後有些人就會改用Linux做為開發環境。以星雲(Nebula)的團隊來說,使用Linux的人數是最多的。

合勤在選用技術工具的時候,偏好「這個工具如果有問題,你大概可以自救」的原則。例如Ansible自動化部署工具,這也是用Python開發的,在工程師會寫Python的情況下,當Ansible怪怪的,就比較有可能找出問題進行處理,另外,在選擇技術時要回答一個問題:選用這套工具是「必要」的嗎?還是因為現在很流行?想研究新技術的話可以私底下去學習,在工作上則儘量使用同一個程式語言開發出來的工具,一來大家比較熟悉,二來出問題時可以自救,就像使用槓桿,花一分力氣可以達到好幾分成果。

換個角度來看,如果因為採用了不熟悉的工具而造成難題,其他人就必須暫停手上的工作來支援,然後一個卡一個,拖延整個進度,達不到對客戶的承諾,甚至讓客戶覺得你不專業,因此公司內必須特別注意這件事,有些時候思考角度會跟新創公司追求快速產出有相當大的差異。

一般來說,新創公司傾向於追求最新的技術,這樣比較容易吸引人才和資金,但發展到一定的規模後,也會開始遇到類似的開發或維護的問題。無論是成熟的企業或新創公司,吳俊德的經驗都很值得參考:選技術這件事情,我們不太追流行。可是,如果是好的我們還是會用,只是不必要在第一時間就要用。

「不要迷信最新技術,不要創造流程達人」!合勤科技分享星雲(Nebula)雲端服務開發經驗

資料只會越來越多,長遠的穩定維運很重要

企業網通產品上線後,每天都會產生大量的資料,隨著設備數量的增加或是產品賣得愈久、功能加得愈多,這意味著需要搜集的資料也會愈來愈多。所以在選擇資料庫時,一定要把這個變數考慮進去。

「Favor operating than favor RD是我們內部的考量。」吳俊德表示,有的研發工程師會認為這款資料庫在開發、寫程式時比較好搭配、比較省時間,就會推薦選用這個資料庫。但更重要的是,資料庫一旦上線,就面臨維持穩定運作的要求,資料庫不能無法存取、不能關閉。換個角度來看,一開始沒有考慮到後續的穩定運作需求或想得不夠遠,也許一開始資料量小的時候,感受不到壓力,但隨著客戶增加、設備數量增加,資料量的增加越過某個臨界點,維運人員的聲音就會開始大了起來,為什麼?因為客戶的壓力會直接到達他們身上。所以星雲(Nebula)在選擇大數據資料庫時,考量的重點是易於管理,能穩定運作的資料庫,而不是以容易開發為優先考量,這是一個最主要的決策方針。雖然RD人員在開發初期時會比較辛苦,但是有利於產品後續的長期穩定運作。

Netflix一直到2016年才進入台灣,在星雲(Nebula)專案於2015年啟動時,已是在全球具有6917萬名訂閱用戶的大型網路公司,Netflix的技術團隊樂於分享,把他們內部使用資料庫的經驗和解決問題的方法公布在自己的部落格上。在開發Nebula的過程中,Netflix部落格上面的資料,成為很好的參考對象,而Netflix的團隊則是以維運為主要考量去開發,吸收別人的寶貴經驗,有效減低開發過程中的痛苦。

吳俊德也建議台灣的開發者可以去參加「O'Reilly Software Architecture Conference」,這個會議於2015年第一次在波士頓召開,會議的內容不是技術或是產品的使用,而是講者分享最新趨勢,或是自身的領域是如何解決問題的各種經驗分享。

「改」也是競爭力的一環

在軟體開發世界中,PM跟RD的爭執由來已久。RD大概都會覺得PM什麼都不懂卻成天要求改來改去。而PM認為關在屋子的RD是沒見過世面的偏執狂,不懂客戶要什麼又自大固執。

但吳俊德強調:「改是競爭力的一環,你能改才是你的競爭力,你不能改你就被消滅,你改的比別人慢你也會被消滅。」網路的出現讓一堆傳統媒體消失,手機的出現讓更多行業消失,不能改變的人就有很高的機率會被消滅。同樣是網路公司。Google出現後,Yahoo改得太慢就消失在行業當中,連品牌都不見了。但怎麼改,得視各個領域、各公司的文化而定。

以星雲(Nebula)來說,現在的節奏是每個禮拜上一個小改版,每三個月進一次大改版,這樣的改版頻率在台灣的其他公司中是相當少見的快,而改版最重要的依據就是「客戶需求」。「客戶導向」在合勤的核心價值中是排在第一位的,所以客戶的意見是改版最重要的依據。如果客戶覺得這個功能不好用就會馬上修正,如果大部分的客戶都在反應或需要的,一定是優先處理。

因此,吳俊德認為寫程式的人不要有「潔癖」,不需要到每一行程式碼都百分之百完美才拿出手,這樣有時會趕不上重要時程,不修改程式碼而使用替代方案能解決問題,就應該先上線,有些情況只要多花錢能解決,就應該去做,例如發現某個程式的效能不夠好,可以先提高伺服器的CPU、記憶體等等硬體規格,讓服務可以維持穩定的運作,同時為自己爭取時間去進行比較完整的修改,再根據程式修改的狀況來調整硬體規格。尤其服務建置在雲端平台上,不需要像以前一樣買機器裝機器,多花錢就可以馬上買到更多的運算能力或流量,能夠在不影響使用者的情況下爭取時間解決問題。這也是在IT業會常常談到的觀念:沒有嚴重影響的問題,就以暫時性替代應急措施(Workaround)來解決。

星雲(Nebula)的成功,跟合勤的公司文化有很大的關係。合勤旗下的交換器、路由器、AP都是自有品牌,跟以代工為主的企業在文化上有很大不同,研發人員踴躍提出自己的想法,其中有許多寶貴的意見,優化使用介面的動線,讓產品使用步驟化繁為簡,Nebula即彰顯這樣的精神,把那些傳統的企業網通設備簡化,讓IT人員不需要花去大量的學習成本,也能掌握公司的網路運作。

不要訓練出流程達人,重點是解決問題

「維運這件事情非常非常非常重要」吳俊德再三的強調,「你現在找工程師如果沒有強調DevOps,大概很難找到人」。但吳俊德建議談DevOps的核心不是技術議題,不是找「持續性整合與發佈」(Continuous Integration / Continuous Delivery)的人就能夠落實DevOps的精神,最重要的是「同理心」,他強調「這是過來人的經驗」。

只是不斷在過程中檢視,或是模組化、規格化,並不會解決運營的問題。真正需要的是同理心,也就是說你的開發人員真的有在思考維運人員問題是什麼,然後維運人員也站在開發的角度去思考問題,那麼才會互相往對方方向靠,最後找到交匯點,不然到最後就會變成「流程達人」,在做稽核的人一樣,只知道流程。「你要先這樣,才可以這樣,然後那樣就不能先動」,所有的東西都照流程走一點都不難,但容易掉入大家照章辦事,「你叫我做我就做,你沒叫我做我就不做」的陷阱中。這很容易造成客戶的體驗不好,因為你內部溝通的方式和問題客戶看不到,也不用關心。客戶需要的是優質的雲端服務,是要很順利的維持網站運作,而這些都需要同理心才能完成, 不是死板板的規定。

當有同理心的時候,很多的工具使用或技術手段就沒有「絕對性」,無所謂一定需要什麼工具或技術才能做得到,重點是有沒有去解決問題。

打造優質雲端應用服務

最後,吳俊德以這幾年星雲(Nebula)的開發經驗,給想要投入雲端應用服務開發的人快速總結幾個建議。首先,不需要迷信最新的技術,大部分的情境下都應該使用較為成熟的技術,也不用迷信那個程式語言或是技術工具能解決所有問題,並且應該投入資源爭取稀有的人才加入團隊。

讓網站能長久的穩定運作是最重要的目標,在此前提下,任何開發手法、管理流程都是一些技術手段而已,同理心才是整個DevOps的核心價值。如果沒有同理心,只是不斷的使用各種方法論,不會讓產品變得更好,只會創造出流於形式的「流程達人」。最後,所有的部門都不應該怕麻煩的「改」,因為雲端服務變化快速,發展出能夠快速轉身、快速修改的能力,是很重要的競爭力。

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則