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