Docker 的優(yōu)點
615
2025-04-03
2016年4月,我接到了華為的招聘電話:“我們急缺懂數(shù)據(jù)庫和JAVA的人,你愿意來嗎?”
說起華為我并不陌生,十幾年前我畢業(yè)那會兒,聽說華為“待遇好,工作強度大”,所以我選擇了“福利好,時薪高”的外企。
而如今,外企卻是王小二過年一年不如一年,競爭力江河日下,我也即將面臨中年危機。
反復(fù)權(quán)衡之后,我決定放手一搏,加入華為。
從懷疑人生到小試身手
我做了十幾年的軟件項目,從電力到金融,從電商到汽車,基本上都圍繞著數(shù)據(jù)庫和JAVA展開。但加入新部門后,我發(fā)現(xiàn)實際的工作內(nèi)容與預(yù)期大相徑庭——華為的數(shù)據(jù)庫使用的是華為自研產(chǎn)品。語言雖然是JAVA,但框架卻從沒聽過。業(yè)務(wù)場景基本是圍繞通信的,與傳統(tǒng)互聯(lián)網(wǎng)業(yè)務(wù)差距很大。這意味著我一半的技能點白點了。
我參與的項目是DCN控制器,目標就是用一套軟件系統(tǒng)控制物理數(shù)據(jù)中心內(nèi)的所有網(wǎng)絡(luò)產(chǎn)品,不但包含交換機、防火墻等硬件產(chǎn)品,而且也包含軟件產(chǎn)品。部署我們的軟件之后,網(wǎng)絡(luò)管理員只需要坐在辦公室,登陸我們的軟件系統(tǒng),點點鼠標,就可以遙控數(shù)據(jù)中心的網(wǎng)絡(luò)配置,不再需要跑機房,拉網(wǎng)線或者在網(wǎng)絡(luò)設(shè)備上敲一堆晦澀難懂的命令。
由于這是產(chǎn)品的第一個版本,從平臺到業(yè)務(wù)都是全新的代碼,聯(lián)調(diào)進展比較緩慢。與此同時,沒有版本也意味著一線無貨可賣,一線對版本的交付時間咬得很死,項目進展異常挑戰(zhàn)。
好在整個團隊沒有誰撂挑子,逐個問題死磕,感覺無時無刻不是在寫代碼、改bug,經(jīng)常調(diào)通了一個接口,一看時間已經(jīng)是第二天了。
就這樣,我一邊參與項目,一邊惡補通信知識。我逐步了解到,產(chǎn)品的框架雖源于開源項目,但僅限于通信行業(yè),和我熟悉的IT框架不同,技術(shù)圈相對封閉。我琢磨著,按這個節(jié)奏學(xué)下去,自己得花上個兩三年才能基本掌握產(chǎn)品技術(shù)。這么一折騰,豈不是和剛畢業(yè)的大學(xué)生站在同一起跑線上了嗎?
就在我懷疑人生時,產(chǎn)品遇到一個棘手的問題——并發(fā)性能不達預(yù)期且存在概率性失敗。這就意味著多臺虛擬機同時加入網(wǎng)絡(luò)時,系統(tǒng)響應(yīng)會變慢,甚至影響到正常業(yè)務(wù)。項目組立即抽調(diào)精兵組織攻關(guān)。
專家們檢視了平臺機制和業(yè)務(wù)代碼,但沒找到問題所在。出于對數(shù)據(jù)庫技術(shù)的敏感,我推測是編排過程中產(chǎn)生的大量“鎖”造成的。就好比只有一個門的房間,遇到緊急情況,大家都想奪門而出,結(jié)果都被卡在門里了。要降低沖突概率,就必須讓大家有序出門,防止卡住,也就是梳理鎖順序,避免死鎖。
我把想法與思路和盤托出,獲得了大家的認可。在業(yè)務(wù)專家的配合下,我系統(tǒng)梳理場景并嘗試加入了新的鎖機制,不到幾天時間,便徹底解決了并發(fā)問題。我也在部門里多了一個“性能專家”的Title。此刻,我的心情豁然開朗,沒想到這么快就有機會一顯身手了。
武功再高也怕菜刀
幾個月后,部門籌建公共組,旨在解決控制器產(chǎn)品中的疑難雜癥和共性問題,并對接平臺團隊,我也光榮的成為其中一員。
不久,我就接到了第一個挑戰(zhàn)任務(wù)——容器網(wǎng)絡(luò)高并發(fā)解決方案,目標是達到每分鐘要處理1萬個虛擬機的上線請求,這樣我們的系統(tǒng)不但可以對接公有云,也可以應(yīng)付物聯(lián)網(wǎng)、車聯(lián)網(wǎng)這種終端上下線非常頻繁的網(wǎng)絡(luò)場景。
對于控制器來說,性能要優(yōu)化250倍,分明是“大躍進”。再說了,我們產(chǎn)品的優(yōu)勢是強一致性,現(xiàn)在要和友商比拼性能,就好比讓坦克和小轎車去飆速度,臣妾做不到啊!
但我轉(zhuǎn)念一想,目標越是挑戰(zhàn)不就越能體現(xiàn)自我價值嗎?退一步說,如果換個任務(wù),那些聞所未聞的通信場景,我就有把握搞得定嗎?要干就干吧!
性能優(yōu)化,我自認還是很有經(jīng)驗的,對內(nèi)存、CPU、線程一通分析,很容易追蹤到問題代碼。經(jīng)過一個月的優(yōu)化,性能提升到了每分鐘處理500個虛擬機上線請求,相比優(yōu)化前提升12倍。
再往后就比較難了,明顯的問題點已經(jīng)找完了,優(yōu)化進展逐漸停滯。那時候我在吃飯過程中、上下班的路上,甚至在夢里都在琢磨著如何優(yōu)化方案,可實際的優(yōu)化效果卻不盡人意。
這時候領(lǐng)導(dǎo)來給我減壓,問我最多能優(yōu)化到多少?我給自己留了點余地,說“每分鐘1000個吧,最多2000個。”
領(lǐng)導(dǎo)說:“行,那我們就先定個小目標:每分鐘1000個請求。”
雖然依舊沒有好方案,但目標降低了,壓力瞬間小了,我決定靜下心把代碼系統(tǒng)地捋一捋。
功夫不負有心人,我很快就有了新發(fā)現(xiàn):雖然很多產(chǎn)品代碼曾經(jīng)優(yōu)化過,但是這些代碼都是自研開發(fā)的。
實際上,相關(guān)的開源產(chǎn)品在IT大廠中已經(jīng)廣泛使用,可以節(jié)約大量的開發(fā)成本。
并且,常用的開源產(chǎn)品,性能和質(zhì)量往往都是業(yè)界領(lǐng)先的。當然,缺點是難以響應(yīng)定制需求。
權(quán)衡再三,基于項目實際情況,我決定把開源方案引入到產(chǎn)品中,嘗試替代自研模塊,觀察效果。
沒想到經(jīng)過一番搗鼓后,性能居然翻了幾倍。看來武功再高也怕菜刀!經(jīng)過這輪優(yōu)化,并發(fā)性能達到了每分鐘2000個請求。
春節(jié)閉關(guān),挑戰(zhàn)業(yè)界最高性能
我美滋滋地想,這回可以交差了吧?
沒想到,領(lǐng)導(dǎo)又來鼓勵我了:“若冰,干得漂亮!不過,每分鐘處理1萬個請求代表著業(yè)界最高性能,你的鉆研能力我們有目共睹,我相信你一定能搞得定!”
其實到了這份上,如果就此打住我也有點不甘心,為啥不突破業(yè)界最高峰呢?可是問題代碼已經(jīng)整改了,開源中間件也用上了。如果再優(yōu)化,那只有改動流程和機制了,但是這樣做,改動量和風(fēng)險都會非常大。
肥肉吃完了只能啃硬骨頭了。我第一個想到的方案是拿“長事務(wù)”動刀。
事務(wù)是指需要保障業(yè)務(wù)完整性的一串關(guān)聯(lián)操作。比如去銀行轉(zhuǎn)賬就是一個事務(wù)。正常情況下會從我的賬戶劃款到對方賬戶,即使失敗了,我們倆的賬戶都沒有變化。絕不允許出現(xiàn)我的賬戶上錢沒了,對方賬戶上也沒到賬的事。
傳統(tǒng)的IT事務(wù)只需要保證數(shù)據(jù)庫的賬面數(shù)據(jù)一致,而我們的長事務(wù),還要保證賬面上的錢是可提取的真金白銀,即所有網(wǎng)絡(luò)設(shè)備上的配置,不能出現(xiàn)部分成功的中間狀態(tài)。
就好比散兵作戰(zhàn)時,大家只需要朝各自的目標前進就行。但團隊作戰(zhàn)時,就需要給每個團隊配備一名指揮官負責(zé)協(xié)調(diào)數(shù)據(jù)庫和設(shè)備,讓兩者共進共退,要么全部到達指定目標,要么全退回來。
但這樣一來,靈活作戰(zhàn)能力就會變差,對整個隊伍的消耗也很大。畢竟我們的實際情況是,有時需要散兵作戰(zhàn),有時也需要團隊作戰(zhàn),如果能根據(jù)作戰(zhàn)時的實際情況,自動判斷、采用作戰(zhàn)方式,那么隊伍的戰(zhàn)斗力會變得更強。也就是說,我們可以根據(jù)業(yè)務(wù)的具體場景來判斷,是采用IT事務(wù),還是長事務(wù),最大化地提升效率。
于是,我與數(shù)據(jù)庫平臺兄弟交流我的思路,得到了一個好消息和一個壞消息:好消息是IT事務(wù)的機制平臺是現(xiàn)成的,無需額外開發(fā)。壞消息是調(diào)用流程完全不同,代碼等于要重寫。
恰逢春節(jié),我一個本地宅,既不喜歡喝酒聚餐,也不喜歡春晚。好不容易閑下來,就躺在沙發(fā)上發(fā)呆,邊躺著邊琢磨起改造的事。躺了三天,也想了三天,改造思路日漸清晰。一方面為了驗證思路,另一方面也怕過完年給忘了,干脆跑到公司寫代碼了。
春節(jié)期間公司里沒什么人,既不擔心寫到一半被人打斷,也不用擔心和別人的代碼沖突。文思泉涌般的敲了兩天代碼,再加上一天的調(diào)測,順利調(diào)通了!
緊接著一測,1萬個請求只用了53秒。居然比原定的1分鐘目標快了7秒!我興奮得向身旁的同事炫耀,我一巴掌拍在他肩膀上,由于用力過猛,加上同事正專心工作沒反應(yīng)過來,就看著200斤的小胖子,蹭地一下從座位上彈起來。揉著肩膀,一臉無辜地看著我。
TOP1風(fēng)險項目也可能很香
當我還沉浸在達成挑戰(zhàn)目標的喜悅中,領(lǐng)導(dǎo)又找到我說,有一個TOP1風(fēng)險項目,已經(jīng)向一線承諾盡快交付,截至目前6套設(shè)計方案全都被否了。一半時間浪費了,希望我能接手。
我一聽就崩潰了,這根本就是個“炸彈”好嗎?我試著先談條件:“能否延期3個月交付?”
領(lǐng)導(dǎo)說:“不行。”
我沒直接拒絕,委婉地表示:“項目情況還不清楚,先給我?guī)滋煅芯恳幌隆!?/p>
經(jīng)過詳細摸底,我了解到,這個項目主要是提供網(wǎng)絡(luò)控制器的模擬器,就像訓(xùn)練飛行員的模擬艙一樣,用戶可以在里面模擬飛行,不用擔心墜機的危險。難點在于模擬范圍覆蓋產(chǎn)品60%的功能,如果針對每個功能做開發(fā),代碼量高達上百K,顯然難以在幾個月的時間內(nèi)完成。
如果是傳統(tǒng)IT項目,我第一個想到的就是運用框架的切面技術(shù),在下發(fā)設(shè)備前對流程進行阻擊。就好比在所有的入口嵌入一個對講門鈴,連接到同一個服務(wù)員,由他提供統(tǒng)一服務(wù),而不必為每一個門口配備一個服務(wù)員。但是當前產(chǎn)品框架并不具備這種能力。
有沒有其他又快又省的辦法呢?我想到了基于JAVA字節(jié)碼技術(shù),這種技術(shù)比較古老,是在指定入口嵌入“對講門鈴”,并把“門鈴”連接到另一塊代碼程序。但有個缺點,字節(jié)碼晦澀難懂,像“屠龍之術(shù)”一樣一直沒機會實戰(zhàn)。
我向項目組介紹了思路,大家不置可否。不過,既然沒有其他方案,就死馬當活馬醫(yī)吧!
因為手上還有其他事情要結(jié)尾,我先和項目組的“90后”小伙伴詳細介紹了字節(jié)碼技術(shù),就任由他去搗鼓了。結(jié)果三天過去了,小伙伴啥也沒匯報。
我覺得有些不妙,主動問了一下,結(jié)果發(fā)現(xiàn)這位同學(xué)在最基礎(chǔ)的JAVA問題上卡殼了。這才知道他原先是做前端的,接觸JAVA才幾個月。
我一方面叮囑他有問題趕緊找我,一方面也有點失落:“哎,看來得我自己上了”。
萬萬沒想到,小伙伴天賦異稟,在解決了幾個簡單問題后,突然有一天和我說:“調(diào)通了!”
我將信將疑地進行確認,原來他在網(wǎng)上找了一款三方件,對字節(jié)碼技術(shù)做了封裝,只需要告訴三方件我需要把“對講門鈴”按到門上,由三方件負責(zé)完成“打孔-安放門鈴-固定螺絲”的步驟。
太贊了!我情不自禁的給他豎起了大拇指。
有了demo,剩下的就好辦了,我簡單補充了設(shè)計方案,申請評審。
方案設(shè)計雖然有些簡陋,但看到demo演示后,領(lǐng)導(dǎo)們贊不絕口。方案評審一次通過。
2個月后,項目順利進入轉(zhuǎn)測。TOP1風(fēng)險項目的名頭也被摘掉了。
正當我得意之時,測試發(fā)來了一堆問題單。起初我沒太在意,不就是bug嘛,改就是了。結(jié)果發(fā)現(xiàn)有些問題是由于前期考慮的不充分,漏了需要平臺適配的功能。如果產(chǎn)品單方面修改,不但工作量巨大,軟件架構(gòu)也會變得很脆弱。
且不說增加工作量,犧牲軟件架構(gòu)會導(dǎo)致后期的維護和擴展難度增大,這點我是無法接受的。可如果按流程來,需要先向平臺提需求,再安排開發(fā)計劃,等我們拿到適配后的版本,估計得兩三個月之后,到時候項目也黃了。
我決定“越俎代庖”,把平臺的代碼找來,一邊請教平臺的哥們,一邊自己修改聯(lián)調(diào)。調(diào)通后再申請回合代碼。平臺Committer在充分評估了代碼后,很爽快地同意了回合要求。
就這樣遇山開山,遇水搭橋,原本兩三個月的流程,一個月就搞定了。
我依然是一個“新人”
2020年伊始,我得知平臺打算逐步去掉當前框架,轉(zhuǎn)型IT框架,需要產(chǎn)品配合整改。轉(zhuǎn)IT框架可是我夢寐以求的,于是我申請加入該項目。
由于以前的框架更為包容,很多的問題、冗余和沖突在這次整改中完全暴露出來,好比建房子每個人都在添磚加瓦,但是整體設(shè)計風(fēng)格迥異,每面墻的厚度不同。切換輕量級框架就要精確計算每塊磚的位置,統(tǒng)一設(shè)計風(fēng)格。
我挑了一個最簡單的微服務(wù)作為首批改造對象。在平臺兄弟的支持下,花費一周時間研究梳理組件代碼,對現(xiàn)有問題進行風(fēng)格統(tǒng)一后,問題竟然迎刃而解。產(chǎn)品的第一個微服務(wù)很快改造完成。
后期我在改造復(fù)雜的微服務(wù)時,就沒有這么順利了,有很多還依賴平臺組件的適配,導(dǎo)致一些微服務(wù)至今還沒有改造成功。
不過,好在這種改造可以改一個上一個,不要求產(chǎn)品內(nèi)的所有微服務(wù)一下全部改造完,所以可以一點點優(yōu)化和調(diào)整。
邁出轉(zhuǎn)型IT框架這一步,似乎又回到了我熟悉的賽道。
回想加入華為的三四年,我覺得自己很幸運,趕上了華為ICT轉(zhuǎn)型,我也從當初的懵懂,到現(xiàn)在的游刃有余,還將繼續(xù)以空杯心態(tài)迎接下一個未知挑戰(zhàn)。
在華為這條大船上,我依然是一個“新人”。唯有扎根技術(shù),才可乘風(fēng)破浪,迎風(fēng)遠航。
本文為《華為人》版權(quán)所有,未經(jīng)允許不得轉(zhuǎn)載。如需轉(zhuǎn)載請聯(lián)系編輯部hwrb@huawei.com
華為人期刊
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。