技術人攻略訪談九:逆襲!從技術編輯到雲端計算架構師

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

導語:本期採訪物件李雨來@Blacktear ,86年生人,是雲端計算創業公司迅達雲成的架構師,提供雲端計算領域的IaaS服務。畢業於北工大機械專業的他,曾有過長達兩年半的技術編輯生涯,對程式設計的熱愛支援著他成長,出版社的工作也拓展了他的技術視野。在雲端計算剛進入中國的時候,成功地把握住了職業轉型的機會,在實踐中成長為優秀的架構師。除了個人的成長經歷,他還談到在雲端計算領域的實踐經驗和感悟,強調開發要站在運維的角度看問題,在雲端計算時代,開發和運維的結合將變得越來越重要。
 

技術編輯到開發

“搞程式設計這行如果不是興趣驅動的話,永遠會覺得它只是一個工具,如果非常有興趣,就會發現很多樂趣。計算機行業更新這麼快,如果只是上班工作,下班回家什麼也不想,那麼用不了幾年就會被淘汰。”

  • 技術人攻略:你從什麼時候開始接觸程式設計?

我從小學就開始接觸電腦,通過Basic對程式設計建立了一些感性的認識,高中開始學計算機二級C語言的書。可是考大學由於分數不夠,進了機械工程及自動化專業。但還是很喜歡計算機,就一直泡圖書館看相關的書,通過一些小專案積累經驗。計算機這個領域很偏實踐,看書上的理論是一回事,真正動手做了之後再反思自己做的東西,會對理論有更深的理解。
* 技術人攻略:為什麼畢業的時候沒有找開發的工作,而是進了出版社做技術編輯?

因為不是計算機專業出身的,HR那關就過不了,那會兒也沒有人脈可以推薦工作,就去了電子工業出版社的博文視點,做了兩年多的技術編輯,工作主要是跟蹤一些技術趨勢,聯絡作者做一些書。
也寫了一些程式,根據書的銷售的資料,做一些類似大資料處理的工作。當時出版社的電腦都是很普通的桌上型電腦,計算能力有限,所以用了分散式的方式來實現計算。還有就是從各個網站上抓一些帖子做資料分析。出版社離書比較近,對視野的開闊有幫助,所以感覺這段時間跟讀了個研究生似的。
* 技術人攻略:後來什麼時候開始真正的做開發?

在出版社的工作畢竟不是自己最喜歡做的,2010年雲端計算剛開始進入中國,正好有機會可以去一家美國的雲端計算公司做開發,於是就辭職加入了。很多人都感覺我跳槽的這個跨度很大,我自己卻覺得還行,在出版社出書也是教別人怎麼做Coding,如果你想把一個事兒給大家說明白的話,你自己得先明白。
搞程式設計這行如果不是興趣驅動的話,永遠會覺得它只是一個工具,如果非常有興趣,就會發現很多樂趣。計算機行業更新這麼快,如果只是上班工作,下班回家什麼也不想,那麼用不了幾年就會被淘汰。我是學機械的,機械這個行業發展了幾百年已經很成熟了,搞機械的人都知道本叫做機械設計手冊的書,基本上你想要做的設計,所有的能拿到的標準件的尺寸,能承受的強度,查手冊都能查出來。而計算機這行發展才幾十年,沒有這樣固定的模式,如果沒有很強興趣驅動,很快就會落後。
 

雲時代的開發和運維

“雲端計算這塊遇到的主要問題不是程式設計,而是運維上的問題,更多考慮的不僅僅是效能,還包括如何保證穩定性。”

  • 技術人攻略:在工作中遇到最大的挑戰是什麼?做雲端計算的難點在什麼地方?

挑戰最大的是在China Cache工作的時候,要從頭到尾搭一套以KVM為基礎的雲端計算平臺。當時考慮過OpenStack,但當時OpenStack的架構還不夠成熟,在跨資料中心部署的情況下會有一些安全性的問題。所以後來完全重新寫了一套,通過這個挑戰在技術上成長得很快。
雲端計算這塊遇到的主要問題不是程式設計,而是運維上的問題,更多考慮的不僅僅是效能,還包括如何保證穩定性。為客戶提供服務,程式要寫得很嚴謹,系統在應用一些配置的時候,要設計如果失敗的話回退怎麼辦;另外要考慮穩定性的因素,因為中國的網路環境不是太好,在公網上跑一些東西的時候,大網抖動一下,或者某個資料中心到一個核心節點的鏈路不是很好,導致一些資料連線的中斷,怎麼能重建連線,怎麼自動做一些重置,怎麼保證叢集的穩定性,程式必須具備自動診斷、自動恢復的功能。純Hadoop那套東西全在內網,不用考慮網路環境的問題,雲端計算的伺服器都在公網上,怎麼向伺服器傳送一些訊息,伺服器怎麼保證訊息能收到,這些是需要積累經驗的,好多經驗也都是四處碰壁碰來的。
另外一個難點就是對知識面的要求很高,做IaaS****要讓整個資料中心實現自動化,需要了解包括伺服器、交換機、網路、儲存,並且這幾部分如何整合起來,作為一個服務對外提供。雲端計算的運維不是簡單的會用Linux,不僅是做一些維護性的操作,還要和開發一起討論整個系統的物理架構是什麼樣的,交換機的配置是怎麼做的,網路是怎麼搭的。因為牽扯到太多的系統,所以對於運維的要求非常高,出問題原因有可能是系統的bug,也有可能是資料中心的網路等,怎麼去快速的定位、解決問題,有很高的技術含量。對於一個複雜系統來說,想了解哪兒出了問題,複雜度不亞於給人看病,而且有時候並不簡簡單單是一個問題,可能是好幾個地方的故障引發的導致嚴重問題。
* 技術人攻略:雲端計算時代的開發和運維工作是不是會更緊密的融合?

我自己很喜歡學習一些運維自動化的東西,可以開拓視野。做後臺系統的工程師很有必要多瞭解一些運維知識,因為做出來的系統一方面是給業務人員用,另外一個潛在的客戶就是運維團隊的同事。如果運維在部署系統的時候覺得吃力,可想而知這個系統寫得有多糟,如果運維不部署你的系統,系統一點意義都沒有。開發在搭測試環境的時候,其實相當於做了一部分運維的事兒,這個過程中開發工程師可以想想用什麼方式讓它變得更簡單。還有就是自動化部署,用自動化工具來做重複性的工作,這樣可以保證持續Release,增強工程師的滿足感,另外也可以降低出錯的機率。如果能達到Devops的效果更好,就是開發運維化、運維開發化,這兩個團隊其實是一個團隊了。
運維其實挺苦逼的,幹好了沒人說你好,稍微出點錯就捱罵。越牛的運維越是拿錢砸出來的,如果沒摔過跟頭,就不可能知道地上哪兒有坑。有的公司對於運維犯錯這個事兒的思路不太對,運維捅一大簍子,就把人開了招新人,但新人更有可能犯錯,而老人不太會犯同樣的錯誤。運維對於產品來說很重要,能不能讓系統不出大問題,出了問題之後能不能很快恢復。就跟軍隊一樣,養兵千日用兵一時,但是很多公司沒有把運維當軍隊,就當掃地的使。
* 技術人攻略:你現在所在的這家公司是雲端計算領域的創業公司,你對現在雲端計算創業的市場環境怎麼看?

現在雲端計算創業這塊創業的人多了,快到了當年大批量上團購的階段。技術含量也已經被壓了下來,因為OpenStack的開源架構已經很成熟,很方便就能搭出一套雲平臺,整個行業對雲端計算的接受程度也越來越高。
不過我們公司的系統完全是自己搭的,一方面因為之前在雲端計算這塊積累過很多經驗,另一方面,如果完全搭在OpenStack的環境下,會受限制,並且二次開發的工作量也不小。OpenStack****像一個大而全的東西,用起來比較複雜,如果自己做,基於自身的業務特點做技術選型,可以把事情做得更專業,運維起來也更容易。OpenStack的UI介面做得不夠好,需要二次開發,做跟自己業務相關的一套東西。如果不用社群做的一鍵化部署工具的話,OpenStack對運維也很不友好,需要配置的東西太多。
我們公司提供的服務目前還是主要是基於IaaS這層,主要面向遊戲客戶,對他們來說採用IaaS更靈活,因為已經積累了一些規則、業務運營模式和系統,用PaaS的方式他們也不一定能接受。
 

學語言像周遊世界

“打個比方,如果你瞭解的語言特別多,等於是在周遊世界;如果對某個語言瞭解得很深,就類似於把北京城每一個角落都去了一遍。因此,當見識過很多東西,對其他語言設計的理念有了解之後,你的視野就變得更開闊了。”

  • 技術人攻略:在開發語言的選擇上你有什麼傾向和建議嗎?

語言我用得挺雜的。在語言選擇這塊,我傾向於會得越多越好。打個比方,如果你瞭解的語言特別多,等於是在周遊世界;如果對某個語言瞭解得很深,就類似於把北京城每一個角落都去了一遍。因此,當見識過很多東西,對其他語言設計的理念有了解之後,你的視野就變得更開闊了。當然對初學者來說,還是應該先對某一門語言瞭解到一定程度之後,再拓展到其他程式語言會比較好。不同的語言在處理一些特殊的情況下,有不同的做法,例如同樣實現一個根據配置呼叫不同程式碼處理資料的功能,Java和Python的實現方式就會不一樣,Java會用到介面和工廠類,動態語言則可以直接根據配置拼出一個函式名調函式。不管用什麼語言,目標就是把問題解決了,根據不同的情況選擇適合的語言。對創業企業來說,用Java搭一套Web介面的人力成本和時間成本遠高於用ROR,所以語言選擇不在於技術本身,跟時間、成本都有關係。
* 技術人攻略:如果不考慮工作的話,你想開發什麼東西?

比較感興趣的還是做一些智慧家居的東西,搞一些軟體和硬體結合的事兒,例如可以通過iPad控制家裡的洗衣機、冰箱等。我個人對硬體還是有點興趣,計算機不能只停留在一個方盒子裡,得讓他出來。有的人擔心技術的發展會帶來更多的問題,我舉個航空工業的例子,飛機的自動駕駛系統發明以前,空難的問題主要是人犯的錯誤所帶來的,自動駕駛系統發明之後雖然有時候會失靈,但可以在有問題的時候切換回手動,技術很多時候是有兩面性的,不能因此否定自動駕駛系統對航空工業發展所起到的作用。
* 技術人攻略:有沒有你特別欣賞的人或者公司?

每個人都有他自己的優點,聞道有先後,術業有專攻,在一線做Coding的人應該保持謙虛的心態。
* 技術人攻略:你做技術編輯的時候看了不少書,能不能推薦一些有價值的書?

我覺得看書是一個過程,不是說看了幾本書,就能把計算機領域的東西弄得很清楚了。而且計算機有很多不同的領域,不是你都看過一遍就行了,這幾個領域之間有先後的順序,如果不瞭解最初的CPU長什麼樣,直接看Intel的CPU手冊就跟看天書差不多。任何東西都是循序漸進演化過來的,最重要的是本質上的那些東西,例如CPU再怎麼演化也不會逃出馮諾依曼的架構。
很多學計算機的人對微控制器瞭解不多,微控制器可以理解為x86架構的一個鼻祖設計。如果你寫一個程式,用現在的程式語言足夠解決問題的話,沒必要看硬體的東西,但如果想提升你的知識,瞭解作業系統到底怎麼幹活、硬體匯流排之間的定址是怎麼工作的,那麼推薦有精力的人看看8051和數位電路。計算機是以數位電路為基礎的一門學科,逐漸發展過來,****CPU****看似很複雜,但還是從閘電路演化過來的,如果學過數位電路,瞭解怎麼設計加法器、微控制器,用微控制器做一些小的裝置,對你瞭解計算機會有很大幫助。
程式設計方面的書,推薦《Java程式設計思想》,看了這本書之後,會提升對物件導向和java類庫的瞭解。看書應該邊看邊做,做得差不多的時候再去想,想完之後回來再去看一些東西,在這麼一個閉環的過程中逐漸進步。
 

技術人攻略訪談是關於技術人生活和成長的系列訪問,歡迎和我們有共同價值觀的你關注“技術人攻略”,郵箱 [email protected],新浪微博 @devlevelup,希望能成為技術人成長的精神家園。
歡迎通過微信公眾賬號關注技術人攻略

相關文章

雲端運算 最新文章