李艳鹏:技术人如何修炼内功
李艷鵬:技術人如何修煉內功
?
?
?
前不久趣直播舉辦了一場技術人成長交流會。邀請了易寶支付產品中心首席架構師李艷鵬來分享。
以下是文字版:
?
有請李艷鵬老師!第一場分享是由艷鵬老師帶來的,今天非常感謝大家來到現場。艷鵬老師這本《分布式服務架構原理設計與實戰(zhàn)》的作者,之前是一個朋友介紹他來我們平臺做了一次直播,然后他相應的在服務器方面造詣比較深,他在易寶現在做首席架構師,也是技術經理,所以就覺得他在,所謂修煉內功,我們會經常說,底層才是內功,在后端方面讓李艷鵬老師來分享一下后端方面如何去修煉自己的內功?有請李艷鵬老師。
?
謝謝大家,大家下午好,我是來自易寶支付的李艷鵬,今天我給大家分享的主題就是技術人如何修煉好內功。這個內功包括技術的主題,也包括我們做人做事的主題。
?
?
?
?
那首先看一下我們今天分享的內容,我們今天一共包含四個內容。
- 第一個內容就是個人簡介。
- 第二個內容就是分布式的服務架構。
- 第三個內容就是如何修煉技術的內功。
- 最后一個內容就是如何修煉我們做人做事的內功。
?
?
?
個人簡介
?
?
?
?
首先第一部分就是個人簡介,我個人是經歷過幾家公司,然后我從畢業(yè)開始進入花旗銀行,又來到甲骨文,又在路透社和新浪微博工作過,然后我在這幾家公司負責的系統(tǒng)主要包括 K12 的教育系統(tǒng)還有外匯的交易系統(tǒng),以及一級市場的回購業(yè)務,最后在新浪微博我是負責視頻的微博項目。
?
在不同公司,經歷過金融公司,也經歷過社交媒體的公司,不同公司業(yè)務有不同特點,比如說社交媒體其實它的量級比較大,但它的準確性并不是最大最好的,比如說在社交媒體的一家公司,其實有兩千個出錯的時候,只有一個會來反饋投訴,但是在金融公司是不一樣的,在金融公司只要你有一例出錯的,那要不是老板來找你,要不然就是你的客戶來找你,所以金融公司的特點更注重準確性,當然他的量級也是很大的。
?
?
?
?
接下來我介紹一下我現在的工作,然后我現在在易寶支付,我是產品中心的首席架構師,我主要做產品中心的架構規(guī)劃與落地,我還有一些其他職責,然后這些職責包括核心系統(tǒng)的建設與維護,主要包括交易,支付,渠道,還有商戶平臺等。我還負責一些技術規(guī)范的建設和推廣,以及金融行業(yè)中最重要的資金底線防火墻的建設,大家都知道金融行業(yè)是跟錢打交道的,那這個錢只要一有損失,這個損失就是非常大的,所以我在這邊還負責資金底線的一個建設,然后還有,我還負責整體性能優(yōu)化等等。
?
?
?
分布式的服務架構
?
?
?
?
第二部分就是分布式的服務架構,我們總體看一下它的目標,目標主要包含六個方面,這六個方面都是什么呢?
?
第一就是高可用,第二就是高性能,第三就是可伸縮性,第四就是可擴展性,第五就是安全性,第六就是一致性。我們一個一個來說這六個目標,它們是怎么實現的?
?
這六個目標,第一個就是可用性,我們在一般公司里邊都會用 4 個 9 或者 5 個 9 來衡量,當然我們的易寶支付是可以達到 4 個 9,那 4 個 9 是怎么實現的呢?這個我們得從影響可用性的原因來分析,這個原因有很多。
?
例如我們統(tǒng)計了一下,去年影響可用性的主要原因包括什么?主要包括就是我們上線變更的時候,會影響我們 40%,50% 的可用性,那么我們就針對這個情況,我們就增加了架構評審和設計評審,還有技術評審等等,那我們就把這一塊的窟窿堵住了,那我們可用性就可以提高上來,那下一個最重要的就是性能,大家常說性能的優(yōu)化,但是性能的優(yōu)化用什么方法來保證呢?在我們分布式服務架構里邊,最重要的就是一個分而治之的一個思想,我們通過分而治之的思想提高整個系統(tǒng)的吞吐量,然后另外一個就是由于分而治之,其實它會導致一些問題。
?
這個問題就是一致性問題。那么我們怎么解決這個一致性問題呢?是我們最困難的事,也是最有挑戰(zhàn)的事,當然如果大家感興趣,我這本書的第二章就是講一致性的問題,講一致性是怎么解決的?
?
?
?
?
第三個就是可伸縮性,是我們互聯(lián)網項目中最重要的一個特性,為什么說它是最重要的呢?因為去垂直擴展,這個性價比已經變得很低了,所以我們都去采用水平擴展,包含應用層的和數據庫層的,還有緩存等等,例如數據庫的分庫分表,緩存的分片,還有消息隊列的消峰,其實我們都是為了讓這個系統(tǒng)能夠水平伸縮起來,然后提高它的性能。
?
下一個特性就是安全性,安全性其實大家常說的,就是有我們系統(tǒng)安全性,寫代碼的安全性,數據庫的安全性,還有前端外部的安全性,但是總結起來安全性其實大家仔細想,其實只有五個目標,第一就是防泄漏,第二就是防竄改,第三就是防抵賴,第四是防偷窺,第五是防止中間人攻擊,其實所有安全性最后的目標只有這五個目標,那這五個目標怎么實現呢?
?
就是現在密碼學上的幾個技術的點,那么第一個就是加密,第二個就是簽名,第三個就是我們使用 HTTPS 的雙向認證通道,防止中間人攻擊。有了這些辦法,我們剛才所說的那五個目標,其實都可以達到的,其實安全性也并沒有那么負責,當然具體的答法和方式還是很多很多的。
?
然后我們下一個就是可擴展性,其實提到可擴展性,大家肯定覺得可擴展性和可伸縮性是一個概念,但是實際上這兩個概念其實是不一樣的,可擴展性指的這個系統(tǒng)的可修改性,將來能夠進行比較快速功能的迭代,然后快速去滿足新的市場需求,這個叫可擴展性,我們以前常說的可插拔,其實屬于可擴展性,但并不是可伸縮性。
?
最后一個就是一致性,剛才我也說了,一致性是我們實施服務化或者微服務化以后,造成一個大的問題,我們都需要去保證。
?
?
?
?
那么接下來我們進行分布式服務架構,其實我剛才介紹了一些內容,但是實際上我們很難在 20 分鐘內講的比較透徹。然后我推薦三本書,第一本書就是京東開濤寫的《億級流量網站架構核心技術》,那這本書更偏向于高并發(fā)和高可用前端系統(tǒng)的一個架構分析和設計和方法還有實踐。
?
第二本就是我和楊老師共同著的,分布式服務架構原理設計與實戰(zhàn),然后我這本書涉及到,包含了微服務化,一致性,可用性,還有大數據日志系統(tǒng)的建設,以及調用鏈系統(tǒng)建設,會包含一些 APM 的核心功能,再加上我們線上進行技術攻關和進行線上應急的一些經驗總結,以及最后的容器化還有持續(xù)集成等主題,所以這些主題總體來講更偏向于方法論和實戰(zhàn),還有一些案例,所以說推薦大家來看這本書。
?
最后一本書就是李智慧老師寫的大規(guī)模網站核心技術,就是最后一本,大家看一下李智慧老師寫的這本,大型網站技術架構核心原理與案例分析,李智慧老師寫的,其實這本書應該有好幾年了,應該好多年了,但是這本書講的原理還有概念都非常的核心,非常的重要,推薦大家也讀一下。
?
?
?
如何修煉技術的內功
?
?
?
?
?
01
如何綜合評估一個人的技術能力
? ?
?
?
下面是第三部分,其實我要分享的是如何去修煉技術的內功,我們要說如何去修煉技術的內功?我們先看一下,如果我們作為面試官,我們去面試一個候選人,我們從哪些方面全面評估這個人的技術能力?
?
大家看這三個圖,還有底下的字,其實我會根據三個層面來評估一個候選人,包括廣度,技術知識的廣度和技術知識的深度,還有技術知識的高度,那對于廣度指的是什么呢?指的是這個人做過什么事情?這個人學習過多少的知識?他用過多少語言?他屬于使用多少工具等等,主要在他的知識面和他的經驗,那什么是技術的深度呢?技術的深度就是期望每個人在某一方面一定是有造詣的,什么是造詣呢?
?
?
?
?
?
就比如說在 Java 上,你一定要了解 GC 的原理,你能夠通過調節(jié) GC 來提高它的性能,或者是你懂得我們 RDBMS 數據庫的索引原理等等,并且能把這個原理應用到你的生產實踐中,你一定要有幾個主題或幾個方面是你非常深入了解和學習過的。最后就是一個高度,高度這個事其實是我這兩年才認識到的,以前我只是拿廣度跟深度來看別人和看自己,現在又增加一個高度,高度是什么呢?就是你學這個技術有什么目的?學了這個技術能達到什么樣的生產?學了這個技術是不是現在技術的一個前沿,還是說已經淘汰好多年的一門技術?
?
所以就是說,我們一定要站在很高的高度來看這些東西,學了是不是有用的?學了將來是不是有用的?將來十年有用,將來二十年是不是有用的?所以也跟我這門課一樣,就是我們一定要修煉這個內功,因為內功是永遠不變的,就是將來你可能過十年二十年,這個內功還是一樣的。
?
?
?
?
?
02
如何修煉內功
? ? ?
?
下面主要是說我們如何去修煉這個內功?有多少方面需要我們掌握?一共有四個主題,我們先看下面兩個主題,那就是操作系統(tǒng),算法和數據結構,那先說操作系統(tǒng),其實我們現在看各種新技術,還有我們用的各種技術,其實都跟我們操作系統(tǒng)有關,而且我們發(fā)現新技術新原理,很多東西從這個操作系統(tǒng)一些核心的原理上是能找到縮影的。
?
其實舉一個非常小的例子,比如說大家說的微服務,大家是不是覺得微服務現在很火很新?但實際上在操作系統(tǒng)中是有微服務的,第一它的內核是微內核,第二我們想一下命令和管道,就是我們在實現一個復雜的日志搜索,我們一個命令接一個管道,再接一個命令,再接一個管道,其實每個命令是在完成自己它想做的事,有清晰的輸入和輸出,然后和其他的命令去配合著使用。
?
所以完全是一個微服務的思想,所以我說學技術得學它的內功,內功就是我們這些基礎一定要掌握很扎實,所以對于操作系統(tǒng)來講,我們一定要理解到它的 CPU,內存,磁盤還有網卡的 IO 等等這些原理,并且能夠根據這些資源去評估你服務的吞吐量和 TPS 響應時間等等,這個評估指的是粗略評估,就是評估是沒有精確評估的。
?
然后我們看一下算法跟數據結構,對于算法和數據結構,對于我們應用層的小伙伴們肯定是覺得,這個事,其實我們很少在應用層直接去使用到它,使用也非常簡單,但是算法和數據結構象征著我們一個人的邏輯思維和一個人思考能力,所以一定對這個東西也要掌握一些,或者是要熟悉一些。我最后有一個高級算法,高級算法是指這些,比如說動態(tài)規(guī)劃,貪婪,還有剪枝,遞歸等等,那為什么我說有高級算法呢?就是假設在座的每一位都是面試官,那來了一個小伙伴,小伙伴說我會動態(tài)規(guī)劃,我可以寫出來,我隨便一個都可以寫出來,那這個人要不是勤奮的,要不他就是非常聰明的,所以如果你會這個,一般都是會打動這個面試官的。
?
?
?
?
?
然后我們再看上邊的兩個主題,第一個是高并發(fā)的服務,第二個是大數據,其實在互聯(lián)網公司里邊主要有兩個方向,就是這兩個方向,一個就是高并發(fā)的服務,做線上服務的,一個就是大數據,那高并發(fā)的服務其實它的核心思想就是分而治之,就是我們單體系統(tǒng)架構,其實不是它的性能不能提高,是它在垂直擴展過程中,它的性價比非常低,非常貴,所以我們都用伸縮,采用分而治之的思想,但是分而治之以后產生的問題,那就是一致性的問題,因為分開了,他們的協(xié)調一定會有問題。
?
至于一致性怎么保證,還是在我書的第二章是有的。然后右上角就是大數據,其實大數據這些年特別火,但是大數據所有核心思想其實都來自于谷歌的三大論文,包括Mapreduce,Gfs,Bigtable,所有的大數據根基都來自于這三個論文,所以推薦大家都閱讀一下這三篇論文,現在網上有一些中文翻譯,當然如果英語比較好的是可以看英文版的。
?
?
?
?
?
03
目標方法論
? ?
?
?
其實我要跟大家分享的主要是目標方法論,然后這個目標方法論主要包含幾個關鍵元素就是目標原則方法和結果,這個其實來自于我們易寶支付的文化,稍微有一點點變化,沒有原封的拿過來,為什么說這個方法論非常重要呢?
?
因為我這兩年在面試還有在評審的時候,我發(fā)現一些小伙伴在做一些事情,他們不知道做這個事情是解決什么問題的?還有一些小伙伴他知道是解決什么問題,但是這個問題其實根本就不需要解決,所以就是說做任何事情之前,一定要樹立一個正確的目標,然后如果這個目標是抽象的,一定要把它分解成可衡量的一些目標,然后只有目標正確了,我們后邊做的事情才是有意義的。
?
接下來就是第二個原則,原則是什么呢?是我為了實現這個目標不能做的事情,這個是底線,這個大家肯定都是理解的,就是生活中也有很多原則。
?
接下來就是方法,就是我們要實現一個目標,其實有各種各樣的方法,方法都不一樣,那么這些方法我們要去權衡,我們要權衡他們的利弊,還有權衡他們的成本,還有權衡他們達成的效果。
?
?
?
?
我們一定要找到一個最合適的方法,或者最適合的方法,而不是找到一個最高大上的方法,我也見過很多技術方案,其實是拿很多高大上的技術,最終解決了一個很挫的問題,其實這種事情性價比比較低了,所以選擇方法一定要選擇最適合的方法,就是做架構也是要做最適合的架構,要回歸架構的簡潔之美,不要所有的事情都拿一些高大上的技術招式來應付這個結構。
?
最后一個就是產出和結果,任何一個事情最后都會看它的產出和結果,這個產出和結果和第一個目標是相對應的,你這個產出結果如果跟目標不是對應的,那這個事情就是其實是白做了,或者是偏離了,也可能有一些副作用,作用有好有壞,但是沒有滿足我們的初衷。
?
?
04
做人四原則
? ?
?
?
這個是我分享的最后一部分,就是如何修煉做事的內功,這一塊可能跟我們技術內功不太一致,但是是我和身邊的一些小伙伴們總結下來的一些生活和做事的經驗,分享給大家,希望是能夠起到一定的效果。
?
?
?
?
在這里我把它叫成一個做人的四原則,其實這四原則大家千萬不要看這個內容比較少,大家一定要詳細的去理解,可能等你時間久了,慢慢就理解到了。我們一個一個看,為什么我說它非常重要?
?
第一個就是靠譜,有腦子,衡量一個人,或者別人對你的印象,其實跑不出這兩個因素,就是靠譜有腦子,什么是靠譜呢?靠譜就是別人一想起你覺得有一種信賴感,他覺得這個人行,那什么是有腦子呢?就是比較靈活,不做作,做事情總是有門路,那這個就叫有腦子。
?
第二項就是膽大心細,樂觀,這個也是剛才李智維講的,我們做事情一定要膽大,敢于去嘗試,然后我們一定要樂觀,為什么樂觀呢?其實福禍是相通的,有福可能就有禍,有禍就有福,有句古語,我語文學的不好,忘記怎么說了,福兮禍所伏禍兮福所倚,就是無論發(fā)生什么事情,大家一定要樂觀,可能一件壞事,等你過了一個月看仍然可能是一件壞事,但是你可能過了兩個月或者兩年或者十年一看,這個事有可能是好事,所以一定要樂觀。
?
第三個好像正能量比較少,第三個就是要么忍,要么狠,要么滾。這句話什么時候適用呢?就是在座的小伙伴如果真的碰上一些坎坷了,尤其是在工作上碰到一些坎坷,不用糾結,也不用懊惱,也不用沮喪,這三條路中挑一個就可以了,往前走,因為糾結也沒用。
?
最后一個就是要善于交流,大家聽起來好像是,感覺是侃侃而談的人就是善于交流,比較圓滑的人善于交流,但是實際上其實這個不是善于交流,什么是善于交流呢?第一你要善于思考,你要善于站在別人的角度來看待你自己,你也要善于站在別人的角度看他自己,這個才叫善于交流,這樣你跟別人才能有交流,就拿現在一個心理學的非常流行的話,叫同理心,說白了就是你要能站在別人的角度來看事,但是我剛才說的那個,其實比這個要求更高,就是你站在別人的角度,不但能看他自己,你還要能看你自己,所以這個才叫善于交流。
?
?
?
成家立業(yè)還是立業(yè)成家?
?
?
?
?
這個其實跟技術沒有關系,但是我真的十分十分想跟大家分享一下,就是我相信在座的小伙伴有些人沒有成家,到底是先成家再立業(yè)呢?還是先立業(yè)再成家?這個事可能也說了幾千年,但是古語是說先成家再立業(yè),所以在這里我也推薦大家一定要早結婚,早生小孩,為什么呢?因為這樣你就會早買房子,早買房子呢,因為房子長的太快,這個大家都懂得。
?
?
?
?
最后其實我的分享就結束了,然后非常感謝大家今天來參加,感謝李智維的這次組織,我覺得組織的特別棒,特別成功,然后現在這里邊有兩個二維碼,一個二維碼是我的公眾號,一個二維碼是我的博客,我們有興趣可以關注。同時大家有什么問題大家可以向我提問,第一個提問題的人我會贈一本書,之后提問的人,我會回答你們。
?
?
?
Q&A環(huán)節(jié)
?
Q你好老師,我是 iOS 的一個小菜鳥,就是說我剛進入公司是一個初創(chuàng)公司,一直是一個人,就是說完全沒有師父帶,從 get set 請求都不會,到完成一個項目這樣子,但是我發(fā)現其中走了很多彎路,包括就是很多的 bug 解決也好,如果在這種情況下,沒有很多時間如何提升自己?還有如何小菜鳥獨立開發(fā)能力,這個您認為怎么提高比較好?
?
A好的,我先說,其實你最后一個問題,你一開始的敘述上已經解答了,因為你說你在公司其實沒人去培訓你或者培養(yǎng)你,但是你自己通過學習已經解決了這些事情,所以我相信你的自學能力肯定是很強的。
?
第二個事就是在時間上,人的時間,我干了這些活,然后我很難再有時間去給自己充電,去學習其他的內容,但是首先就是你干這些活,首先就是提高能力,再提高能力,而且在實踐的過程中,其實提高的能力是最多的,你單純的去學習很多東西,比如說我報一個大數據的班去學習它,可能未必有你真正的去找一個這樣的地,沒人帶你,你每天去鉆研,去學習,再去實踐做的快,學習的快,所以個人來講,這個事我覺得是沒有問題的。
?
另外一個時間上,其實只要你去抽時間,其實總是能抽出一些時間去學習的,比如說我也是工作特別忙,有的時候加班到九點十點,但不會說通宵加班,然后我會上下班的時候,我坐地鐵的時候一般都會拎本書,反正在坐地鐵的時候沒什么事嘛,要不我也在那站著,還不如我拿本書我看一看,上下班大家也知道北京生活是很苦逼的,上下班有一兩個小時的時間也很正常,這段學習時間其實也是挺多的。
?
再有一個就是我覺得你這種情況,可以有個一年兩年,但不適合十年八年這樣,就是等你到一定程度了,你向再往高發(fā)展的時候,你一定找到一個,比如說他要經驗比你更豐富的,能夠帶你的人,其實人生就是進圈子,加圈子,跟大師學習,就是這樣嘛,每個人都跟上面的大師學習,所以說長時間來講建議你還是走這個路,但是短時間我覺得這是沒問題的,也是一個提高的過程,也是必須的過程。
?
?
?
?
?
?
Q老師您好,我是做客戶端的,大概做了兩三年,如果想技術上有更好的提升,是不是應該有服務端的開發(fā)經驗會比較好呢?
?
A其實是這樣的,這個問題我是覺得樹業(yè)有專攻,我個人是更偏向于后端,因為我工作好多年了嘛,已經有十多年了,在工作的前些年,其實我是什么都做,那時候都叫全站工程師,從前端的 js,HTML,css,再到后端的服務,再到腳本上線等等,所有都是自己寫,那時候叫全站工程師,現在其實互聯(lián)網里邊更傾向于把這些組分成前端后端或者 DBA 組,當然在微服務化下,其實不倡導這些分,微服務化倡導一個自治的團隊,但是微服務化的實施在國內可以說沒有特別真的跟微服務化這個理想說的,就是實施的靠近的,其實大家都是在說這個概念。
?
所以整體來說,我就說現在的市場上,基本上還是前端做前端,后端做后端,然后 DBA 做 DBA,就是體現你的專業(yè)性,所我是覺得做客戶端我們就專心做客戶端,因為客戶端也是很深奧的,比如說客戶端的一些緩存技術,客戶端的一些性能提高,穩(wěn)定性,兼容性等等,這些其實都是樹業(yè)有專攻的事,其實你讓后端的人去搞,他也未必能搞懂,所以我的建議是要學這個就把它學的很深入。
?
?
Q你好,我是做客戶端的,然后我想問一個問題,作為一些朋友,會認為客戶端后端他們可能前途更好一點,有一些后端他又會去轉客戶端,他覺得客戶端前途更好一點,你覺得呢?
?
A我覺得這個整體來說,就是一個圍城的概念,大家都覺得對方是好的,但實際上他們都是對的,為什么是對的呢?他都看到了對方最優(yōu)秀的人,他不是看到整體情況,整體情況其實前端后端是一樣的,我舉個例子,我原來在甲骨文的時候,我有些同事,他別的什么都不做,別的一切活都拒絕,他只做前端 js,HTML,那么沒有多久他就自己創(chuàng)業(yè)了,就是他達到了一個什么樣的水平?
?
在瀏覽器下,那時候移動互聯(lián)網還沒有興起,主要是 PC 端客戶端的界面,無論你要什么效果他都能快速現場就給你實現,非常非常的快,所以這些專家級,前端也有專家級,后端也有專家級,前端也有小白,后端也有小白,所以我的意思并不一定后端就一定更有前途,當然這個前,哪個前都一樣。
?
所以我還是剛才跟另外一位提問者觀點是一樣的,就是盡量還是樹業(yè)有專攻,你一定要在這個領域達到一個非常專業(yè)水平,你再去看其他領域,因為你這個領域,比如說我前端還沒做好,我就去做后端,你就一定能成為大師嗎?那不一定,但是你說我前端成為了大師,你去后端去做,那你更有可能是成為大師了。
?
所以我是覺得在一個行業(yè)內,一定要成為專家級的,再去看其他的行業(yè),但并不是說這一輩子都在這一個行業(yè)下做這一個事,就像我剛才技術里面廣度,深度和高度,就是說深度一定要有那么一個兩個,廣度當然也要有,你要都了解,都會一些,最主要的是高度,高度主要是方向性,你做這一些東西到底能產生什么生產力?能夠產生什么價值?給公司或者自己創(chuàng)業(yè)帶來什么樣的價值?
?
轉載于:https://www.cnblogs.com/LiLihongqiang/p/7447978.html
總結
以上是生活随笔為你收集整理的李艳鹏:技术人如何修炼内功的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起学时序分析之延迟与时钟偏斜和抖动
- 下一篇: EasyPR--开发详解(5)颜色定位与