作者面對面:從化學專業到架構師,是一種什麼體驗?

目錄

1、是什麼讓你一頭扎進程序員隊伍裏的?

2、這一做就是十多年,應該也遇到過一些坑,能跟大傢俱體講講嗎?

3、您的履歷特別豐富,曾先後在阿里、銀行等大廠負責技術架構這塊。那你還記得當時面試的場景嗎?能給我們的讀者們一些面試的建議嗎?

4、您是資深的微服務方面的專家,既跟程超和張逸幾位老師合著了《高可用可伸縮微服務架構實戰:基於Dubbo、Spring Cloud和Service Mesh》一書,還撰寫了《微服務架構深度解析與最佳實踐》等技術文章。您分享相關技術的初衷是什麼?

5、您和任富飛老師一起撰寫的專欄 《JVM 核心技術 22 講》 近期上線了,對於那些潛在的讀者們,你希望讀者能通過閱讀你的專欄有什麼收穫?

6、對於廣大的程序員們,尤其是剛踏入此行的年輕人們,他們可能很關心編程語言、具體技術的選擇,糾結是選擇新興開源的還是成熟的技術,對於這些“焦慮”,您有什麼過來人的建議嗎?

7、在我們採訪的尾聲能否告訴大家,從你的經驗來看,未來比較有潛力的技術方向會是什麼?


「作者面對面 (Chat Chat)」是 GitChat 團隊出品的一檔對話技術寫作者的欄目。我們希望通過展示更多 Chat 作者的視角,來分享程序員關於生活和工作的態度,以及學習和成長的經歷。立足於寫作,但不限於寫作。

這次我們的採訪對象是一位有十多年研發經驗的資深架構師 秦金衛,KimmKing。他曾經在阿里擔任架構師,也曾擔任某商業銀行北京研發中心的負責人,他還在最近成爲了 Apache Dubbo PMC。

他關注領域包括互聯網、電商、金融、支付和區塊鏈等,熟悉海量併發低延遲交易系統的設計實現以及各類中間件,擅長 SOA/微服務等分佈式系統架構。在工作之餘,他也是各種開源技術的支持者、活躍於多個開源社區。

他和幾位作者一同出版了《高可用可伸縮微服務架構實戰:基於 Dubbo、Spring Cloud 和 Service Mesh》一書,並在近期推出了 GitChat 專欄 《JVM 核心技術 22 講》 。

JVM 核心技術 22 講​gitbook.cn圖標

本期面對面,我們一起聊聊他架構師路上的磕磕絆絆,以及他多年堅持技術分享的原動力。

1、是什麼讓你一頭扎進程序員隊伍裏的?

很久很久以前,我剛上大一,專業是化學,但是我發現自己對編程感興趣。正好我們學院自己搞了一個機房,我有幸成爲幾個管理員之一。這麼好的機會不能浪費。我那時候一不看電視劇二不玩遊戲(小編:學霸啊!沒有對比沒有傷害),天天癡迷於學習 VC、VB、Matlab,後來則是 Java 和 Dotnet。

今天做個紙牌遊戲玩鬥地主、明天搞個聊天室系統,一發不可收拾,每天最少幾百幾千行代碼起。看着自己的代碼成功編譯、運行起來以後,那種成就感,是無法比擬的。可以說,我是誤打誤撞➕興趣使然,進入了這個行業。

2011 年的時候,我在淘寶,對面工位是一個在中間件團隊做 TDDL 的技術大牛,巧的是他也是學化學的(北京大學化學工程專業)。我問他做程序員這一行的,學化學的人多不多。他跟我說前幾天去參加一個 C++ 的會,他前後左右好幾個人都是學化學轉行做的程序員。

所以我們的親身事例說明了,無論你是什麼專業,只要有心去學習和嘗試,都能夠在程序員這個羣體裏找到適合自己的位置。(小編:不要輕易給自己定性,對自己說“我不行”。)

我也要感謝這個高速發展的行業,讓我們這些從業者有機會跟着行業一起快速發展。

2、這一做就是十多年,應該也遇到過一些坑,能跟大傢俱體講講嗎?

回顧我這十來年的經歷,既有成功的經驗,也有不少失敗的教訓。踩過很多坑,填過很多坑,也挖過不少坑,三天三夜也說不完。總結起來,特別想跟大家分享兩點:

1)所有的坑,都是具體的問題。有些是已經發現的,有些是潛在還沒爆發的。

陳春花老師在《管理的嘗試》裏說,所有的管理都應該以問題爲導向,而不是以成就作爲導向。深以爲然,技術領域其實也一樣,不管是解決方案、架構設計,還是編碼實現、測試部署,都是在解決一個個的問題。翻過了一個問題的大山,還有另外一個。

而解決問題,需要我們去了解分析問題,然後依據分析的情況,結合自己過去的從業經驗去給出下一步的診斷方向或者可能的解決辦法。但是技術的發展變化速度實在太快了,如果作爲一線從業者的我們不去努力持續學習,跟着行業和技術本身一起成長進步,那麼很多可用的方法、工具和技巧就會在你考慮問題的視野之外。你自己都不知道,肯定不能很好地解決問題。

2)技術,一定要創造價值。創造價值,可以是提升了業務的業績數據,也可以是改善了用戶的體驗,也可以是降低了現有的成本或損失。

如果一項技術工作,沒有創造價值,那麼無論我們在上面做出了多少努力,從團隊和公司層面來講,它就是與我們的實際需求相割裂的,沒有意義的。(小編:有的時候可能只是假忙碌,卻一直在做無用功,只是感動了自己罷了。)

舉個例子,我在幾個規模不同、發展時期各異、研發成熟度不一的研發團隊中,都發現過一個共同的關於 JVM 的問題:線上經常有 JVM 實例自己突然崩潰,這個過程也許是三天,也許是 2 周,異常信息也很明確,就是內存溢出 OOM。運維人員不斷加大可用堆內存或者雲主機的內存,也無濟於事,頂多讓這個過程延緩。

大家懷疑內存泄露,但是看 GC 其實一直還都算正常,系統在性能測試環境也沒什麼問題,開發和運維還因此不斷髮生矛盾和衝突。

有個運維同事爲了緩解問題,通過一個多月的觀察,持續把一個沒什麼壓力的服務器從 2 臺逐漸擴展了 15 臺,因爲每天都有幾臺隨機崩潰。而從系統通知到他去處理的這段時間內,他需要讓其他機器可以持續提供服務。大家付出了很多努力,做了一些技術上的探索,還想了不少的歪招,但是沒有解決問題,也就沒有創造價值。

在深入瞭解了問題之後,我幾分鐘就解決了問題,我們把服務器又壓縮回 2 臺,可以保證系統穩定運行、業務持續可用。既終止了提高成本帶來的損失,也得到業務方和客戶認可。

那麼實際問題出在哪兒呢?一臺雲主機 4G 或 8G 內存,爲了讓 JVM 最大化使用內存,服務部署的同事直接配置了 xmx4g 或 xmx8g。因爲他不知道 xmx 配置的內存和 JVM 可能使用的內存是不相等的。我讓他把 8G 內存的雲主機,設置爲 xmx6g,從此再也沒出過問題。他也觀察發現,Java 進程最多的時候自己使用了 7G 出頭的內存(堆最多用 6g,Java 進程自己、堆外空間都需要使用內存,這些內存不在 xmx 的範圍內),而不是 xmx 設置的 6g 內存。

這個事情讓我意識到,可能很多人並沒有系統地瞭解過 JVM 的一些常識,這些都是很實用的 Java 基礎知識。市面上的 JVM 書籍,雖然深入討論了 JVM 內部的實現細節,但對一般學習者來講太深了,容易讓人望而卻步。這樣就導致了大家也不知道實用的知識點是什麼,怎麼轉化到實際的工作中,以及如何在工作中更好地應用這些工具。

所以,我們就覺得寫一個深入淺出的 JVM 專欄,是非常有益於大家的學習和工作的。既能讓大家很快系統地學會知識點,也可以讓大家能直接應用到實際工作中,產生價值。

3、您的履歷特別豐富,曾先後在阿里、銀行等大廠負責技術架構這塊。那你還記得當時面試的場景嗎?能給我們的讀者們一些面試的建議嗎?

我去淘寶是 2011 年初,面試細節我已經不太記得了。大概方向我還有點印象,像 JVM 之類的知識是面試中的重要技術問題。

近幾年來,我面試過的人超過一千位,從應屆校招生和實習生到中高級和資深開發,再到架構師和技術專家總監。我和我的團隊最爲關注的要點包括:基礎技術基本功是不是紮實、對實際問題有沒有深入分析和處理能力、跟同事/領導/業務部門等合作方的溝通能力、對自己的清晰認識和明確發展定位、對各種新鮮事物保持好奇心和探索精神等。

特別是基本功的持續積累,如果做不到,基本在面試的前 10 分鐘就可能讓面試官形成一個非常不好的印象,進而導致面試失敗。

4、您是資深的微服務方面的專家,既跟程超和張逸幾位老師合著了《高可用可伸縮微服務架構實戰:基於Dubbo、Spring Cloud和Service Mesh》一書,還撰寫了《微服務架構深度解析與最佳實踐》等技術文章。您分享相關技術的初衷是什麼?

我個人因爲工作關係,對 SOA 和微服務架構非常瞭解,也一直在從事相關框架的研究和應用工作,今年也成了 Apache Dubbo 項目的 PMC 管理委員會成員。

近幾年來,我在微服務相關技術和實踐上積累了大量的一手經驗。所以我也一直持續在社區和 GitChat 上,把這些經驗分享給大家,希望能幫助大家在做微服務項目或舊項目改造的過程中,儘量少走彎路,讓微服務架構的思路和原則,多快好省地在自己的場景落地。所以,我的初衷就是:我因爲分享而感到快樂,希望能跟大家一起用技術創造價值、改造世界。

5、您和任富飛老師一起撰寫的專欄 《JVM 核心技術 22 講》 近期上線了,對於那些潛在的讀者們,你希望讀者能通過閱讀你的專欄有什麼收穫?

市面上各類 JVM 相關的資料雖多,但是明顯存在兩個極端:要麼過於生澀難懂,要麼流於某個片段而不繫統化。同時各大公司也都越來越重視推動和發展 JVM 相關技術,在一線大廠的技術面試中 JVM 知識也是必考科目。

在這個背景下,我們全面梳理了系統化學習 JVM 的知識和經驗,包括 JVM 的技術和內存模型、JVM 參數和內置工具、GC 算法、GC 日誌、內存和線程等相關問題排查分析,以及常見的面試問題深度剖析等進階方法與實戰。既滿足大家快速系統化學習和全面掌握知識的需求,又兼顧大家的面試經驗輔導。

  • 夯實基礎:掌握 JVM 的基礎知識和常用工具,瞭解一般原理,知道從什麼地方着手分析問題;
  • 深入學習:掌握各類 GC 算法的一般原理,知道如何根據實際需要選擇使用合適的 GC 策略;
  • 分析問題:掌握 GC 日誌、線程、內存等維度的分析技巧,知道排查問題和優化系統的套路;
  • 積累經驗:瞭解常見的分析調優經驗,熟悉常見的面試問題和技巧,徹底學會 JVM 知識。

本專欄的特點可以總結爲 16 個字:

體系完整、層次分明、深入淺出、實踐爲要。

6、對於廣大的程序員們,尤其是剛踏入此行的年輕人們,他們可能很關心編程語言、具體技術的選擇,糾結是選擇新興開源的還是成熟的技術,對於這些“焦慮”,您有什麼過來人的建議嗎?

先告訴大家一個好消息,完全不需要焦慮,就像我在知乎的一個回覆裏提到的一樣:

按各方的統計口徑,今年中國的程序員數量大概在 400-700 萬之間。也有人保守估計大概在 350-450 萬之間。這其中 Java 程序員的比重最高。

雖然數量很大,但從招聘行業的統計來看缺口還是越來越大,而且越是技術高手(工作 5-8 年的資深或專家)越缺,其實每年畢業新進入到行業的人數比大家想象的少得多,同時還有不小比例的流出。

其實從兩個側面就可以看出來這種現象:

  • 市場前景:傳統 IT 的互聯網+進程還在繼續擴大,傳統企業的信息化進程還有很大空間,這就需要越來越多的技術人員加入互聯網,這說明在未來一定時間內,市場需要更多的技術人員。
  • 薪酬紅利:IT 技術人員的薪酬待遇還是比一般行業高不少,雖然門檻也要稍高一些,這說明優秀的 IT 技術人才還是賣方市場,缺口很大,所以待遇上有行業紅利。如果哪一天技術人員的薪酬跟一般的辦公室職員差不多了,就說明紅利結束,市場飽和,目前看來還很遠。

還是那句話,技術正是因爲 IT 行業的快速增長而爆發式發展。那些學會了一定知識就可以一成不變地使用 20 年的行業,都正在走向日暮西山的境地。我們只需要跟着行業終身學習,就可以在未來的 5-10 年,甚至 20 年內,持續享受到行業發展的紅利。

一個小竅門就是,不要只選一門語言或技術。我特別建議大家選擇 Java 這種市場廣闊、生態成熟、招聘量大的語言作爲主語言。深入學習,勤學苦練,在工作中使用,在大型項目裏使用,學透、用熟。同時選擇一兩門第二語言,比如 Python 或 Golang。在很多不同場景下,這些第二語言也會發揮一些意想不到的作用。

對於框架來說,開源是大趨勢。所有的好技術,越來越擁抱開源,連微軟都改了一向與開源爲敵的做派,開源了 dotnet core,收購了 GitHub 最大的開源網站。我們可以看到,微服務、大數據、雲原生、AI,每一個領域都有無數開源項目。每一個新興的技術,不是在開源,就是走向開源的路上。

7、在我們採訪的尾聲能否告訴大家,從你的經驗來看,未來比較有潛力的技術方向會是什麼?

這個問題太大了,我簡單縮小一下範圍來說說自己的看法。

1)從目前的大環境來看,比較熱的技術方向主要是 ABC:

  • A 是 AI 人工智能:近年來隨着深度學習、卷積神經網絡的發展,應用技術層面也發生了大爆發,可以說是未來可期。
  • B 之前是 Big Data 大數據,現在也指 Blockchain 區塊鏈,這兩個技術,在我們可以展望的未來裏,就是整個 IT 行業的血管和骨骼,支撐着我們的所有活動。
  • C 是 Cloud,包括雲計算,雲平臺、雲原生的技術體系、雲一體化等等,公有云、私有云、混合雲成爲所有 IT 行業的水電煤,支撐所有的 IT 系統和業務發展。

2)縮小到微服務架構、企業應用架構來看,從單體架構 -> 分層架構 -> SOA 架構 -> 微服務架構,我們越來越具備去指導大家設計、開發和維護更大規模的複雜業務系統的方法論和相關技術工具。同時微服務架構本身也開始出現兩個大的方向:

  • 一個是我們發現現有的各種微服務相關技術一邊在處理業務邏輯,另一方面同時也在處理各種非業務的特性,比如如何擴展、均衡負載和流控等等。因此我們應該把這些非業務部分的處理從應用程序裏拿出來,下沉到了下面一層,我們稱爲服務網格(Service Mesh)的基礎設施上,以 Istio/Envoy 爲代表。
  • 另外一部分人發現,我們之所有要搞這些非業務的特性,是因爲我們需要高可用和可伸縮這兩個重要的特性,於是發展了基於消息驅動的響應式微服務架構(Reactive MicroServices)。它要求我們的系統不管在什麼情況下,都保證一定範圍內的響應服務能力,同時又能夠快速恢復故障,在流量的壓力下可以快速擴展,增加實例或者減少實例,以 Vert.x 爲代表。

3)具體到 Java 相關的話,明顯可以看到 3 個大方向:

  • 一方面是最近 2 年多 Java 每半年發佈一個大的版本,新的特性不斷加入,特別是 lambda 和 var,以及 Stream API,ZGC 和 Shenandoah GC 等,給我們帶來了很多驚喜,也給 Java 注入了更多活力。
  • 第二方面,基於 JVM 的各種新語言層出不窮,從最開始靈活的腳本語言 Groovy,到 Scala、Clojure、JRuby、Jython,到後來的 Ceylon,Kotlin,Fantom,Xtend 等等。越來越多包含新特性的語言加入到了 JVM 上,也催生了 Vert.x 這種以多語言編程爲特點的框架,這意味着你可以直接使用不同語言來開發不同的微服務模塊、獨立部署,並允許它們在一起很好的工作。
  • 第三方面,除了 Oracle JDK 和 Open JDK 之類的開發運行環境,還有 Azul JVM 和 Oracle Graalvm 等非常有特點的 JVM:Azul JVM 的 C4 GC 能夠支撐上 T 規模的堆內存做到 GC 時間 1ms 一下;Graalvm 則是不僅支持多語言編程,而且能夠把 Java 程序直接編程 native 的平臺原生代碼,從而大大降低啓動時間和內存使用。

總之,技術的發展是日新月異的,我們要與時俱進、瞭解新技術、學會接受和嘗試新技術。技術是第一生產力。成熟而穩定的新技術,只要使用得當,就可以給我們帶來技術紅利,進而爲團隊、公司和行業創造出更多的價值。

 

採訪鏈接:

https://blog.csdn.net/GitChat/article/details/103590696​blog.csdn.net

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章