摘要:一葉知秋,回顧我的Java之路,最感謝還是阿里巴巴能夠給我們這些技術人員創造出這樣有挑戰的業務場景和業務需要,也感謝有這樣一群人能夠為了這個目標一起努力到現在。
與Java的不解之緣
看到這個專題名字的第一眼,真是感慨萬千:Java已經有20年曆史了啊,我竟然也用了這語言8年了,真是轉眼一瞬。
王晶昱(花名:沈詢)
王晶昱(花名:沈詢)
回想起8年前的我,應該是正在大學宿舍裡努力地從網上搜索C語言的各種教程,在“值傳遞和指標傳遞的區別是什麼?”“如何避免引用計數迴圈引用?”等問題中東突西撞不得要領吧。然後在某天,我偶然間看到了一門據稱比C++簡單的Java語言,恰巧還碰上一個好老師——莫倩老師,自然而然地激發起我去了解和學習Java的興趣。現在還記得當時在學習《ThinkinJava》時,我還不是特別理解BruceEckel介紹Java與C++的差別時提到的一句話:“Java是一種生產力語言”。當時我看著這句話,心裡一直在想:語言嘛,應該大同小異,能有什麼生產力提升?一個解釋型語言怎麼可能超越編譯語言呢?
轉眼,我使用Java已有8個年頭了,現在想想,Java真的帶給了我很多:它儘可能地避免我寫出錯誤的程式碼。它不需要我去計算指標偏移量,也不需要我去關心垃圾回收問題,連Collection類都有DougLea這樣的大神做好了封裝。這些語言內建機制和類庫極大地減輕了我的頭腦負擔,讓我能夠更加專注地完成業務邏輯。而最讓我驚喜的是,Java一直不懈地追求JVM虛擬機器的持續優化,各種眼花繚亂的鎖優化、動態位元組碼編譯調優、GC新演算法等JVM優化層出不窮。
在最近的幾年,我也可喜地看到,在Oracle的帶領下,Java語言的演進變得非常迅速。當我還在熟悉Java7的forkJoin框架的時候,支援Lambda的Java8已正式釋出了。
說起這個團隊,其實它在內部的名字一般稱為Java中介軟體。你看把Java放在了團隊的名字裡,這就是真愛啊!從2007年開始,我們就逐漸發現,外部企業級中介軟體並不是非常適合我們網際網路業務的實際發展需要。面對著每年翻番的使用者量和使用者請求,我們不得不開始進行分散式應用體系的探索。當時可真是沒什麼能夠參照的,全都得靠自己去探索,經過了三年多不斷摸索,我們徹底地將系統進行了服務化、分散式改造。
目前,整個阿里集團幾乎所有的應用都在使用這些中介軟體。我想,這也是阿里技術體系的精華所在吧。
最近這幾年,阿里的核心技術體系架構已經非常穩定可靠了。我們又在這些核心中介軟體的基礎上,不斷地深入細化運維體系,儘可能地做到自動化、智慧化,為集團節省了比較多的裝置成本和運維成本。在2015年,Java中介軟體更是響應了阿里集團上雲的夢想,將阿里集團七年的技術積累,一股腦地搬到了雲上,目前所提供的主要產品有:企業分散式應用服務(EDAS)、分散式關係資料庫(DRDS)、分散式訊息服務(ONS)。它們都是使用Java編寫的,為大家量身定做的分散式中介軟體,與網際網路應用體系相結合,能夠非常輕鬆地實現企業IT架構的隨需定製和可線性擴縮。如果大家有需求,可以按照自己的需要來進行選擇。
與Java一起成長
能夠取得這樣的成績,Java功不可沒。除了我上面提到語言特性對我們的幫助之外,在團隊之中,我們也非常關注整個Java的生態體系。基本上,無論我們有什麼新的想法,都可以立刻在Java的開源世界中找到對應的一些實現,裡面有很多還非常靠譜,Netty、Tomcat、Ibatis、Hibernate、Spring、Struts、ZooKeeper、Hadoop、Mahout、Cassandra……我能舉出無數的開源軟體,它們都對我們的平臺積累起到了非常大的作用。
同樣的,我們也在積極嘗試將自己系統的積累反饋回到社群裡,大家可以在github.com/alibaba下面找到很多我們開源出來的軟體,在這裡面我想特別的提幾個:RocketMQ(訊息佇列)、Druid(連線池)、FastJson(JSON解析引擎)、Dubbo(RPC框架)等等。這些開源軟體與其他友商的各種開源、閉源的Java軟體一起豐富了Java生態體系,也讓我們解決問題變得更加輕鬆。
對我個人而言,Java的生態體系之所以能夠這樣豐富,主要原因在於它編寫一次、多點執行的特性,以及一直堅持著的向下相容能力。這些都非常有利於Java生態體系的積累和演進,也造就了現在如此豐富的Java開源軟體環境和體系。
提到Java的向下相容能力,我也想稍微聊一下我的看法。我經常能看到很多人談到,Java的歷史包袱太重了,為了相容這些歷史遺留的包袱,Java的演進已經非常困難,這會導致Java語言的崩潰。針對這個問題,我個人的看法是:首先,Java作為一個被這麼廣泛的使用的語言,有著這麼深厚的系統積累,完全不考慮系統的相容性而演進整個系統,這其實是比較危險的,對其他革新進行相容幷包可能才是它最好的發展方向。就目前而言,我幾乎沒看到過哪個語言能夠比較好地解決這種語言升級所導致的軟體斷層問題,所以,更多的只是兩害取其輕的過程吧。同時,我也非常高興地看到,依託於JVM,我們有了大量的新的語言實現,這裡面有Groovy,Scala,JPython等等。它們都非常優秀,這些新生的語言與Java一起,進一步豐富了整個Java的生態體系,也更加堅定了我對Java生態體系的信心,它一定還能再戰十年!
寄語現在,展望未來
一葉知秋,回顧我的Java之路,最感謝還是阿里巴巴能夠給我們這些技術人員創造出這樣有挑戰的業務場景和業務需要,也感謝有這樣一群人能夠為了這個目標一起努力到現在。
能夠跟這些大牛們一起工作,耳濡目染,不斷提高,是我的工作生涯中最為寶貴的一筆財富。而如果能夠回到過去,我最想告訴8年以前的自己:“要買房!”
笑~~
其實是:“還是要特別注重基礎,作業系統、網路、演算法資料結構、離散數學、資料庫原理與實踐,這些看起來枯燥而無味的基礎科學,是我目前感到知識最為匱乏,但卻最為急需的部分,要了解它們是必須付出非常多的時間才有可能理解通透些。而這些基礎的紮實程度,就直接決定了你的高度”。可惜,我沒辦法在21天內學會C++,這些建議,也就只能提供給還有機會實踐的各位做參考了。
作者簡介:王晶昱花名沈詢,阿里高階專家,來自阿里巴巴中介軟體和穩定性平臺。目前主要負責阿里的分散式資料庫DRDS(TDDL)和阿里的分散式訊息服務ONS(RocketMQ/Notify)兩個系統。