【杭研大咖說】王新勇:死磕雲原生的“懶人”

在生活中,作爲戶外運動愛好者,王新勇常常於週末爬山,享受攀越高峯之後見到的無限風光 ;在工作上,作爲網易杭州研究院(網易杭研)的系統開發專家,王新勇則鍾情於徵服雲計算領域的一座座“山峯”。業務部門邀請他去排查問題,常常驚異於他找出異常的速度和解決故障的效率,心悅誠服地稱他爲“大神”。

然而,在王新勇看來,自己不過是一個“懶人”。因爲“懶”於投簡歷、筆試、面試,研究生一畢業就早早鎖定聲名在外、環境獨特的網易杭研的工作;因爲“懶”於做重複的事情,儘量把重複的需求都寫成代碼,儘量採用自動化(或者說DevOps)工具;因爲“懶”於查閱所需要的知識,把常用的技術細節、工具用法都裝到自己大腦之中……正是這些懶人舉動,讓他的工作事半功倍,面對難題時舉重若輕。
 

網易杭州研究院系統開發專家 王新勇

求職“懶”:做有趣的事

2013年,王新勇研究生畢業。相比一些同學不停地跑場,不停地投簡歷,不停地筆試、面試,王新勇顯得比較懶,在拿到網易的offer(也是第一個offer)之後,便決定放棄其他所有的面試和筆試。一來網易是成熟的大公司,工作環境、福利業界有名;二來杭州離安徽老家不遠;三來實習期爲多拿幾份offer奔波太累。

當然,“懶”也不是無條件的,前提是這份工作足夠“有趣”。在王新勇的認知裏,“有趣”的莫過於底層開發。

在學校,在實習期間,他鼓搗的都是與網絡、分佈式通信中間件相關的東西。實習時使用了一些現在看來比較過時的技術,比如自適配通信環境ACE (ADAPTIVE Communication Environment)、CORBA等。他還主導過一個DDS(Data Distribution Service,OMG的規範)的實現,並把這個服務跑在各種硬件架構的系統上,有些系統甚至還沒有POSIX接口支持,需要基於平臺相關的接口進行開發。這些經歷,加深了他對網絡協議棧、硬件知識以及操作系統的理解。

網易杭研當時在集團內推廣的雲計算,對於王新勇而言是有趣的。儘管在網易杭研雲計算技術部總監,信奉技術至上的陳諤的帶領下,團隊無論校招或社招,對求職者技術能力的要求都達到了近乎偏執的程度,王新勇還是順利地拿到了這份offer。用他的話說,有趣的事情,更能夠激發他的能力,更容易讓他做好。

加入網易後,王新勇參與了開源項目Pomelo的研發,這是一個使用Node.js寫的遊戲服務端引擎。之後基於Pomelo引擎做了網易內部的消息推送系統,用於給移動端做消息推送,該系統是網易內部使用最廣泛的平臺之一,目前還在持續維護中,高峯期的同時在線併發連接數超過1000萬。

再後來,他開始參與設計和開發網易雲的負載均衡服務(NLB),這個服務屬於雲計算的核心服務之一,負責做應用的流量分發,目前大範圍應用於網易互聯網業務中。

2018年起,王新勇開始負責容器以及Kubernetes平臺的開發、維護以及對內的諮詢工作。主要工作一是針對開源的Kubernetes以及容器,進行插件以及擴展的開發和定製,包括網絡插件CNI,存儲插件CSI,以及一些調度擴展等,實現開源項目與網易內部基礎設施及業務需求的無縫結合;二是負責維護整個容器生態的軟件包發佈,同時跟據業務使用中遇到的問題,對這些軟件進行bugfix或者backport上游的bugfix;三是針對內部業務進行容器化的方式、方案、過程進行指導和建議,幫助各個業務方解決在實際容器化過程中遇到的各類與Docker、Kubernetes相關的問題,並形成沉澱。

容器以及Kubernetes服務,作爲容器雲模塊被集成到網易輕舟微服務平臺中,目前已經服務了包括網易嚴選、網易傳媒、網易雲音樂、考拉海購等業務。最大的集羣規模是考拉海購的線上業務集羣,而且已經經過了雙十一、黑五大促的考驗。

這些經歷,這些成果,讓王新勇更加確信,他在網易杭研的工作,就是“和一羣有趣的人,一起做着有趣的事”。
 

工作“懶”:死磕雲原生技術

雲原生、容器在今天是主流技術,但容器的價值在四五年前並未廣爲人知。從Docker開始出現,網易杭研就預見到了容器的好前景。在王新勇看來,Docker可以滿足“懶”的需求,它提出的鏡像打包技術是基礎設施的一個很大的進步。在這之前,爲了實現不可變基礎設施的理念,需要要通過雲主機快照的方式,在雲上完成類似的部署的一致性,整個過程非常重。而容器技術,這種不涉及虛擬化的打包技術,使得這種“不可變基礎設施”的理念,無論是公有云上,還是在私有數據中心,都可以非常方便地使用。

今天,Kubernetes編排、微服務化、Service Mesh、Serverless等技術,都是圍繞容器來設計的。最新Linux的LTS版本4.19的內核,對於容器的支持也越來越穩定,修復了不少之前版本的bug。由此,王新勇認爲,在沒有新的顛覆性的技術出現之前,容器技術將會一直在IT基礎設施層面扮演一個非常核心的角色。在網易內部,當前的互聯網業務,都已經實踐了或者正在準備容器化。目前看來,容器化確實是一個值得死磕的技術方向。

當然,容器化並不容易。從網易的實踐來看,容器化主要有兩大挑戰:

首先是業務方對容器化的不適應,之前使用物理機以及虛擬機的很多玩法,在容器化的場景下,發生了變化。比如容器化以後,容器的IP將不再固定,之前的很多基於IP做白名單、基於IP提供服務的做法,就不再適用了;包括一些監控metric信息,使用容器後的獲取方式、展示形式也與之前有差別;具體運維操作上,之前的運維都是命令式的,轉向Kubernetes之後,變成了聲明式的,但是大家的運維思路上,還是原來的命令式的玩法,也會有不適感。

其次,大規模的容器化面臨很多技術上的挑戰,比如Docker會有bug;操作系統包括一直到4.9內核,在cgroups的支持上,都還有不少bug;不同的業務類型,需要進行針對性的調優;隨着集羣規模的增大,硬件故障的概率會大幅增加哎,需要緩解機器硬件問題導致宕機的影響。

針對這兩類問題,王新勇和他的團隊都給出了他們的答案。

針對業務的不適應,團隊會提供大量的諮詢和支持服務,會去了解業務的第一手需求,(需求一經轉述,需求可能就變形了),然後根據業務的第一手需求,給出較好的實踐建議,幫助業務更好地去使用Kubernetes。另一方面,比如針對大家的IP白名單需求,團隊也做了自己的全局IP管理服務,支持了容器的池化分配以及一些特殊容器的IP固定,通過這些方式去降低業務在容器化改造中的不適。另外,在網絡方面,雲網絡也和容器團隊一起,做了大量方便業務方遷移的解決方案。

針對技術上的挑戰,團隊做了大量的優化工作。從操作系統、Docker等系統軟件的bugfix以及參數優化,到部署架構根據用戶的需求做持續的調整優化;同時也梳理常見問題的應急處置方式,形成經驗積累。對於所有用戶遇到的bug,都不放過,會持續跟進尋找root cause。目前,用戶一旦報障,或者通過監控系統監控到故障後,團隊基本上都能很快地在積累下來的故障情況中找到故障類型,並能夠迅速按照緩解恢復方案,快速完成恢復。

容器只是雲原生的開始,當前比較火的技術,微服務化、Service Mesh、AIOps、Serverless、混沌測試等,接下來都會逐步落地。當然,也有一些問題需要解決,比如:

微服務化以後,系統拆得很散,如何做系統的跟蹤、監控;
Service Mesh由於引入了proxy,對業務的調用延遲有影響,怎樣優化;
獲取到大量的監控數據的情況下,如何能夠更好地幫助業務做出診斷;
針對一些事件觸發型的業務,可以引入FaaS(函數即服務),在引入FaaS之後,如何解決冷啓動的延遲,如何做更好的資源調度,也引入了不少挑戰;
當前混沌測試的話題隨着雲計算的普及也變得熱了起來,畢竟雲計算並不保證100%的SLA。如何做更好的故障模擬,幫助業務方發現問題於暴露之前,也是一個挑戰。
總的來說,當前大家已經逐步從使用雲原生和容器技術,轉向了怎樣用好雲原生和容器技術。王新勇表示,作爲基礎設施服務提供者,團隊也會在這些方面持續投入,以輕舟平臺爲載體,幫助業務能夠把容器技術用好,達到提效降本。
 

學習“懶”:技術細節與工具爛熟於心

應對雲原生挑戰也是一個浩大的工程,然則如何才能保持懶人本色,不至於陷入“996”的泥淖之中?王新勇的回答是,要更“懶”,多思考自己的工作,重複的事情,最多做兩遍,如果要做第三遍,就要寫代碼了。

他相信磨刀不誤砍柴工,“不管再忙,都要儘量去深入瞭解工作相關的技術細節”,他說,雖然當時可能用不到,但是一旦用到了,比如排障時,胸中有細節,就可以節省很多時間。設計一些新系統時,對細節理解到位,也可以縮短調研時間,達到事半功倍的效果,同時也能提升自己在職場的競爭力。

對於王新勇來說,雲原生是有趣的技術方向,他能夠保持好奇心,更深入地去了解相關技術的實現細節。“一旦你決定去深入瞭解某一個技術的細節的時候,你就會發現你不得不去了解更多的周邊知識,結果就是從線到面,不斷拓寬自己的知識面。”

王新勇分享說,多年前接觸過的一位大牛告訴他,“你所有要學的知識其實都不用搜索,都在自己電腦的本地”。從那以後,他就養成了閱讀Linux man的習慣,每當好奇某一個東西如何實現時,他就習慣性地先閱讀man,然後再去閱讀代碼,就比較容易理解代碼了。他表示,這個習慣對他的幫助很大。

同時,對於常用工具的使用,也要做到爛熟於心。有很多人並不習慣深入地瞭解一些常用工具的用法,每次用到時都要去網上臨時搜索,或者整理了自己一些常用的用法記到小本本上。王新勇認爲,這樣帶來的問題就是如果每次都去查一下,不管是網上搜索還是查自己的小本本,都會浪費很多時間,還要回憶上下文。

知彼知己,百戰不殆,這其實與容器化技術挑戰的處理如出一轍。對於容器化相關的問題,王新勇同樣爛熟於心。目前團隊基本上沒有遇到過,出現bug或者用戶報障後,故障情形不在已知故障列表中的情形。“現在,業務方給我們報障後,我們都可以很快地給出解決方案,因爲好多問題,對於我們來說都是已知的。”他自信地說。

發佈了652 篇原創文章 · 獲贊 284 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章