1. 程式人生 > >談談中介軟體開發

談談中介軟體開發

前言

本文主要是寫給那些想從事中介軟體開發的同學看的 :)

如果你沒有這個打算,那麼本文的學習路線非但不實用,還可能會影響你正常的工作 :)

什麼是中介軟體開發?

隨著國內軟體行業的發展,國內網際網路公司規模越來越大,業務越來越複雜,隨之使用大量的中介軟體來提高後臺服務效能。由此產生了中介軟體開發和維護人員。

誠然,在小公司,中介軟體,例如快取,MQ,RPC 等服務,極大可能是由業務開發人員自己維護,或者委託第三方雲平臺運維(支付一些費用)。但,如果後臺開發超過 200 人,基本就會組建自己的中介軟體或者基礎架構團隊,用於維護後臺伺服器基礎架構和中介軟體。

更大規模的公司,則由於各種各樣的原因(效能,KPI),會自己開發中間件,簡稱自研。這要求中介軟體團隊需要更多的人員。

中介軟體開發人員需要哪些素質?

既然需要中介軟體開發人員,那麼中介軟體開發人員一般從哪裡招聘呢?招聘的要求是什麼?

通常,一個公司在剛開始組建中介軟體團隊的時候,都會從公司內部挑選精英人才,或者挑選對中介軟體感興趣的人才。這時候,可能你沒有相關經驗,但你仍然有機會參與到中介軟體開發中。反之,如果你沒有中介軟體開發經驗,想通過招聘的方式進入中介軟體行業,那麼相對而言,會有些曲折。

那麼,假設,你想從事中介軟體開發,但,你沒有中介軟體開發經驗,且,你的公司也沒有組建中介軟體團隊的打算。

該怎麼突破?

答: 跳槽。跳槽到別的公司的中介軟體團隊。

這裡就涉及到了一箇中間件團隊需要哪些技能。因為跳槽肯定就要面試,如果你面試的是中介軟體崗位,那麼自然,就需要準備中介軟體的相關知識。

另外,還有一點,在這個分工明確的時代,即使是中介軟體,也有很多種類,我這裡稍微分一下,可能不是很準確。

  1. 服務治理中介軟體,例如 RPC 相關中介軟體,限流熔斷,鏈路追蹤,分散式配置中心等等。你可以從 SpringCloud 裡找到相關的產品。當然國內也有很多優秀的產品。
  2. 儲存中介軟體,例如快取,MQ等等,如果儲存涉及到分散式(通常都會涉及),那麼要求相對較高。
  3. 各種 Proxy,不論是資料庫,還是 Cache,還是各種儲存,通常單機無法承載海量資料,比較簡單的辦法就是使用 Proxy 進行代理,讓應用透明的使用叢集。出於效能考慮,這裡通常會使用效能較高的產品,例如 goLang,C++ 等。Java 的長處——開發效率,在這個地方權重不大。
  4. 各種分散式中介軟體,例如 ZK 這種,這個我個人認為難度是較大的。分散式向來是軟體開發中比較困難的一個點。特別是涉及到儲存和一致性。
  5. 容器相關,k8s,docker等,容器化已經是大勢所趨,其實我也不是很懂?(聽大佬們說的)。

回到之前的話題: 一箇中間件開發者需要哪些素質?

  1. 語言基礎。從 Java 程式設計師的角度,基礎通常就是:集合,併發,JVM,Netty,IO、NIO(mmap,sendfile)
  2. 計算機基礎,由於中介軟體開發人員經常和 OS 打交道,所以計算機基礎也必不可少,例如檔案系統(IO/磁碟),程序執行緒,記憶體管理。
  3. 網路基礎,搞後臺的人員,肯定要對網路熟悉了,熟悉在 Linux 下排查網路問題,熟悉 Epoll 原理等。
  4. 分散式相關知識,網際網路海量資料背景下,分散式知識必不可少,CAP, Paxos,Raft,zab,2pc,3pc,base等等。最好能根據這些理論寫出實現程式碼。
  5. 熟悉開源實現,即使你是業務開發人員,你也 100% 會接觸開源專案,例如 Spring,那麼,通常你需要對這種常用的開原始碼有深刻的理解,不僅知曉其原理,也領會其設計。從大的角度看,你得看清整個框架的背景,設計和取捨,從小的角度看,你得看清框架的內部實現細節,有哪些有趣的地方(通常這種框架都會進行效能優化)。
  6. 瞭解行業風向標,中介軟體行業和業務開發稍有不同,每個中介軟體的版本升級都會讓該領域的開發者們側目(類似 iPhone 釋出會),瞭解其特性,進而瞭解行業趨勢,最後成為行業引領。

如何成為中介軟體開發人員?

好,說完了中介軟體開發人員需要哪些素質,自然,如何成為中介軟體開發人員,就不言自明瞭。

說白了,以上 6 個點,都是硬骨頭。

  • 對於已經開始工作的人來說,需要平時深刻的積累,說的難聽一點,如果你的業務開發任務很重,你很難搞定上門的這些內容。
  • 對於還在上學的同學來說,很爽,你可以用學校(不僅僅指大學,據我所知的大神,通常是初中/小學就開始程式設計,但這不是必須的)裡大把的時間來學習,一個個的搞定這些知識點,和社招不同,如果你的知識達到上面的水平,那麼 SP offer 應該是隨便拿了 :)

我這裡重點和那些平時開發任務不重,想搞中介軟體的同學聊聊。

我假設你是一個工作 3 年以內的 Java 開發人員,且你可能是培訓生,半路出家,科班生,大專生,初中生,且你不在大廠,通常在一個後臺開發不超過 200 人的創業公司,title 是 “Java 開發工程師”,並且有一個程式設計師的夢想,不想 get、set,不想 crud,不想 html 填空,不想和產品同學討論,也不想和測試同學點點點......(感覺這裡會得罪人 =_=||)

你可能想跳槽。

那麼你大概需要做以下準備:

  1. 鞏固 Java 基礎,集合原始碼,併發原始碼,JVM 原理,Netty 原理原始碼,IO 相關(涉及到零拷貝檔案儲存),這些都是 Java 基礎,通常是必須的。
  2. 分散式原理,最起碼知曉理論知識,最好能寫一個,哪怕參照開源的也行。
  3. 原始碼,Spring Mybatis Tomcat 等等,這些程式碼通常是你最先接觸的,不妨從這裡開始。RPC 中介軟體相關的,Dubbo,Motan,SOFA,挑一個吧,推薦 SOFA。
  4. 再熟悉熟悉(熟悉指原始碼和設計)分散式的相關產品,假設你是 Java 開發,推薦 RocketMQ,Apollo 配置中心等等中介軟體,其實都可以,MQ 相對複雜。
  5. 作業系統,通常,你在研究上面的內容時,會遇到作業系統的疑問,遇到不要繞過,儘量弄明白。
  6. 自己的產品,有就最好了,例如公眾號,部落格,教學視訊,GitHub 專案等等,總之,是拿得出手的東西。
  7. 加大牛好友,瞭解行業風向標。也許你是一個矜持的人,但從事了這個行業,你有必要和行業裡優秀的人學習(看看朋友圈就好)。

結語

通常看完本文,你會有一絲疲憊,甚至帶有那麼一絲難過:太他麼難了!

如果你看完了本文內容,覺得 so easy,那麼請左轉阿里,或右轉美團。

我假定你是前者。那麼請你尊重你的夢想。

這裡引用一段臺詞:

如果你有夢想的話,就要去捍衛它。那些一事無成的人想告訴你你也成不了大器。如果你有理想的話,就要去努力實現。就這樣。

實際上,這句話也是寫給我自己的。與君共勉。

最後,我所說的,都是錯的。