技術(shù)人的內(nèi)功修煉,究竟修的是啥?
今天我給大家分享的主題是技術(shù)人如何修煉好內(nèi)功,包括技術(shù)的內(nèi)功,也包括我們做人做事的內(nèi)功。
開(kāi)發(fā)者要學(xué)習(xí)高并發(fā)服務(wù)、大數(shù)據(jù)、操作系統(tǒng)、算法和數(shù)據(jù)結(jié)構(gòu);學(xué)技術(shù)得學(xué)它的內(nèi)功,內(nèi)功就是基礎(chǔ)。
所以對(duì)于操作系統(tǒng),我們一定了解它的 CPU、內(nèi)存、磁盤(pán) IO 和網(wǎng)絡(luò) IO,并且據(jù)此粗略評(píng)估服務(wù)的性能。
應(yīng)用層面的小伙伴們可能對(duì)算法和數(shù)據(jù)結(jié)構(gòu)的應(yīng)用比較少,也比較簡(jiǎn)單,但是它代表了一個(gè)人的邏輯思維和思考能力。
在互聯(lián)網(wǎng)公司,高并發(fā)服務(wù)和大數(shù)據(jù)是兩大方向:
- 解決高并發(fā)主要使用的是分而治之的思想,但是也會(huì)產(chǎn)生一致性的問(wèn)題。
- 大數(shù)據(jù)是近年來(lái)比較火的方向,所有的根基都來(lái)自 Mapreduce、Gfs 和 Bigtable 這三篇論文,推薦大家閱讀。
分布式的服務(wù)架構(gòu)
我們總體看一下分布式的服務(wù)架構(gòu)的目標(biāo),主要包含六個(gè)方面:
- 高可用
- 高性能
- 可伸縮性
- 可擴(kuò)展性
- 安全性
- 一致性
我們一個(gè)個(gè)來(lái)說(shuō)這六個(gè)目標(biāo),它們是怎么實(shí)現(xiàn)的?這六個(gè)目標(biāo),第一個(gè)就是可用性,在一般的公司我們都會(huì)用 4 個(gè) 9,或者 5 個(gè) 9 來(lái)衡量。
我們的易寶支付可以達(dá)到 4 個(gè) 9,那 4 個(gè) 9 是怎么實(shí)現(xiàn)的呢?這個(gè)原因有很多,我們得從影響可用性的原因來(lái)分析。
例如我們統(tǒng)計(jì)了一下去年影響可用性的主要原因包括什么?主要包括我們上線(xiàn)變更的時(shí)候,會(huì)影響我們 40%,50% 的可用性。
針對(duì)這個(gè)情況,我們就增加了架構(gòu)評(píng)審和設(shè)計(jì)評(píng)審,還有技術(shù)評(píng)審等等。
我們把可用性這一塊的窟窿堵住了,可用性就可以提高上來(lái),那下一個(gè)最重要的就是性能。
大家常說(shuō)性能的優(yōu)化,但是性能的優(yōu)化用什么方法來(lái)保證呢?在我們分布式服務(wù)架構(gòu)里邊,最重要的就是一個(gè)分而治之的思想。
我們通過(guò)分而治之的思想提高整個(gè)系統(tǒng)的吞吐量,由于分而治之,它會(huì)導(dǎo)致一些問(wèn)題,這個(gè)問(wèn)題就是一致性問(wèn)題。
那么,我們?cè)趺唇鉀Q這個(gè)一致性問(wèn)題呢?這是我們最困難的事,也是最有挑戰(zhàn)的事。
第三個(gè)就是可伸縮性,它是我們互聯(lián)網(wǎng)項(xiàng)目中最重要的一個(gè)特性,為什么說(shuō)它是最重要的呢?
因?yàn)榇怪睌U(kuò)展這個(gè)性?xún)r(jià)比已經(jīng)變得很低了,所以我們都去采用水平擴(kuò)展,包含應(yīng)用層和數(shù)據(jù)庫(kù)層,還有緩存等等。
例如數(shù)據(jù)庫(kù)的分庫(kù)分表,緩存的分片,還有消息隊(duì)列的消峰,我們都是為了讓這個(gè)系統(tǒng)能夠水平伸縮起來(lái),然后提高它的性能。
下一個(gè)特性就是安全性,安全性是大家常說(shuō)的,包含系統(tǒng)安全性,寫(xiě)代碼的安全性,數(shù)據(jù)庫(kù)的安全性,還有前端外部的安全性。
但是總結(jié)起來(lái),安全性有五個(gè)目標(biāo):
- 防泄漏
- 防竄改
- 防抵賴(lài)
- 防偷窺
- 防止中間人攻擊
所有安全性最后的目標(biāo)只有這五個(gè),那這五個(gè)目標(biāo)是怎么實(shí)現(xiàn)呢?
這就涉及到現(xiàn)在密碼學(xué)上的幾個(gè)技術(shù)的點(diǎn):
- 加密
- 簽名
- 使用 HTTPS 的雙向認(rèn)證通道,防止中間人攻擊
有了這些辦法,我們剛才所說(shuō)的那五個(gè)目標(biāo),都可以達(dá)到。安全性也并沒(méi)有那么復(fù)雜,當(dāng)然具體的打法和方式還是很多的。
提到可擴(kuò)展性,大家肯定覺(jué)得可擴(kuò)展性和可伸縮性是同一個(gè)概念,但實(shí)際上這兩個(gè)概念是不一樣的。
可擴(kuò)展性指這個(gè)系統(tǒng)的可修改性,將來(lái)能夠進(jìn)行比較快速的功能迭代,然后快速去滿(mǎn)足新的市場(chǎng)需求,我們以前常說(shuō)的可插拔,屬于可擴(kuò)展性,但并不是可伸縮性。
最后一個(gè)就是一致性,一致性是我們實(shí)施服務(wù)化或者微服務(wù)化以后,造成一個(gè)大的問(wèn)題,我們都需要去保證。
我剛才介紹了一些分布式服務(wù)架構(gòu)的分享內(nèi)容,但實(shí)際上我們很難在 20 分鐘內(nèi)講的比較透徹。
我推薦三本書(shū),第一本書(shū)就是京東開(kāi)濤寫(xiě)的《億級(jí)流量網(wǎng)站架構(gòu)核心技術(shù)》,這本書(shū)更偏向于高并發(fā)和高可用前端系統(tǒng)的一個(gè)架構(gòu)分析、設(shè)計(jì)和方法還有實(shí)踐。
第二本就是我和楊老師共同著的,《分布式服務(wù)架構(gòu)原理設(shè)計(jì)與實(shí)戰(zhàn)》,這本書(shū)包含了微服務(wù)化,一致性,可用性,還有大數(shù)據(jù)日志系統(tǒng)的建設(shè),以及調(diào)用鏈系統(tǒng)建設(shè),會(huì)包含一些 APM 的核心功能,再加上我們線(xiàn)上進(jìn)行技術(shù)攻關(guān)和進(jìn)行線(xiàn)上應(yīng)急的一些經(jīng)驗(yàn)總結(jié),以及最后的容器化還有持續(xù)集成等主題,所以這些主題總體來(lái)講更偏向于方法論和實(shí)戰(zhàn),還有一些案例。
最后一本書(shū)就是李智慧老師寫(xiě)的《大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析》,這本書(shū)應(yīng)該有好多年了,但是這本書(shū)講的原理還有概念都非常的核心,非常的重要,推薦大家也讀一下。
技術(shù)人如何修煉技術(shù)的內(nèi)功
如何綜合評(píng)估一個(gè)人的技術(shù)能力
如何去修煉技術(shù)的內(nèi)功?如果我們作為面試官,我們?nèi)ッ嬖囈粋€(gè)候選人,我們會(huì)從哪些方面全面評(píng)估這個(gè)人的技術(shù)能力?
我會(huì)根據(jù)三個(gè)層面來(lái)評(píng)估一個(gè)候選人,包括技術(shù)知識(shí)的廣度、技術(shù)知識(shí)的深度,還有技術(shù)知識(shí)的高度。
對(duì)于廣度指的是什么呢?指的是這個(gè)人做過(guò)什么事情?學(xué)習(xí)過(guò)多少的知識(shí)?用過(guò)多少語(yǔ)言?熟練使用多少工具等等,主要是他的知識(shí)面和經(jīng)驗(yàn)。
什么是技術(shù)的深度呢?技術(shù)的深度就是期望每個(gè)人在某一方面一定是有造詣的,什么是造詣呢?
就比如說(shuō)在 Java 上,你一定要了解 GC 的原理,你能夠通過(guò)調(diào)節(jié) GC 來(lái)提高它的性能,或者是你懂得我們 RDBMS 數(shù)據(jù)庫(kù)的索引原理等等。
并且能把這個(gè)原理應(yīng)用到你的生產(chǎn)實(shí)踐中,你一定要有幾個(gè)主題或幾個(gè)方面是非常深入了解和學(xué)習(xí)過(guò)的。
最后就是一個(gè)高度,高度這個(gè)是我這兩年才認(rèn)識(shí)到的,以前我只是拿廣度跟深度來(lái)看別人和自己,現(xiàn)在又增加了一個(gè)高度。
高度是什么呢?就是你學(xué)這個(gè)技術(shù)有什么目的?這個(gè)技術(shù)能達(dá)到什么樣的生產(chǎn)?這個(gè)技術(shù)是不是現(xiàn)在技術(shù)的一個(gè)前沿,還是說(shuō)已經(jīng)淘汰好多年的一門(mén)技術(shù)?
所以說(shuō),我們一定要站在很高的高度來(lái)看這些東西,學(xué)了是不是有用的?將來(lái)是不是有用的?假如將來(lái)十年有用,那么將來(lái)二十年是不是有用的呢?
所以我們一定要修煉這個(gè)內(nèi)功,因?yàn)閮?nèi)功是永遠(yuǎn)不變的,就算將來(lái)你可能過(guò)十年,二十年,這個(gè)內(nèi)功還是一樣的。
如何修煉技術(shù)的內(nèi)功
我們?nèi)绾稳バ逕掃@個(gè)內(nèi)功?有幾個(gè)方面需要我們掌握?
今天我給大家分享四個(gè)方面:
- 高并發(fā)服務(wù)
- 大數(shù)據(jù)
- 操作系統(tǒng)
- 算法與數(shù)據(jù)結(jié)構(gòu)
我們先看下面兩個(gè)主題,那就是操作系統(tǒng),算法和數(shù)據(jù)結(jié)構(gòu)。
先說(shuō)操作系統(tǒng),我們現(xiàn)在看各種新技術(shù),還有我們用的各種技術(shù),都跟我們操作系統(tǒng)有關(guān),我們發(fā)現(xiàn)新技術(shù)、新原理的很多東西在這個(gè)操作系統(tǒng)的一些核心原理上是能找到縮影的。
舉一個(gè)非常小的例子,比如大家說(shuō)的微服務(wù),是不是覺(jué)得微服務(wù)現(xiàn)在很火很新?但實(shí)際上在操作系統(tǒng)中是有微服務(wù)的。
第一,它的內(nèi)核是微內(nèi)核;第二,想一下命令和管道,在實(shí)現(xiàn)一個(gè)復(fù)雜的日志搜索,我們一個(gè)命令接一個(gè)管道,再接一個(gè)命令和一個(gè)管道,每個(gè)命令都在完成自己它想做的事,有清晰的輸入和輸出,然后和其他的命令去配合著使用。
上面這個(gè)例子完全就是一個(gè)微服務(wù)的思想,所以我說(shuō)學(xué)技術(shù)得學(xué)它的內(nèi)功,內(nèi)功就是我們這些基礎(chǔ)一定要掌握的很扎實(shí)。
所以對(duì)于操作系統(tǒng)來(lái)講,我們一定要理解到它的 CPU,內(nèi)存,磁盤(pán)還有網(wǎng)卡的 IO 等等這些原理。
并且能夠根據(jù)這些資源去評(píng)估你服務(wù)的吞吐量和 TPS 響應(yīng)時(shí)間等等,這個(gè)評(píng)估指的是粗略評(píng)估,就是評(píng)估是沒(méi)有精確評(píng)估的。
然后我們看一下算法跟數(shù)據(jù)結(jié)構(gòu),對(duì)于我們應(yīng)用層的小伙伴們,我們很少在應(yīng)用層直接去使用到它,就算使用也非常的簡(jiǎn)單。
但是算法和數(shù)據(jù)結(jié)構(gòu)象征著我們一個(gè)人的邏輯思維和思考能力,所以對(duì)這個(gè)東西也要掌握一些或者是要熟悉一些。
最后,要學(xué)習(xí)一個(gè)高級(jí)算法,比如說(shuō)動(dòng)態(tài)規(guī)劃,貪婪,還有剪枝,遞歸等等,那為什么要學(xué)高級(jí)算法呢?
假設(shè)大家每一位都是面試官,如果來(lái)了一個(gè)面試的小伙伴,小伙伴說(shuō)我會(huì)動(dòng)態(tài)規(guī)劃,隨便一個(gè)都可以寫(xiě)出來(lái)。
那他要不就是勤奮的,要不就是非常聰明的,所以如果你會(huì)這個(gè),一般都是會(huì)打動(dòng)這個(gè)面試官的。
然后我們?cè)倏瓷线叺膬蓚€(gè)主題,第一個(gè)是高并發(fā)服務(wù),第二個(gè)是大數(shù)據(jù)。
在互聯(lián)網(wǎng)公司里邊主要有兩個(gè)方向,一個(gè)就是高并發(fā)的服務(wù),一個(gè)就是大數(shù)據(jù),那高并發(fā)的服務(wù)的核心思想就是分而治之,就是我們單體系統(tǒng)架構(gòu)。
不是它的性能不能提高,是它在垂直擴(kuò)展過(guò)程中,它的性?xún)r(jià)比非常低,非常貴。
所以我們都用伸縮,采用分而治之的思想,但是分而治之以后產(chǎn)生的問(wèn)題,就是一致性的問(wèn)題,因?yàn)榉珠_(kāi)了,他們的協(xié)調(diào)一定會(huì)有問(wèn)題。
大數(shù)據(jù)這些年特別火,但是大數(shù)據(jù)所有核心思想都來(lái)自于谷歌的三大論文,包括 Mapreduce,Gfs,Bigtable,所有的大數(shù)據(jù)根基都來(lái)自于這三個(gè)論文。
技術(shù)人如何修煉做事的內(nèi)功
目標(biāo)方法論
我要跟大家分享的主要是目標(biāo)方法論,主要包含幾個(gè)關(guān)鍵元素:目標(biāo)原則方法和結(jié)果。
目標(biāo)方法論來(lái)自于我們易寶支付的文化,但稍微有一點(diǎn)點(diǎn)變化,為什么說(shuō)這個(gè)方法論非常重要呢?
因?yàn)槲疫@兩年在面試和評(píng)審的時(shí)候,發(fā)現(xiàn)一些小伙伴在做一些事情,但是他們并不知道做這個(gè)事情能解決什么問(wèn)題?
還有一些小伙伴,他知道是解決什么問(wèn)題,但是這個(gè)問(wèn)題根本就不需要解決,所以說(shuō)做任何事情之前,一定要樹(shù)立一個(gè)正確的目標(biāo)。
如果這個(gè)目標(biāo)是抽象的,一定要把它分解成一些可衡量的目標(biāo),只有目標(biāo)正確了,我們后邊做的事情才是有意義的。
接下來(lái)就是原則,原則是什么呢?就是我為了實(shí)現(xiàn)這個(gè)目標(biāo)不能做的事情,這個(gè)是底線(xiàn),就算是生活中我們也有很多的原則。
接下來(lái)就是方法,我們要實(shí)現(xiàn)一個(gè)目標(biāo),有各種各樣的方法,那么這些方法我們要去權(quán)衡他們的利弊、權(quán)衡他們的成本、權(quán)衡他們達(dá)成的效果。
我們一定要找到一個(gè)最合適的方法,而不是找到一個(gè)最高大上的方法。
我也見(jiàn)過(guò)很多技術(shù)方案,是拿很多高大上的技術(shù),最終解決了一個(gè)很低端的問(wèn)題,這種事情性?xún)r(jià)比很低。
所以一定要選擇最適合的方法,例如做架構(gòu),要做最適合的架構(gòu),要回歸架構(gòu)的簡(jiǎn)潔之美,不要所有的事情都拿一些高大上的技術(shù)招式來(lái)應(yīng)付這個(gè)結(jié)構(gòu)。
最后一個(gè)就是產(chǎn)出和結(jié)果,任何一個(gè)事情最后都會(huì)看它的產(chǎn)出和結(jié)果,這個(gè)產(chǎn)出和結(jié)果和目標(biāo)是相對(duì)應(yīng)的。
如果你這個(gè)產(chǎn)出結(jié)果跟目標(biāo)不是對(duì)應(yīng)的,那這個(gè)事情就是白做了或者是偏離了,也可能有一些副作用,作用有好有壞,但是沒(méi)有滿(mǎn)足我們的初衷。
做人四原則
這一塊可能跟我們技術(shù)內(nèi)功不太一致,但這是我和身邊的一些小伙伴們總結(jié)下來(lái)的生活和做事的經(jīng)驗(yàn),分享給大家,希望能夠起到一定的效果。
大家千萬(wàn)不要覺(jué)得這四個(gè)原則內(nèi)容比較少,當(dāng)你詳細(xì)的去理解,可能等時(shí)間久了,慢慢就理解到了。下面我們一個(gè)個(gè)來(lái)看,為什么我說(shuō)它非常重要?
第一個(gè)就是靠譜,有腦子。衡量一個(gè)人或者別人對(duì)你的印象,跑不出這兩個(gè)因素,就是靠譜,有腦子,什么是靠譜呢?
靠譜就是別人一想起你,就會(huì)覺(jué)得有一種信賴(lài)感,他覺(jué)得這個(gè)人行。那什么是有腦子呢?就是比較靈活,不做作,做事情總是有門(mén)路,這個(gè)就叫有腦子。
第二個(gè)就是膽大心細(xì),樂(lè)觀。我們做事情一定要膽大,敢于去嘗試,然后我們一定要樂(lè)觀,為什么要樂(lè)觀呢?
福禍?zhǔn)窍嗤ǖ模懈?赡芫陀械湥械溇陀懈!S芯涔耪Z(yǔ),福兮禍所伏,禍兮福所倚,就是無(wú)論發(fā)生什么事情,大家一定要樂(lè)觀,可能一件壞事,等你過(guò)了一個(gè)月看仍然可能是一件壞事。
但是過(guò)了兩個(gè)月或者兩年或者十年你再來(lái)看,這個(gè)事有可能是好事,所以一定要樂(lè)觀。
第三個(gè)就是要么忍,要么狠,要么滾。這句話(huà)在什么時(shí)候適用呢?大家如果真的碰上一些坎坷了,尤其是在工作上碰到一些坎坷,不用糾結(jié),不用懊惱,也不用沮喪,這三條路中挑一個(gè)就可以了,往前走,因?yàn)榧m結(jié)也沒(méi)用。
最后一個(gè)就是要善于交流。大家聽(tīng)起來(lái)好像是侃侃而談的人就是善于交流,比較圓滑的人善于交流,但是實(shí)際上這個(gè)并不是善于交流,那什么是善于交流呢?
第一,你要善于思考,你要善于站在別人的角度來(lái)看待你自己,你也要善于站在別人的角度看他自己,這個(gè)才叫善于交流,這樣你跟別人才能有交流。
就拿現(xiàn)在一個(gè)心理學(xué)非常流行的話(huà)來(lái)說(shuō),叫同理心,說(shuō)白了就是你要能站在別人的角度來(lái)看事。
但是我剛才說(shuō)的比這個(gè)要求更高,就是你站在別人的角度,不但能看他自己,你還要能看你自己,所以這個(gè)才叫善于交流。
































