后端技術(shù)趨勢指南:如何選擇自己的技術(shù)方向
時間:2021-08-19 15:28:48
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]編程多條路,條條通羅馬后臺大佬后臺路線都是面對后臺服務(wù)器業(yè)務(wù),比如web后臺服務(wù)器,視頻后臺服務(wù)器,搜索后臺服務(wù)器,游戲后臺服務(wù)器,直播后臺服務(wù)器,社交IM后臺服務(wù)器等等,大部分代碼和業(yè)務(wù)邏輯相關(guān),想成為大佬,必須精通專業(yè)領(lǐng)域業(yè)務(wù)知識。但同時也存在一些通用的技術(shù)要求,?比如熟悉編...
編程多條路,條條通羅馬
但同時也存在一些通用的技術(shù)要求, ?比如熟悉編程語言,數(shù)據(jù)結(jié)構(gòu)與算法,?網(wǎng)絡(luò)編程,TCP/IP協(xié)議,數(shù)據(jù)庫,中間件,高性能,高可用技術(shù)。
后臺技術(shù)演進
架構(gòu)演進
隨著 PC 局域網(wǎng),特別是關(guān)系型數(shù)據(jù)庫的應(yīng)用,基礎(chǔ)架構(gòu)發(fā)展成了兩層架構(gòu);隨后是廣域網(wǎng)的發(fā)展,由單體的多層架構(gòu),出現(xiàn)了 SOA,EDA 架構(gòu)盛行;接下來是虛擬機,再到今天的云計算基礎(chǔ)架構(gòu),又出現(xiàn)了微服務(wù),之后是 Container as a Service、Serverless ,到最近很火原云生架構(gòu)等,可以看到架構(gòu)的變化都是要充分利用 IT 基礎(chǔ)設(shè)施。
業(yè)務(wù)目標演進
???????????????????以往互聯(lián)網(wǎng)流量爆發(fā)時代,先抗住流量峰值,高并發(fā)、高性能是,支持水平擴展是后臺設(shè)計的重要目標?。當前互聯(lián)網(wǎng)流量見頂,存量競爭加劇,后臺服務(wù)的穩(wěn)定性變得愈發(fā)重要,企業(yè)降本增效決心變強,研發(fā)效率,監(jiān)控運維平臺,自動化測試,CI/CD流水線等也變得重要起來。
后臺開發(fā)語言演進
服務(wù)器硬件資源昂貴年代,C 既能高性能,又能代碼復(fù)用(OOP編程),成了很多大廠后臺開發(fā)的主力語言。
第一代web后臺開發(fā)主流是PHP,那時候互聯(lián)網(wǎng)主流的后臺架構(gòu)是LAMP架構(gòu),隨著電商興起,Android 手機普及,大數(shù)據(jù)出現(xiàn),推動JAVA技術(shù)棧發(fā)展,JAVA成了互聯(lián)網(wǎng)主流后臺編程語言。
隨著云計算時代到來,云原生計算興起,Go語言生態(tài)發(fā)展穩(wěn)健,兼顧性能和開發(fā)速度,越來越多企業(yè)在生產(chǎn)中使用 Go語言落地業(yè)務(wù),目前很多大廠后臺開發(fā)語言已經(jīng)開始轉(zhuǎn)向Go。
人工智能發(fā)展,也推動Python語言發(fā)展,簡單,上手快,開發(fā)效率高,成了一些不在乎性能后臺組件的開發(fā)語言。
由于安全性,穩(wěn)定性越發(fā)重要,Rust有可能成后臺關(guān)鍵組件開發(fā)語言,兼顧性能和內(nèi)存安全性,用來替換后臺系統(tǒng)核心的C 組件;
對于未來,Python、Go、Rust 成為后端未來最先考慮學(xué)習編程語言。
目前國內(nèi)各個大廠主流后臺語言不盡相同:
下一代消息中間件Apache Pulsar:
?對比kafka
Apache Pulsar 和 Apache Kafka 之間的根本區(qū)別在于 Apache Kafka 是以分區(qū)為存儲中心,而 Apache Pulsar 是以 Segment 為存儲中心, Apache Pulsar 這種獨特的基于分布式日志存儲的以 Segment 為中心的發(fā)布/訂閱消息系統(tǒng)可以提供許多優(yōu)勢,例如可靠的流式系統(tǒng),包括無限制的日志存儲,無需分區(qū)重新平衡的即時擴展,快速復(fù)制修復(fù)以及通過最大化數(shù)據(jù)放置實現(xiàn)高寫入和讀取可用性選項.緩存中間件我們都知道CPU的緩存的作用是為了減少對內(nèi)存訪問,同樣擴展到分布式系統(tǒng)里面,緩存中間件可以提高對組件數(shù)據(jù)的訪問性能。
redis就是比較流行緩存中間件,根據(jù)局部性原理,冷熱數(shù)據(jù)分離,一般用來加快數(shù)據(jù)庫的高頻數(shù)據(jù)訪問:
未來優(yōu)化方向:
?RPC框架
RPC是指遠程過程調(diào)用,也就是說兩臺服務(wù)器A,B,一個應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達調(diào)用的語義和傳達調(diào)用的數(shù)據(jù)。
微服務(wù)時代的遠程服務(wù)調(diào)用框架。如grpc, Thrift, 阿里的 HSF, Dubbo, SOFA-RPC;
未來發(fā)展方向:
負載均衡
負載均衡(Load Balancing)是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負載分布到多個服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性硬件:F5、Redware...軟件:lvs(四層)、haproxy(四,七層)、nginx(七層)...未來發(fā)展方向:
云計算云計算進程提速,一切皆服務(wù),導(dǎo)致原來不掙錢底層技術(shù),可以賣錢了,技術(shù)可以通過云計算向外輸出,這是底層技術(shù)人春天的到來:
Software as a Service,軟件即服務(wù),簡稱SaaS,這層的作用是將應(yīng)用作為服務(wù)提供給客戶。Platform as a Service,平臺即服務(wù),簡稱PaaS,這層的作用是將一個開發(fā)平臺作為服務(wù)提供給用戶。Infrastructure as a Service, 基礎(chǔ)設(shè)施即服務(wù),簡稱IaaS,這層的作用是提供虛擬機或者其他資源作為服務(wù)提供給用戶。
IaaS核心技術(shù):計算,網(wǎng)絡(luò),存儲,這些可以算是軟件技術(shù)的最底層了(再底層,就是硬件了),基本上要和內(nèi)核OS打交道,要求具有內(nèi)核的二次開發(fā)的能力,熟悉操作系統(tǒng)實現(xiàn)(主要是熟悉Linux內(nèi)核源碼)。
計算:計算虛擬化,內(nèi)核調(diào)度系統(tǒng),cgroups,KVM, QEMU,virtio;網(wǎng)絡(luò):網(wǎng)絡(luò)虛擬化,內(nèi)核協(xié)議棧,netfilter,netns,DPDK,智能網(wǎng)卡,RDMA,P4等;
存儲:內(nèi)存虛擬化,磁盤虛擬化,SPDK等;
PaaS核心技術(shù):應(yīng)用運行環(huán)境(容器,多租戶彈性,K8S),應(yīng)用全生命周期支持(devops,自動化運維),集成、復(fù)合應(yīng)用構(gòu)建能力(CI/CD)等。
這些技術(shù)職位本身門檻是很高的,待遇也比一般職位要高,對底層技術(shù)非常感興趣可以關(guān)注。
瀏覽器內(nèi)核
webkit
WebKit是Safari、Mail、App Store 和 macOS、iOS 和 Linux 上的許多其他應(yīng)用程序使用的網(wǎng)絡(luò)瀏覽器引擎。
Chromium是一個用于網(wǎng)絡(luò)瀏覽器的免費開源?代碼庫,主要由Google開發(fā)和維護。Google 使用該代碼制作其Chrome網(wǎng)絡(luò)瀏覽器,該瀏覽器具有附加功能。
Chromium代碼庫被廣泛使用。Microsoft Edge、Opera,QQ瀏覽器,UC瀏覽器等國內(nèi)瀏覽器,和許多其他瀏覽器都基于該代碼。此外,代碼的重要部分被多個應(yīng)用程序框架使用。
chromium架構(gòu)
如果對web內(nèi)核技術(shù)感興趣,可以選擇瀏覽器方向!
數(shù)據(jù)庫內(nèi)核
技術(shù)初衷在操作系統(tǒng)出現(xiàn)之后,隨著計算機應(yīng)用范圍的擴大、需要處理的數(shù)據(jù)迅速膨脹。最初,數(shù)據(jù)與程序一樣,以簡單的文件作為主要存儲形式。以這種方式組織的數(shù)據(jù)在邏輯上更簡單,但可擴展性差,訪問這種數(shù)據(jù)的程序需要了解數(shù)據(jù)的具體組織格式。當系統(tǒng)數(shù)據(jù)量大或者用戶訪問量大時,應(yīng)用程序還需要解決數(shù)據(jù)的完整性、一致性以及安全性等一系列的問題。因此,必須開發(fā)出一種系統(tǒng)軟件,它應(yīng)該能夠像操作系統(tǒng)屏蔽了硬件訪問復(fù)雜性那樣,屏蔽數(shù)據(jù)訪問的復(fù)雜性。由此產(chǎn)生了數(shù)據(jù)管理系統(tǒng),即數(shù)據(jù)庫。
目前現(xiàn)狀世界范圍內(nèi),做數(shù)據(jù)庫開發(fā)的,基本上都是基于開源項目,即便是自研也肯定會參考現(xiàn)有的開源項目,所以要選擇數(shù)據(jù)庫,必須要把開源玩的非常溜才行,比如MySQL, PostgreSQL, MongoDB, LevelDB等。目前云計算廠商都在大力發(fā)展數(shù)據(jù)庫,在國內(nèi)公有云部署模式中,阿里、騰訊、AWS、Oracle、華為、Microsoft位列前六,于國內(nèi)數(shù)據(jù)庫行業(yè)而言,數(shù)據(jù)庫廠商取得四十年最好的發(fā)展機會,市場大環(huán)境(國家去IOE化戰(zhàn)略)有利于國內(nèi)廠商,技術(shù)方面總體接近,一些技術(shù)持平甚至領(lǐng)先
當前熱門方向:
操作系統(tǒng)?
目前國家大力發(fā)在新基建,鼓勵和政策支持企業(yè)開發(fā)基礎(chǔ)技術(shù),操作系統(tǒng)當前就是一個重要方向,目前各大公司要么自研OS,要么基于開源OS進行二次開發(fā)。
目前熱門技術(shù)方向:
開發(fā)OS,主要是適配新硬件,性能優(yōu)化(調(diào)度性能,內(nèi)存分配性能,協(xié)議棧處理性能,文件系統(tǒng)優(yōu)化),穩(wěn)定性優(yōu)化,虛擬化技術(shù)等。
如果對OS有情懷,喜歡和底層硬件打交道,可以選擇操作系統(tǒng)方向,目前前景還不錯!
嵌入式
由于5G,AI發(fā)展,手機,智能硬件,自動駕駛,IoT領(lǐng)域又煥發(fā)新春,各種智能硬件起飛。
熱門技術(shù)方向:
JDK
自1995年Sun公司推出Java至今,Java這門編程語言已經(jīng)風光了25年。最近關(guān)于Java要沒落的言論甚囂塵上,但Java仍然是國內(nèi)中國互聯(lián)網(wǎng)公司首選的編程語言,諸如阿里巴巴、京東、百度、騰訊、美團等。隨著互聯(lián)網(wǎng)、大數(shù)據(jù)、AI的迅猛發(fā)展,國內(nèi)JAVA生態(tài)已逐漸劃分成了幾大陣營,J2EE企業(yè)級應(yīng)用傳統(tǒng)領(lǐng)域是大廠商(甲骨文、微軟)主導(dǎo),互聯(lián)網(wǎng)領(lǐng)域是pivotal,互聯(lián)網(wǎng)中間件是阿里云和pivotal在推spring cloud,大數(shù)據(jù)、移動安卓又分別是另一個獨立生態(tài)。
OpenJDK(開放 Java 開發(fā)工具包)是Java 平臺標準版(Java SE)的免費開源實現(xiàn)。目前各個大公司都在發(fā)展自己JDK版本,如果想在Java領(lǐng)域深耕且想轉(zhuǎn)為底層開發(fā),可以選擇JDK這條路!
Service Mesh 在過去的一年依舊保持著熱度。在已經(jīng)過去的 2020,微服務(wù)可以說有堅守也有破局,有對服務(wù)微化共識的形成也有對特殊場景的理性思考。我們可以看到服務(wù)框架依然在持續(xù)演進,奔向云原生,擁抱云化。越來越多的企業(yè)開始跟上服務(wù)化云化步伐。
微服務(wù)、DDD、中臺技術(shù)并非企業(yè)技術(shù)架構(gòu)設(shè)計的銀彈,微服務(wù)的主要缺點是微服務(wù)的分布式特點帶來的復(fù)雜性。開發(fā)人員需要基于RPC或者消息實現(xiàn)微服務(wù)之間的調(diào)用和通信,而這就使得服務(wù)之間的發(fā)現(xiàn)、服務(wù)調(diào)用鏈的跟蹤和質(zhì)量問題變得的相當棘手。
騰訊開源的微服務(wù)框架TARS:
但微服務(wù)仍然分布式的熱門方向,符合高內(nèi)聚,低耦合架構(gòu)設(shè)計思想,這個過程中出現(xiàn)的問題等著我們?nèi)ソ鉀Q,比如Service Mesh出現(xiàn)。
Service Mesh作為Sidebar運行,對應(yīng)用程序來說是透明,所有應(yīng)用程序間的流量都會通過它,所以對應(yīng)用程序流量的控制都可以在Service Mesh中實現(xiàn)。
目前流行的Service Mesh開源軟件有Linkerd、Envoy和Istio,而最近Buoyant(開源Linkerd的公司)又發(fā)布了基于Kubernetes的Service Mesh開源項目Conduit。
中臺架構(gòu)
當前企業(yè)做大做強后,業(yè)務(wù)必然會增多,開始出現(xiàn)重復(fù)造輪子,由于業(yè)務(wù)擴張,本身人力就不足,所以長期方案還是會采用類似中臺的技術(shù),這樣節(jié)約人力,具體怎么落地,這個是考驗團隊和公司從上到下的推動能力了。
云原生
云原生(CloudNative)是一個組合詞,Cloud Native。Cloud表示應(yīng)用程序位于云中,而不是傳統(tǒng)的數(shù)據(jù)中心;Native表示應(yīng)用程序從設(shè)計之初即考慮到云的環(huán)境,原生為云而設(shè)計,在云上以最佳姿勢運行,充分利用和發(fā)揮云平臺的彈性 分布式優(yōu)勢。
2021年伊始,云原生的布局開始加速。華為云聯(lián)合CNCF(云原生計算基金會)、中國信通院成立創(chuàng)原會,加速云原生產(chǎn)業(yè)落地;金山云發(fā)布云原生全景圖、云原生產(chǎn)品矩陣和最新的Serverless產(chǎn)品;諾基亞宣布與谷歌云合作開發(fā)云原生5G技術(shù)……幾乎所有云廠商新發(fā)布的云計算產(chǎn)品都已打上了云原生的標簽。
云原生核心技術(shù):
K8S已經(jīng)成為下一代云原生操作系統(tǒng)
Kuberentes 架構(gòu)
Kubernetes 最初源于谷歌內(nèi)部的 Borg,提供了面向應(yīng)用的容器集群部署和管理系統(tǒng)。Kubernetes 的目標旨在消除編排物理 / 虛擬計算,網(wǎng)絡(luò)和存儲基礎(chǔ)設(shè)施的負擔,并使應(yīng)用程序運營商和開發(fā)人員完全將重點放在以容器為中心的原語上進行自助運營。Kubernetes 也提供穩(wěn)定、兼容的基礎(chǔ)(平臺),用于構(gòu)建定制化的 workflows 和更高級的自動化任務(wù)。Kubernetes 具備完善的集群管理能力,包括多層次的安全防護和準入機制、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和服務(wù)發(fā)現(xiàn)機制、內(nèi)建負載均衡器、故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動升級和在線擴容、可擴展的資源自動調(diào)度機制、多粒度的資源配額管理能力。Kubernetes 還提供完善的管理工具,涵蓋開發(fā)、部署測試、運維監(jiān)控等各個環(huán)節(jié)。
如果你想成為互聯(lián)網(wǎng)架構(gòu)師,K8S架構(gòu)是你應(yīng)該去了解的。
軟件工程師一直都在為這兩個目標而努力奮斗,以求把軟件編寫得更加清晰、更加健壯、更加易于擴展和維護。
但后來,人們發(fā)現(xiàn)有更多的訴求,希望開發(fā)軟件變得更簡單、更快捷,程序員希望更少編寫代碼,非專業(yè)人員也希望能開發(fā)程序,于是,更多的更傻瓜的編程語言被發(fā)明出來,更多的編程技術(shù)和編程思想被發(fā)明出來,比如庫、組件、云基礎(chǔ)設(shè)施。
于是很多技術(shù)變成了屠龍之技,比如匯編,時代變了,建國后動物不能成精了,沒有龍可以宰了,然后很多軟件工程師搖身一變成了調(diào)參工程師、Call API磚家、用庫包能手、拼組件達人,這是效率分工的結(jié)果,也是技術(shù)發(fā)展的使然。
縱觀近二十年的科技互聯(lián)網(wǎng)發(fā)展歷程,大的趨勢是技術(shù)下沉,特別是近些年,隨著云計算的發(fā)展和普及,基礎(chǔ)設(shè)施越來越厚實,業(yè)務(wù)開發(fā)變得越來越容易,也越來越?jīng)]有技術(shù)含量,而之前困擾小團隊的性能、負載、安全性、擴展性問題都不復(fù)存在,這不禁讓互聯(lián)網(wǎng)行業(yè)的油膩大叔們噤若寒蟬,仿佛分分鐘就要被卷入歷史洪流而萬劫不復(fù)。
雖然不可否認技術(shù)的重要性在降低,但也還不至于那么悲觀。遙想PC時代,當VB、Delphi、MFC出現(xiàn)的時候,也有類似論調(diào),所見即所得,點點鼠標,就可以開發(fā)PC桌面程序,是不是很高端?那時候碼農(nóng)的擔心相比現(xiàn)在恐怕是只多不少吧,但后來隨著互聯(lián)網(wǎng)興起,出現(xiàn)了后端開發(fā)這個工種,碼農(nóng)很快找到了新的戰(zhàn)場,網(wǎng)絡(luò)、分布式、數(shù)據(jù)庫、海量服務(wù)、容災(zāi)防錯,于是又玩出一堆新花樣。
技術(shù)永遠在不停向前發(fā)展,而我們需要加深對基礎(chǔ)知識的理解,以不變應(yīng)萬變,深耕一個領(lǐng)域,同時也需要多去嘗試新技術(shù),擴寬自己的眼界,增加解決問題的思路,當你有一技之長后,即便國內(nèi)35危機,你還可以去外企(Google,F(xiàn)acebook,亞馬遜,微軟等)養(yǎng)老。參考和擴展閱讀
https://jimmysong.io/kubernetes-handbook/concepts/https://cloud.51cto.com/art/202103/652294.htmhttps://cloud.tencent.com/developer/article/1404117https://www.zhihu.com/question/22799206https://www.chromium.org/developers/design-documents/multi-process-architecture
https://blog.csdn.net/zxc024000/article/details/80157332https://juejin.cn/post/6844904197859590151
- EOF -
后臺大佬
后臺路線都是面對后臺服務(wù)器業(yè)務(wù),比如web后臺服務(wù)器,視頻后臺服務(wù)器,搜索后臺服務(wù)器,游戲后臺服務(wù)器,直播后臺服務(wù)器,社交IM后臺服務(wù)器等等,大部分代碼和業(yè)務(wù)邏輯相關(guān),想成為大佬,必須精通專業(yè)領(lǐng)域業(yè)務(wù)知識。但同時也存在一些通用的技術(shù)要求, ?比如熟悉編程語言,數(shù)據(jù)結(jié)構(gòu)與算法,?網(wǎng)絡(luò)編程,TCP/IP協(xié)議,數(shù)據(jù)庫,中間件,高性能,高可用技術(shù)。
后臺技術(shù)演進
架構(gòu)演進
隨著 PC 局域網(wǎng),特別是關(guān)系型數(shù)據(jù)庫的應(yīng)用,基礎(chǔ)架構(gòu)發(fā)展成了兩層架構(gòu);隨后是廣域網(wǎng)的發(fā)展,由單體的多層架構(gòu),出現(xiàn)了 SOA,EDA 架構(gòu)盛行;接下來是虛擬機,再到今天的云計算基礎(chǔ)架構(gòu),又出現(xiàn)了微服務(wù),之后是 Container as a Service、Serverless ,到最近很火原云生架構(gòu)等,可以看到架構(gòu)的變化都是要充分利用 IT 基礎(chǔ)設(shè)施。
業(yè)務(wù)目標演進
???????????????????以往互聯(lián)網(wǎng)流量爆發(fā)時代,先抗住流量峰值,高并發(fā)、高性能是,支持水平擴展是后臺設(shè)計的重要目標?。當前互聯(lián)網(wǎng)流量見頂,存量競爭加劇,后臺服務(wù)的穩(wěn)定性變得愈發(fā)重要,企業(yè)降本增效決心變強,研發(fā)效率,監(jiān)控運維平臺,自動化測試,CI/CD流水線等也變得重要起來。
后臺開發(fā)語言演進
服務(wù)器硬件資源昂貴年代,C 既能高性能,又能代碼復(fù)用(OOP編程),成了很多大廠后臺開發(fā)的主力語言。
第一代web后臺開發(fā)主流是PHP,那時候互聯(lián)網(wǎng)主流的后臺架構(gòu)是LAMP架構(gòu),隨著電商興起,Android 手機普及,大數(shù)據(jù)出現(xiàn),推動JAVA技術(shù)棧發(fā)展,JAVA成了互聯(lián)網(wǎng)主流后臺編程語言。
隨著云計算時代到來,云原生計算興起,Go語言生態(tài)發(fā)展穩(wěn)健,兼顧性能和開發(fā)速度,越來越多企業(yè)在生產(chǎn)中使用 Go語言落地業(yè)務(wù),目前很多大廠后臺開發(fā)語言已經(jīng)開始轉(zhuǎn)向Go。
人工智能發(fā)展,也推動Python語言發(fā)展,簡單,上手快,開發(fā)效率高,成了一些不在乎性能后臺組件的開發(fā)語言。
由于安全性,穩(wěn)定性越發(fā)重要,Rust有可能成后臺關(guān)鍵組件開發(fā)語言,兼顧性能和內(nèi)存安全性,用來替換后臺系統(tǒng)核心的C 組件;
對于未來,Python、Go、Rust 成為后端未來最先考慮學(xué)習編程語言。
目前國內(nèi)各個大廠主流后臺語言不盡相同:
- 騰訊偏向C ,Go等,Go越來越流行
- 阿里,拼多多,美團,京東偏向Java
- 字節(jié)偏向Go/Python
- 百度偏向C
- 華為偏向C/C
中間件高手
中間件(Middleware)一種應(yīng)用于分布式系統(tǒng)的基礎(chǔ)軟件,自上世紀80年代誕生以來,在分布式環(huán)境中低調(diào)地發(fā)揮著重要作用?;谥虚g件,系統(tǒng)軟件與應(yīng)用軟件之間實現(xiàn)了高效連接與溝通,應(yīng)用開發(fā)得以提速。消息中間件
- ActiveMQ 的社區(qū)算是比較成熟,但是較目前來說,ActiveMQ 的性能比較差,而且版本迭代很慢,不推薦使用。
- RabbitMQ 在吞吐量方面雖然稍遜于 Kafka 和 RocketMQ ,但是由于它基于 erlang 開發(fā),所以并發(fā)能力很強,性能極其好,延時很低,達到微秒級。但是也因為 RabbitMQ 基于 erlang 開發(fā),所以國內(nèi)很少有公司有實力做erlang源碼級別的研究和定制。如果業(yè)務(wù)場景對并發(fā)量要求不是太高(十萬級、百萬級),那這四種消息隊列中,RabbitMQ 一定是你的首選。如果是大數(shù)據(jù)領(lǐng)域的實時計算、日志采集等場景,用 Kafka 是業(yè)內(nèi)標準的,絕對沒問題,社區(qū)活躍度很高,絕對不會黃,何況幾乎是全世界這個領(lǐng)域的事實性規(guī)范。
- RocketMQ 阿里出品,Java 系開源項目,源代碼我們可以直接閱讀,然后可以定制自己公司的MQ,并且 RocketMQ 有阿里巴巴的實際業(yè)務(wù)場景的實戰(zhàn)考驗。RocketMQ 社區(qū)活躍度相對較為一般,不過也還可以,文檔相對來說簡單一些。還有就是阿里出臺的技術(shù),你得應(yīng)對這個技術(shù)萬一被拋棄,社區(qū)黃掉的風險,如果你們公司有技術(shù)實力我覺得用RocketMQ 挺好的。
- Kafka 的特點其實很明顯,就是僅僅提供較少的核心功能,但是提供超高的吞吐量,ms 級的延遲,極高的可用性以及可靠性,而且分布式可以任意擴展。同時 Kafka 最好是支撐較少的 topic 數(shù)量即可,保證其超高吞吐量。Kafka 唯一的一點劣勢是有可能消息重復(fù)消費,那么對數(shù)據(jù)準確性會造成極其輕微的影響,在大數(shù)據(jù)領(lǐng)域中以及日志采集中,這點輕微影響可以忽略。Kafka天然適合大數(shù)據(jù)實時計算以及日志收集。
下一代消息中間件Apache Pulsar:
?對比kafka
Apache Pulsar 和 Apache Kafka 之間的根本區(qū)別在于 Apache Kafka 是以分區(qū)為存儲中心,而 Apache Pulsar 是以 Segment 為存儲中心, Apache Pulsar 這種獨特的基于分布式日志存儲的以 Segment 為中心的發(fā)布/訂閱消息系統(tǒng)可以提供許多優(yōu)勢,例如可靠的流式系統(tǒng),包括無限制的日志存儲,無需分區(qū)重新平衡的即時擴展,快速復(fù)制修復(fù)以及通過最大化數(shù)據(jù)放置實現(xiàn)高寫入和讀取可用性選項.緩存中間件我們都知道CPU的緩存的作用是為了減少對內(nèi)存訪問,同樣擴展到分布式系統(tǒng)里面,緩存中間件可以提高對組件數(shù)據(jù)的訪問性能。
redis就是比較流行緩存中間件,根據(jù)局部性原理,冷熱數(shù)據(jù)分離,一般用來加快數(shù)據(jù)庫的高頻數(shù)據(jù)訪問:
未來優(yōu)化方向:
- 高可用
- 持久化優(yōu)化
- 安全加密
- IO、連接優(yōu)化
- 多線程優(yōu)化
- 數(shù)據(jù)結(jié)構(gòu)優(yōu)化,支持更多數(shù)據(jù)結(jié)構(gòu)
?RPC框架
RPC是指遠程過程調(diào)用,也就是說兩臺服務(wù)器A,B,一個應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達調(diào)用的語義和傳達調(diào)用的數(shù)據(jù)。
微服務(wù)時代的遠程服務(wù)調(diào)用框架。如grpc, Thrift, 阿里的 HSF, Dubbo, SOFA-RPC;
未來發(fā)展方向:
- 支持微服務(wù)技術(shù)演進
- 框架侵入性改進,語言無關(guān),通信協(xié)議無關(guān)。
- Service Mesh,Service Mesh是一個基礎(chǔ)設(shè)施層,其獨立運行在應(yīng)用服務(wù)之外,提供應(yīng)用服務(wù)之間安全、可靠、高效的通信,并為服務(wù)通信實現(xiàn)了微服務(wù)運行所需的基本組件功能,包括服務(wù)注冊發(fā)現(xiàn)、負載均衡、故障恢復(fù)、監(jiān)控、權(quán)限控制等等
- 性能優(yōu)化,序列化協(xié)議優(yōu)化,消息編碼優(yōu)化,網(wǎng)絡(luò)IO優(yōu)化等。
負載均衡
負載均衡(Load Balancing)是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負載分布到多個服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性硬件:F5、Redware...軟件:lvs(四層)、haproxy(四,七層)、nginx(七層)...未來發(fā)展方向:
- 支持更智能調(diào)度算法:循環(huán)?- 請求按順序分布在服務(wù)器組中。最少的連接?——一個新的請求被發(fā)送到與客戶端的當前連接最少的服務(wù)器。每個服務(wù)器的相對計算能力被考慮到確定哪個服務(wù)器的連接最少。最短時間- 將請求發(fā)送到由結(jié)合了
最快響應(yīng)時間和最少活動連接的公式選擇的服務(wù)器。NGINX Plus 獨有。Hash?– 根據(jù)您定義的密鑰分發(fā)請求,例如客戶端 IP 地址或
請求 URL。
如果上游服務(wù)器集發(fā)生變化,NGINX Plus 可以選擇應(yīng)用一致的哈希來最小化負載的重新分配。IP Hash??– 客戶端的 IP 地址用于確定哪個服務(wù)器接收請求。
- 業(yè)務(wù)上云,云上負載均衡(LaaS,PaaS服務(wù))。
- 高性能優(yōu)化,降低成本,大流量(IO優(yōu)化,DPDK,F(xiàn)PGA,P4演進),硬件。
- 高可用,可觀測,監(jiān)控統(tǒng)計,告警系統(tǒng),平滑擴容,服務(wù)剔除,無狀態(tài)化。
內(nèi)核大師
內(nèi)核路線,探究底層奧秘云計算云計算進程提速,一切皆服務(wù),導(dǎo)致原來不掙錢底層技術(shù),可以賣錢了,技術(shù)可以通過云計算向外輸出,這是底層技術(shù)人春天的到來:
Software as a Service,軟件即服務(wù),簡稱SaaS,這層的作用是將應(yīng)用作為服務(wù)提供給客戶。Platform as a Service,平臺即服務(wù),簡稱PaaS,這層的作用是將一個開發(fā)平臺作為服務(wù)提供給用戶。Infrastructure as a Service, 基礎(chǔ)設(shè)施即服務(wù),簡稱IaaS,這層的作用是提供虛擬機或者其他資源作為服務(wù)提供給用戶。
IaaS核心技術(shù):計算,網(wǎng)絡(luò),存儲,這些可以算是軟件技術(shù)的最底層了(再底層,就是硬件了),基本上要和內(nèi)核OS打交道,要求具有內(nèi)核的二次開發(fā)的能力,熟悉操作系統(tǒng)實現(xiàn)(主要是熟悉Linux內(nèi)核源碼)。
計算:計算虛擬化,內(nèi)核調(diào)度系統(tǒng),cgroups,KVM, QEMU,virtio;網(wǎng)絡(luò):網(wǎng)絡(luò)虛擬化,內(nèi)核協(xié)議棧,netfilter,netns,DPDK,智能網(wǎng)卡,RDMA,P4等;
存儲:內(nèi)存虛擬化,磁盤虛擬化,SPDK等;
PaaS核心技術(shù):應(yīng)用運行環(huán)境(容器,多租戶彈性,K8S),應(yīng)用全生命周期支持(devops,自動化運維),集成、復(fù)合應(yīng)用構(gòu)建能力(CI/CD)等。
這些技術(shù)職位本身門檻是很高的,待遇也比一般職位要高,對底層技術(shù)非常感興趣可以關(guān)注。
瀏覽器內(nèi)核
webkit
WebKit是Safari、Mail、App Store 和 macOS、iOS 和 Linux 上的許多其他應(yīng)用程序使用的網(wǎng)絡(luò)瀏覽器引擎。
Chromium
Chromium是一個用于網(wǎng)絡(luò)瀏覽器的免費開源?代碼庫,主要由Google開發(fā)和維護。Google 使用該代碼制作其Chrome網(wǎng)絡(luò)瀏覽器,該瀏覽器具有附加功能。
Chromium代碼庫被廣泛使用。Microsoft Edge、Opera,QQ瀏覽器,UC瀏覽器等國內(nèi)瀏覽器,和許多其他瀏覽器都基于該代碼。此外,代碼的重要部分被多個應(yīng)用程序框架使用。
chromium架構(gòu)
C 是主要語言,約占代碼庫的一半。這包括Blink和V8 引擎、HTTP和其他協(xié)議的實現(xiàn)、內(nèi)部緩存系統(tǒng)和其他基本瀏覽器組件。一些用戶界面是用HTML、CSS和JavaScript 實現(xiàn)的。大量的網(wǎng)絡(luò)平臺測試也是用這些語言編寫的。大約 10% 的代碼庫是用C編寫的。這主要來自提供基本功能的第三方庫,例如SQLite和眾多編解碼器。支持移動?操作系統(tǒng)需要特殊的語言:Java的用于Android的,和iOS的兩個斯威夫特和????????Objective-C的。(Apple的WebKit引擎的副本也在代碼庫中,因為 iOS 瀏覽器需要它)
如果對web內(nèi)核技術(shù)感興趣,可以選擇瀏覽器方向!
數(shù)據(jù)庫內(nèi)核
技術(shù)初衷在操作系統(tǒng)出現(xiàn)之后,隨著計算機應(yīng)用范圍的擴大、需要處理的數(shù)據(jù)迅速膨脹。最初,數(shù)據(jù)與程序一樣,以簡單的文件作為主要存儲形式。以這種方式組織的數(shù)據(jù)在邏輯上更簡單,但可擴展性差,訪問這種數(shù)據(jù)的程序需要了解數(shù)據(jù)的具體組織格式。當系統(tǒng)數(shù)據(jù)量大或者用戶訪問量大時,應(yīng)用程序還需要解決數(shù)據(jù)的完整性、一致性以及安全性等一系列的問題。因此,必須開發(fā)出一種系統(tǒng)軟件,它應(yīng)該能夠像操作系統(tǒng)屏蔽了硬件訪問復(fù)雜性那樣,屏蔽數(shù)據(jù)訪問的復(fù)雜性。由此產(chǎn)生了數(shù)據(jù)管理系統(tǒng),即數(shù)據(jù)庫。
目前現(xiàn)狀世界范圍內(nèi),做數(shù)據(jù)庫開發(fā)的,基本上都是基于開源項目,即便是自研也肯定會參考現(xiàn)有的開源項目,所以要選擇數(shù)據(jù)庫,必須要把開源玩的非常溜才行,比如MySQL, PostgreSQL, MongoDB, LevelDB等。目前云計算廠商都在大力發(fā)展數(shù)據(jù)庫,在國內(nèi)公有云部署模式中,阿里、騰訊、AWS、Oracle、華為、Microsoft位列前六,于國內(nèi)數(shù)據(jù)庫行業(yè)而言,數(shù)據(jù)庫廠商取得四十年最好的發(fā)展機會,市場大環(huán)境(國家去IOE化戰(zhàn)略)有利于國內(nèi)廠商,技術(shù)方面總體接近,一些技術(shù)持平甚至領(lǐng)先
當前熱門方向:
- 分布式數(shù)據(jù)庫,分片,事務(wù),一致性等
- 數(shù)據(jù)庫性能優(yōu)化,SQL指令優(yōu)化,軟件優(yōu)化,硬件加速
- 高可用架構(gòu)
- 存量數(shù)據(jù)庫上云
- 數(shù)據(jù)庫智能化,自動化管控
- 云原生架構(gòu)
操作系統(tǒng)?
目前國家大力發(fā)在新基建,鼓勵和政策支持企業(yè)開發(fā)基礎(chǔ)技術(shù),操作系統(tǒng)當前就是一個重要方向,目前各大公司要么自研OS,要么基于開源OS進行二次開發(fā)。
目前熱門技術(shù)方向:
- 鴻蒙開源OS,自研OS
- 嵌入式OS,自研和基于嵌入式Linux
- 手機OS,基于Android二次開發(fā)
- 云計算OS,基于Linux 內(nèi)核, Redhat發(fā)行版等二次開發(fā)
開發(fā)OS,主要是適配新硬件,性能優(yōu)化(調(diào)度性能,內(nèi)存分配性能,協(xié)議棧處理性能,文件系統(tǒng)優(yōu)化),穩(wěn)定性優(yōu)化,虛擬化技術(shù)等。
如果對OS有情懷,喜歡和底層硬件打交道,可以選擇操作系統(tǒng)方向,目前前景還不錯!
嵌入式
由于5G,AI發(fā)展,手機,智能硬件,自動駕駛,IoT領(lǐng)域又煥發(fā)新春,各種智能硬件起飛。
熱門技術(shù)方向:
- 嵌入式OS(Vxworks,Alios, TencentOS tiny,?Huawei LiteOS、RT-Thread等)
- 智能家居系統(tǒng)
- 手機OS(鴻蒙,Android等)
- 手機性能優(yōu)化(性能和節(jié)能更強)
- 自動駕駛技術(shù)
JDK
自1995年Sun公司推出Java至今,Java這門編程語言已經(jīng)風光了25年。最近關(guān)于Java要沒落的言論甚囂塵上,但Java仍然是國內(nèi)中國互聯(lián)網(wǎng)公司首選的編程語言,諸如阿里巴巴、京東、百度、騰訊、美團等。隨著互聯(lián)網(wǎng)、大數(shù)據(jù)、AI的迅猛發(fā)展,國內(nèi)JAVA生態(tài)已逐漸劃分成了幾大陣營,J2EE企業(yè)級應(yīng)用傳統(tǒng)領(lǐng)域是大廠商(甲骨文、微軟)主導(dǎo),互聯(lián)網(wǎng)領(lǐng)域是pivotal,互聯(lián)網(wǎng)中間件是阿里云和pivotal在推spring cloud,大數(shù)據(jù)、移動安卓又分別是另一個獨立生態(tài)。
OpenJDK(開放 Java 開發(fā)工具包)是Java 平臺標準版(Java SE)的免費開源實現(xiàn)。目前各個大公司都在發(fā)展自己JDK版本,如果想在Java領(lǐng)域深耕且想轉(zhuǎn)為底層開發(fā),可以選擇JDK這條路!
分布式專家
微服務(wù)Service Mesh 在過去的一年依舊保持著熱度。在已經(jīng)過去的 2020,微服務(wù)可以說有堅守也有破局,有對服務(wù)微化共識的形成也有對特殊場景的理性思考。我們可以看到服務(wù)框架依然在持續(xù)演進,奔向云原生,擁抱云化。越來越多的企業(yè)開始跟上服務(wù)化云化步伐。
微服務(wù)、DDD、中臺技術(shù)并非企業(yè)技術(shù)架構(gòu)設(shè)計的銀彈,微服務(wù)的主要缺點是微服務(wù)的分布式特點帶來的復(fù)雜性。開發(fā)人員需要基于RPC或者消息實現(xiàn)微服務(wù)之間的調(diào)用和通信,而這就使得服務(wù)之間的發(fā)現(xiàn)、服務(wù)調(diào)用鏈的跟蹤和質(zhì)量問題變得的相當棘手。
騰訊開源的微服務(wù)框架TARS:
但微服務(wù)仍然分布式的熱門方向,符合高內(nèi)聚,低耦合架構(gòu)設(shè)計思想,這個過程中出現(xiàn)的問題等著我們?nèi)ソ鉀Q,比如Service Mesh出現(xiàn)。
Service Mesh作為Sidebar運行,對應(yīng)用程序來說是透明,所有應(yīng)用程序間的流量都會通過它,所以對應(yīng)用程序流量的控制都可以在Service Mesh中實現(xiàn)。
目前流行的Service Mesh開源軟件有Linkerd、Envoy和Istio,而最近Buoyant(開源Linkerd的公司)又發(fā)布了基于Kubernetes的Service Mesh開源項目Conduit。
中臺架構(gòu)
當前企業(yè)做大做強后,業(yè)務(wù)必然會增多,開始出現(xiàn)重復(fù)造輪子,由于業(yè)務(wù)擴張,本身人力就不足,所以長期方案還是會采用類似中臺的技術(shù),這樣節(jié)約人力,具體怎么落地,這個是考驗團隊和公司從上到下的推動能力了。
云原生
云原生(CloudNative)是一個組合詞,Cloud Native。Cloud表示應(yīng)用程序位于云中,而不是傳統(tǒng)的數(shù)據(jù)中心;Native表示應(yīng)用程序從設(shè)計之初即考慮到云的環(huán)境,原生為云而設(shè)計,在云上以最佳姿勢運行,充分利用和發(fā)揮云平臺的彈性 分布式優(yōu)勢。
2021年伊始,云原生的布局開始加速。華為云聯(lián)合CNCF(云原生計算基金會)、中國信通院成立創(chuàng)原會,加速云原生產(chǎn)業(yè)落地;金山云發(fā)布云原生全景圖、云原生產(chǎn)品矩陣和最新的Serverless產(chǎn)品;諾基亞宣布與谷歌云合作開發(fā)云原生5G技術(shù)……幾乎所有云廠商新發(fā)布的云計算產(chǎn)品都已打上了云原生的標簽。
云原生核心技術(shù):
- 容器化:作為應(yīng)用包裝的載體
- 持續(xù)交付:利用容器的輕便的特性,構(gòu)建持續(xù)集成和持續(xù)發(fā)布的流水線
- DevOps:開發(fā)與運維之間的協(xié)同,上升到一種文化的層次,能夠讓應(yīng)用快速的部署和發(fā)布
- 微服務(wù):這是應(yīng)用開發(fā)的一種理念,將單體應(yīng)用拆分為微服務(wù)才能更好的實現(xiàn)云原生,才能獨立的部署、擴展和更新
K8S已經(jīng)成為下一代云原生操作系統(tǒng)
Kuberentes 架構(gòu)
Kubernetes 最初源于谷歌內(nèi)部的 Borg,提供了面向應(yīng)用的容器集群部署和管理系統(tǒng)。Kubernetes 的目標旨在消除編排物理 / 虛擬計算,網(wǎng)絡(luò)和存儲基礎(chǔ)設(shè)施的負擔,并使應(yīng)用程序運營商和開發(fā)人員完全將重點放在以容器為中心的原語上進行自助運營。Kubernetes 也提供穩(wěn)定、兼容的基礎(chǔ)(平臺),用于構(gòu)建定制化的 workflows 和更高級的自動化任務(wù)。Kubernetes 具備完善的集群管理能力,包括多層次的安全防護和準入機制、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和服務(wù)發(fā)現(xiàn)機制、內(nèi)建負載均衡器、故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動升級和在線擴容、可擴展的資源自動調(diào)度機制、多粒度的資源配額管理能力。Kubernetes 還提供完善的管理工具,涵蓋開發(fā)、部署測試、運維監(jiān)控等各個環(huán)節(jié)。
如果你想成為互聯(lián)網(wǎng)架構(gòu)師,K8S架構(gòu)是你應(yīng)該去了解的。
什么時候要考慮開始跳槽了
一般在一家公司,認真努力工作三年后(摸魚不算),職位沒有普升或者薪水沒有翻倍,就可以考慮跳槽了,請記住我們的口號是:如何應(yīng)對技術(shù)趨勢變化
軟件設(shè)計有兩個關(guān)鍵目標:高內(nèi)聚、低耦合,圍繞這2個核心目標,又提出了單一職責、開閉原則、里氏替換、依賴導(dǎo)致、接口隔離、最少知識等設(shè)計原則。軟件工程師一直都在為這兩個目標而努力奮斗,以求把軟件編寫得更加清晰、更加健壯、更加易于擴展和維護。
但后來,人們發(fā)現(xiàn)有更多的訴求,希望開發(fā)軟件變得更簡單、更快捷,程序員希望更少編寫代碼,非專業(yè)人員也希望能開發(fā)程序,于是,更多的更傻瓜的編程語言被發(fā)明出來,更多的編程技術(shù)和編程思想被發(fā)明出來,比如庫、組件、云基礎(chǔ)設(shè)施。
于是很多技術(shù)變成了屠龍之技,比如匯編,時代變了,建國后動物不能成精了,沒有龍可以宰了,然后很多軟件工程師搖身一變成了調(diào)參工程師、Call API磚家、用庫包能手、拼組件達人,這是效率分工的結(jié)果,也是技術(shù)發(fā)展的使然。
縱觀近二十年的科技互聯(lián)網(wǎng)發(fā)展歷程,大的趨勢是技術(shù)下沉,特別是近些年,隨著云計算的發(fā)展和普及,基礎(chǔ)設(shè)施越來越厚實,業(yè)務(wù)開發(fā)變得越來越容易,也越來越?jīng)]有技術(shù)含量,而之前困擾小團隊的性能、負載、安全性、擴展性問題都不復(fù)存在,這不禁讓互聯(lián)網(wǎng)行業(yè)的油膩大叔們噤若寒蟬,仿佛分分鐘就要被卷入歷史洪流而萬劫不復(fù)。
雖然不可否認技術(shù)的重要性在降低,但也還不至于那么悲觀。遙想PC時代,當VB、Delphi、MFC出現(xiàn)的時候,也有類似論調(diào),所見即所得,點點鼠標,就可以開發(fā)PC桌面程序,是不是很高端?那時候碼農(nóng)的擔心相比現(xiàn)在恐怕是只多不少吧,但后來隨著互聯(lián)網(wǎng)興起,出現(xiàn)了后端開發(fā)這個工種,碼農(nóng)很快找到了新的戰(zhàn)場,網(wǎng)絡(luò)、分布式、數(shù)據(jù)庫、海量服務(wù)、容災(zāi)防錯,于是又玩出一堆新花樣。
技術(shù)永遠在不停向前發(fā)展,而我們需要加深對基礎(chǔ)知識的理解,以不變應(yīng)萬變,深耕一個領(lǐng)域,同時也需要多去嘗試新技術(shù),擴寬自己的眼界,增加解決問題的思路,當你有一技之長后,即便國內(nèi)35危機,你還可以去外企(Google,F(xiàn)acebook,亞馬遜,微軟等)養(yǎng)老。
參考和擴展閱讀
https://jimmysong.io/kubernetes-handbook/concepts/https://cloud.51cto.com/art/202103/652294.htmhttps://cloud.tencent.com/developer/article/1404117https://www.zhihu.com/question/22799206https://www.chromium.org/developers/design-documents/multi-process-architecturehttps://blog.csdn.net/zxc024000/article/details/80157332https://juejin.cn/post/6844904197859590151
- EOF -