當(dāng)前位置:首頁(yè) > IT課程問(wèn)答
對(duì)于這個(gè)問(wèn)題,我想回答是:行行出狀元。程序員完全沒(méi)有必要去糾結(jié)這個(gè)問(wèn)題。
再說(shuō)了,后端的范圍其實(shí)很廣泛的,包括后端開(kāi)發(fā)語(yǔ)言、運(yùn)維、安全、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)模型、大數(shù)據(jù)、算法和數(shù)據(jù)結(jié)構(gòu)、搜索引擎、機(jī)器學(xué)習(xí)等等,人工智能只是它的一部分。我覺(jué)得我們應(yīng)該更多關(guān)注的是自己的興趣所在,你感興趣那個(gè)就學(xué)習(xí)那個(gè)。
作為一名后端程序員,為什么要迷茫?原因何在,工資不高?前景不好?還是其他原因?其實(shí)完全沒(méi)必要,任何一個(gè)行業(yè),學(xué)精了,待遇相差不大的。
作為一個(gè)后端程序員,你是否掌握了你的學(xué)習(xí)路線,下面的技術(shù)你是否都掌握了
如果要學(xué)好后端 ,要拿高工資,要有更好的發(fā)展前景,后臺(tái)開(kāi)發(fā)服務(wù)必須學(xué)會(huì)解決三高問(wèn)題:高并發(fā)、高可用、高性能
一 高并發(fā)
我們的開(kāi)發(fā)的后臺(tái)服務(wù)器應(yīng)付一些小并發(fā)場(chǎng)景綽綽有余,但是隨著互聯(lián)網(wǎng)應(yīng)用業(yè)務(wù)量的上漲,對(duì)后臺(tái)服務(wù)端的請(qǐng)求數(shù)劇增,高并發(fā)需求隨之而來(lái),高并發(fā)指的就是高 TPS 和高 QPS TPS (Transactions Per Second)每秒事務(wù)數(shù) QPS(Query Per Second)每秒查詢數(shù)等。 對(duì)于高并發(fā)服務(wù)必須改變傳統(tǒng)的單進(jìn)程模型,才能處理的過(guò)來(lái)如此海量的請(qǐng)求。處理高并發(fā),我們要學(xué)習(xí)下面技術(shù)來(lái)處理這個(gè)問(wèn)題
多進(jìn)程
對(duì)于高并發(fā)的服務(wù)請(qǐng)求,由于后臺(tái)服務(wù)一般都是 IO 密集型應(yīng)用,IO 密集型應(yīng)用就是大部分 CPU 時(shí)間用在網(wǎng)絡(luò) IO 上,相對(duì)的是 CPU 密集型應(yīng)用大部分時(shí)間花在數(shù)據(jù)計(jì)算上。 大多數(shù)的后臺(tái)服務(wù)程序都是 IO 密集型的應(yīng)用,網(wǎng)絡(luò) IO 的時(shí)候 CPU 等待白白浪費(fèi)時(shí)間, 這就告訴我們 CPU 的潛力還沒(méi)有完全發(fā)揮,所以當(dāng)一個(gè)進(jìn)程的處理能力達(dá)到上限,我們可以多創(chuàng)建幾個(gè)進(jìn)程,這就是多進(jìn)程模型。
多線程
多線程與多進(jìn)程類(lèi)似,實(shí)際在Linux系統(tǒng)中線程是由輕量級(jí)的進(jìn)程 LWP(Light-weight process)實(shí)現(xiàn),多線程方式實(shí)現(xiàn)的后臺(tái)服務(wù)相對(duì)于多進(jìn)程更加輕量,因?yàn)槎嗑程是在同一個(gè)進(jìn)程內(nèi)部實(shí)現(xiàn)。 不過(guò)多線程也會(huì)帶來(lái)新的問(wèn)題,比如全局?jǐn)?shù)據(jù)競(jìng)爭(zhēng)和同步問(wèn)題,引入線程鎖還要防止死鎖的發(fā)生。
協(xié)程
那什么是協(xié)程呢?協(xié)程 Coroutines 是一種比線程更加輕量級(jí)的微線程。類(lèi)比一個(gè)進(jìn)程可以擁有多個(gè)線程,一個(gè)線程也可以擁有多個(gè)協(xié)程,因此協(xié)程又稱(chēng)微線程和纖程。可以粗略的把協(xié)程理解成子程序調(diào)用,每個(gè)子程序都可以在一個(gè)單獨(dú)的協(xié)程內(nèi)執(zhí)行。
異步回調(diào)
所謂異步回調(diào)就是,服務(wù)端發(fā)起 IO 請(qǐng)求的線程不等網(wǎng)絡(luò) IO 線程操作完成,就繼續(xù)執(zhí)行隨后的代碼,一般請(qǐng)求線程需要先注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)IO 完成之后網(wǎng)絡(luò)IO線程通過(guò)調(diào)用之前注冊(cè)的回調(diào)函數(shù)來(lái)通知發(fā)起 IO 請(qǐng)求的線程,這樣發(fā)起請(qǐng)求的線程就不會(huì)阻塞住等待結(jié)果,提高了服務(wù)處理性能
二 高性能
按以上服務(wù)模型可以提高服務(wù)本身處理能力,高性能后臺(tái)服務(wù)往往還會(huì)利用多種技術(shù)、從多個(gè)維度優(yōu)化提高性能。比如采用CDN(Content Delivery Network)內(nèi)容分發(fā)網(wǎng)絡(luò),存儲(chǔ)和分發(fā)使用戶就近獲取內(nèi)容,縮短響應(yīng)時(shí)間;采用池化技術(shù),避免頻繁的資源分配與回收;采用服務(wù)集群,橫向擴(kuò)展服務(wù)能力;采用緩存技術(shù),熱點(diǎn)數(shù)據(jù)加入緩存,減少數(shù)據(jù)庫(kù)訪問(wèn)。
1.CND 內(nèi)容分發(fā)技術(shù)
2.池化技術(shù):數(shù)據(jù)庫(kù)連接池,線程池
3.集群化
4.技術(shù)
三 高可用
高可用即保證服務(wù)的穩(wěn)定性,不出現(xiàn)重大問(wèn)題或宕機(jī),常見(jiàn)的解決高可用思路是冗余和負(fù)載均衡。冗余的意思就是多部署幾臺(tái)服務(wù)器,當(dāng)其中一臺(tái)掛掉另外一臺(tái)能頂上。通過(guò)負(fù)載均衡技術(shù)實(shí)現(xiàn)對(duì)流量的動(dòng)態(tài)調(diào)配,不至于出現(xiàn)大量流量沖擊某臺(tái)機(jī)器出現(xiàn)請(qǐng)求不均勻,軟件負(fù)載均衡技術(shù)可以通過(guò)DNS、Nginx、LVS等技術(shù)實(shí)現(xiàn)。這里主要學(xué)習(xí)的技術(shù)有:
1.負(fù)載均衡技術(shù),軟硬件負(fù)載均衡
2.限流隔離降級(jí)技術(shù)
3.應(yīng)用層容災(zāi),資源隔離熔斷
4.異地多活
三高問(wèn)題是后端開(kāi)發(fā)的主流問(wèn)題,也是作為后端開(kāi)發(fā)高級(jí)工程師必須掌握的問(wèn)題,要能靈活運(yùn)用這些技術(shù)解決企業(yè)級(jí)項(xiàng)目問(wèn)題,我們路還很長(zhǎng),與其在迷惘,不如抓緊時(shí)間學(xué)習(xí)后端開(kāi)發(fā)技術(shù),提高我們技術(shù)水平,才是后端程序員最需要做的事情。