前言
本文主要是寫給那些想從事中間件開發(fā)的同學(xué)看的 :)
如果你沒有這個打算,那么本文的學(xué)習(xí)路線非但不實用万细,還可能會影響你正常的工作 :)
什么是中間件開發(fā)?
隨著國內(nèi)軟件行業(yè)的發(fā)展瓦戚,國內(nèi)互聯(lián)網(wǎng)公司規(guī)模越來越大匪燕,業(yè)務(wù)越來越復(fù)雜,隨之使用大量的中間件來提高后臺服務(wù)性能侮叮。由此產(chǎn)生了中間件開發(fā)和維護人員避矢。
誠然,在小公司囊榜,中間件审胸,例如緩存,MQ卸勺,RPC 等服務(wù)砂沛,極大可能是由業(yè)務(wù)開發(fā)人員自己維護,或者委托第三方云平臺運維(支付一些費用)曙求。但碍庵,如果后臺開發(fā)超過 200 人映企,基本就會組建自己的中間件或者基礎(chǔ)架構(gòu)團隊,用于維護后臺服務(wù)器基礎(chǔ)架構(gòu)和中間件静浴。
更大規(guī)模的公司堰氓,則由于各種各樣的原因(性能,KPI)苹享,會自己開發(fā)中間件双絮,簡稱自研。這要求中間件團隊需要更多的人員富稻。
中間件開發(fā)人員需要哪些素質(zhì)掷邦?
既然需要中間件開發(fā)人員,那么中間件開發(fā)人員一般從哪里招聘呢椭赋?招聘的要求是什么抚岗?
通常,一個公司在剛開始組建中間件團隊的時候哪怔,都會從公司內(nèi)部挑選精英人才宣蔚,或者挑選對中間件感興趣的人才。這時候认境,可能你沒有相關(guān)經(jīng)驗胚委,但你仍然有機會參與到中間件開發(fā)中。反之叉信,如果你沒有中間件開發(fā)經(jīng)驗亩冬,想通過招聘的方式進入中間件行業(yè),那么相對而言硼身,會有些曲折硅急。
那么,假設(shè)佳遂,你想從事中間件開發(fā)营袜,但,你沒有中間件開發(fā)經(jīng)驗丑罪,且荚板,你的公司也沒有組建中間件團隊的打算。
該怎么突破吩屹?
答: 跳槽跪另。跳槽到別的公司的中間件團隊。
這里就涉及到了一個中間件團隊需要哪些技能煤搜。因為跳槽肯定就要面試免绿,如果你面試的是中間件崗位,那么自然宅楞,就需要準(zhǔn)備中間件的相關(guān)知識针姿。
另外,還有一點厌衙,在這個分工明確的時代距淫,即使是中間件,也有很多種類婶希,我這里稍微分一下榕暇,可能不是很準(zhǔn)確。
- 服務(wù)治理中間件喻杈,例如 RPC 相關(guān)中間件彤枢,限流熔斷,鏈路追蹤筒饰,分布式配置中心等等缴啡。你可以從 SpringCloud 里找到相關(guān)的產(chǎn)品。當(dāng)然國內(nèi)也有很多優(yōu)秀的產(chǎn)品瓷们。
- 存儲中間件业栅,例如緩存,MQ等等谬晕,如果存儲涉及到分布式(通常都會涉及)碘裕,那么要求相對較高。
- 各種 Proxy攒钳,不論是數(shù)據(jù)庫帮孔,還是 Cache,還是各種存儲不撑,通常單機無法承載海量數(shù)據(jù)文兢,比較簡單的辦法就是使用 Proxy 進行代理,讓應(yīng)用透明的使用集群燎孟。出于性能考慮禽作,這里通常會使用性能較高的產(chǎn)品,例如 goLang揩页,C++ 等旷偿。Java 的長處——開發(fā)效率,在這個地方權(quán)重不大爆侣。
- 各種分布式中間件萍程,例如 ZK 這種,這個我個人認(rèn)為難度是較大的兔仰。分布式向來是軟件開發(fā)中比較困難的一個點茫负。特別是涉及到存儲和一致性。
- 容器相關(guān)乎赴,k8s忍法,docker等潮尝,容器化已經(jīng)是大勢所趨,其實我也不是很懂??(聽大佬們說的)饿序。
回到之前的話題: 一個中間件開發(fā)者需要哪些素質(zhì)勉失?
- 語言基礎(chǔ)。從 Java 程序員的角度原探,基礎(chǔ)通常就是:集合乱凿,并發(fā),JVM咽弦,Netty徒蟆,IO、NIO(mmap型型,sendfile)
- 計算機基礎(chǔ)段审,由于中間件開發(fā)人員經(jīng)常和 OS 打交道,所以計算機基礎(chǔ)也必不可少输莺,例如文件系統(tǒng)(IO/磁盤)戚哎,進程線程,內(nèi)存管理嫂用。
- 網(wǎng)絡(luò)基礎(chǔ)型凳,搞后臺的人員,肯定要對網(wǎng)絡(luò)熟悉了嘱函,熟悉在 Linux 下排查網(wǎng)絡(luò)問題甘畅,熟悉 Epoll 原理等。
- 分布式相關(guān)知識往弓,互聯(lián)網(wǎng)海量數(shù)據(jù)背景下疏唾,分布式知識必不可少,CAP函似, Paxos槐脏,Raft,zab撇寞,2pc顿天,3pc,base等等蔑担。最好能根據(jù)這些理論寫出實現(xiàn)代碼牌废。
- 熟悉開源實現(xiàn),即使你是業(yè)務(wù)開發(fā)人員啤握,你也 100% 會接觸開源項目鸟缕,例如 Spring,那么,通常你需要對這種常用的開源代碼有深刻的理解懂从,不僅知曉其原理授段,也領(lǐng)會其設(shè)計。從大的角度看番甩,你得看清整個框架的背景畴蒲,設(shè)計和取舍,從小的角度看对室,你得看清框架的內(nèi)部實現(xiàn)細(xì)節(jié),有哪些有趣的地方(通常這種框架都會進行性能優(yōu)化)咖祭。
- 了解行業(yè)風(fēng)向標(biāo)掩宜,中間件行業(yè)和業(yè)務(wù)開發(fā)稍有不同,每個中間件的版本升級都會讓該領(lǐng)域的開發(fā)者們側(cè)目(類似 iPhone 發(fā)布會)么翰,了解其特性牺汤,進而了解行業(yè)趨勢,最后成為行業(yè)引領(lǐng)浩嫌。
如何成為中間件開發(fā)人員檐迟?
好,說完了中間件開發(fā)人員需要哪些素質(zhì)码耐,自然追迟,如何成為中間件開發(fā)人員,就不言自明了骚腥。
說白了敦间,以上 6 個點,都是硬骨頭束铭。
- 對于已經(jīng)開始工作的人來說廓块,需要平時深刻的積累,說的難聽一點契沫,如果你的業(yè)務(wù)開發(fā)任務(wù)很重带猴,你很難搞定上門的這些內(nèi)容。
- 對于還在上學(xué)的同學(xué)來說懈万,很爽拴清,你可以用學(xué)校(不僅僅指大學(xué),據(jù)我所知的大神钞速,通常是初中/小學(xué)就開始編程贷掖,但這不是必須的)里大把的時間來學(xué)習(xí),一個個的搞定這些知識點渴语,和社招不同苹威,如果你的知識達到上面的水平,那么 SP offer 應(yīng)該是隨便拿了 :)
我這里重點和那些平時開發(fā)任務(wù)不重驾凶,想搞中間件的同學(xué)聊聊牙甫。
我假設(shè)你是一個工作 3 年以內(nèi)的 Java 開發(fā)人員掷酗,且你可能是培訓(xùn)生,半路出家窟哺,科班生泻轰,大專生,初中生且轨,且你不在大廠浮声,通常在一個后臺開發(fā)不超過 200 人的創(chuàng)業(yè)公司,title 是 “Java 開發(fā)工程師”旋奢,并且有一個程序員的夢想泳挥,不想 get、set至朗,不想 crud屉符,不想 html 填空,不想和產(chǎn)品同學(xué)討論锹引,也不想和測試同學(xué)點點點......(感覺這里會得罪人 =_=||)
你可能想跳槽矗钟。
那么你大概需要做以下準(zhǔn)備:
- 鞏固 Java 基礎(chǔ),集合源碼嫌变,并發(fā)源碼吨艇,JVM 原理,Netty 原理源碼腾啥,IO 相關(guān)(涉及到零拷貝文件存儲)秸应,這些都是 Java 基礎(chǔ),通常是必須的碑宴。
- 分布式原理软啼,最起碼知曉理論知識,最好能寫一個延柠,哪怕參照開源的也行祸挪。
- 源碼,Spring Mybatis Tomcat 等等贞间,這些代碼通常是你最先接觸的贿条,不妨從這里開始。RPC 中間件相關(guān)的增热,Dubbo整以,Motan,SOFA峻仇,挑一個吧公黑,推薦 SOFA。
- 再熟悉熟悉(熟悉指源碼和設(shè)計)分布式的相關(guān)產(chǎn)品,假設(shè)你是 Java 開發(fā)凡蚜,推薦 RocketMQ人断,Apollo 配置中心等等中間件,其實都可以朝蜘,MQ 相對復(fù)雜恶迈。
- 操作系統(tǒng),通常谱醇,你在研究上面的內(nèi)容時暇仲,會遇到操作系統(tǒng)的疑問,遇到不要繞過副渴,盡量弄明白熔吗。
- 自己的產(chǎn)品,有就最好了佳晶,例如公眾號,博客讼载,教學(xué)視頻轿秧,GitHub 項目等等,總之咨堤,是拿得出手的東西菇篡。
- 加大牛好友,了解行業(yè)風(fēng)向標(biāo)一喘。也許你是一個矜持的人驱还,但從事了這個行業(yè),你有必要和行業(yè)里優(yōu)秀的人學(xué)習(xí)(看看朋友圈就好)凸克。
結(jié)語
通骋轶。看完本文,你會有一絲疲憊萎战,甚至帶有那么一絲難過:太他么難了咐容!
如果你看完了本文內(nèi)容,覺得 so easy蚂维,那么請左轉(zhuǎn)阿里戳粒,或右轉(zhuǎn)美團。
我假定你是前者虫啥。那么請你尊重你的夢想蔚约。
這里引用一段臺詞:
如果你有夢想的話,就要去捍衛(wèi)它涂籽。那些一事無成的人想告訴你你也成不了大器苹祟。如果你有理想的話,就要去努力實現(xiàn)。就這樣苔咪。
實際上锰悼,這句話也是寫給我自己的。與君共勉团赏。
最后箕般,我所說的,都是錯的舔清。