836
技術社區[雲棲]
玩轉Java開源項目
內容來源:2017年5月21日,當當架構部總監張亮在“餓了麼技術沙龍-Java專場”進行《玩轉Java開源項目》演講分享。IT大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發布。
閱讀字數:3334 | 7分鍾閱讀
嘉賓演講視頻和PPT地址:點擊下載
Java開源現狀
Java是一門曆史非常悠久的開發語言,從1995年初見至今,時間的指針已不知不覺的撥動了二十多個年頭。請跟我簡單回顧一下Java那些抓住曆史高光的瞬間,也順便回憶一下當時那些與Java一起產生共鳴的技術風暴。
Java首次出現在人們的視野中是1995年,它提出了Write once,runanywhere的口號讓開發者覺得興奮。隨著JDK 1.0的發布,一些核心概念閃亮登場,它們是JVM,Applet和AWT。Applet和AWT目前雖已退出曆史潮流,但當初在網頁上展現的冒著熱氣的咖啡的Applet小程序,確實讓人眼前一亮。JVM則沿用至今,基於JVM的跨平台特性對後續的技術產生了深遠的影響。
1998年發布的JDK 1.2,首次提出了J2SE、J2EE和J2ME三個係列,分別對應於標準開發,企業級開發和手機開發。J2ME隨著手機硬件的更新換代,已逐漸退出曆史舞台。而J2SE和J2EE則一直沿用至今。J2EE規範中著名的EJB、JSP、Servlet等既是從那時開始加入並日臻完善的。
2002年發布的JDK 1.4是非常經典的版本,這可能是至今仍然可能在老程序中看到的最老版本。而由於EJB使用起來過於複雜,輕量級的開發框架SpringFramework開始流行。開發者越來越多的拋棄掉笨重的EJB,而轉向更為靈活的Spring Framework陣營。而後來出版的由其作者Rod Johnson撰寫的《expert one-on-one J2EE Development without EJB》更是成為了不朽的名作,Spring Framework也隨之成為Java開發者必須掌握的技術棧。
2006年JDK 1.6發布,從JDK 1.5開始嚐試的諸如泛型,元注解等編程語言層麵的增強,在JDK 1.6中得到了進一步的完善。同期,參考Google發表的3篇著名的關於GFS、MapReduce和Bigtable學術論文,由Doug Cutting用Java創建並開發的Hadoop麵世,它在一定程度上顛覆了傳統關係型數據庫在數據存儲和分析領域的絕對統治,從此大數據成為了技術圈乃至全世界各個領域的熱詞。
2009年JDK 1.7發布。同時由Google開源的Android趨於成熟,和Apple的IOS形成鼎立之勢,共同開啟了基於智能手機的移動互聯網時代。
隨著互聯網的發展,信息越來越多,技術的更新迭代也越來越快。最近的一次Java大版本的發布,是2014年的JDK 1.8,它也是目前為止Java的最新版本。而在同一時期出現最多的焦點技術是以Docker為主的容器和如何有效治理容器的微服務。容器方麵Java雖然難於建樹,但基於Java的Spring Boot、SpringCloud、Zookeeper等優秀的框架以及組件為微服務奠定了堅實的基礎。
談了很久Java曆史,那麼經曆了這麼多年的發展,Java必然沉澱了大量極具價值的項目,可供免費使用的開源項目層出不窮。Java門檻越來越高,不僅僅是編程語言層麵的問題,也不僅是難於理解的麵向對象、設計模式等,而是在於它的技術廣度。由於技術棧眾多,它幾乎很難快速上手,但從另一方麵講,Java生態相對於其他語言更加穩定和成熟,技術組件幾乎應有盡有。
Java開源項目類型盤點
基礎類:為編程提供便利的基礎類庫。如:Guava、ApacheCommons等。
框架類:曾被認為Java最重要的部分,早期是業務開發工程師的飯碗。如:SpringFramework、Hibernate、MyBatis、Struts等。
測試類:與其他語言比,Java有較完善的測試體係,它很容易提升測試覆蓋率,這得益於廣泛的測試類庫。如:Junit、TestNG、DbUnit、Mocktio等。
構建類:由於使用Java開發的項目大多規模大,依賴複雜,因此Java構建類工具很完善。如:Ant、Maven等。
中間件:中間件種類很多。比如:Tomcat、Jetty等Web中間件,ActiveMQ、RocketMQ等消息中間件、Dubbo等服務治理中間件等。基礎中間件已非常成熟,而分布式中間件仍極少有統一標準。
NoSQL:NoSQL是關係型數據庫的有益補充。NoSQL類型主要分為文檔數據庫、列簇數據庫、KV數據庫和圖數據庫。相關產品眾多,使用Java開發的也不少,如:Cassandra、Neo4j等。
搜索:全文檢索領域中,Lucene是基礎類庫的佼佼者。而基於Lucene封裝的Solr、Elasticsearch等高可用搜索引擎也是很常見的技術。
大數據:Hadoop係列幾乎全是用Java開發的。
手機端:剛才提到過的Android係統。
桌麵端:雖然使用Java開發桌麵係統並非現在的主流,但深入人心的產品依然很多,如:Eclipse。
Java開源不擅長的領域
在容器、緩存和關係型數據庫這三個領域,Java的開源項目並不多見,而且當前Java也沒有太多機會進駐這些領域。
當今需要的Java開源解決方案
雖然Java已有為數眾多的成熟開源項目,但是目前仍稀缺的優秀開源領域主要是分布式、服務化和彈性化這三個方麵。
在互聯網行業分布式、服務化和彈性化是很重要的非功能需求。每個互聯網企業中都有一套足夠成熟的係統,但很多係統難於解耦且定製化嚴重,因此在這方麵,成熟的開源產品鳳毛麟角。因此,有價值的開源項目應該從這三方麵考慮,而且Java比較適合做這些領域的開發。
開發一個開源項目的那些事兒
開源項目的來源
來源主要從四個方麵,大公司、創業公司、社區以及個人。
大公司所做的開源產品基本上不與經濟收益直接相關。如:Google開源的Kubernetes,Linkedin開源的Kafka等。
創業公司開源的產品一般會與他們的經濟利益綁定,大都開源其核心技術,然後針對定製化、谘詢以及企業版進行收費服務。如:Docker、Mesosphere的Mesos、Elastic的Elasticsearch等。
完全由社區驅動的開源的產品擁有強大的開源基因,是開源世界的典範。如:Linux、Apache等。
而個人開源的產品,一般是處於孵化階段。
如何做一個有價值的開源項目
1、以熟悉各種輪子為前提
重複造輪子是巨大的精力浪費,有價值的開源項目應該是現有輪子不能完全覆蓋的範圍。
2、以解決實際問題為目的
任何技術項目都是以解決實際存在的業務問題為前提的,完全脫離業務的技術其存在價值是存疑的。
3、以係統眼光去規劃設計
相比於閉源項目,開源項目的受眾更廣,影響範圍更大,每次升級都帶來顛覆性的變更是災難性的。因此盡量的合理設計係統架構和roadmap是成功的關鍵。好的係統是設計出來,而非改造出來的。前瞻性的眼光非常重要。
4、以工匠精神去雕琢細節
開放出去的源代碼會在一定的範圍內引起共鳴。一個值得研讀開源項目,其代碼必須經過雕琢,讓其規範、一致、優雅、易懂,盡量將細節做到極致。通過代碼質量給予使用者信心。
打造合理社區
1、灌輸開源精神
freeis not free是開源的一句名言。開源的價值不僅僅在於免費,更在於自由。既然已經把源代碼開放出去了,那麼使用者想怎麼改都可以,而不應一味地向開源人索取。因此需要合理對用戶進行引導,並讓其認同開源精神,最終做到積極反饋社區。
2、關注核心用戶
應盡早識別出核心用戶,與核心用戶共同發展。最好能夠抱團形成組織,或作為周邊生態加入更大的組織,並利用核心用戶的影響力吸引更多的用戶。
3、堅持與耐心
成功從來不是一件容易的事,開源也不例外。開源之後要堅持去推廣、運營和完善它,並保持足夠耐心。相信是金子總會發亮,堅持才能帶來最終的收獲。
4、文檔
文檔的重要性甚至優於程序本身。應盡量將使用場景、使用限製、使用建議、配置手冊、實現原理、常見問題等描述清晰。優質文檔可以屏蔽大量重複問題,減少開源維護者的精力消耗。
聊聊當當開源
當當目前的主要開源產品有三個,分別對應於用於異步化的作業中間件、用於服務化的服務治理中間件以及用於數據水平擴展的數據庫分庫分表中間件。其關注的核心都是分布式和彈性化。這三個開源項目都有屬於自己的關鍵詞。
Elastic-job:Elastic-job的關鍵詞是融入。它是一個分布式彈性化調度框架,由Lite和Cloud兩個分支組成,Elastic-Job-Lite提供輕量級、無中心化的作業治理服務。Elastic-Job-Cloud采用中心化方式,它與Mesos完美結合,很容易提供一站式的作業雲平台服務。
下圖是以Elastic-Job-Cloud為核心的當當作業雲架構圖:
Sharding-jdbc:Sharding-jdbc的關鍵詞是兼容。它作為一個分布式的數據庫中間層,主要職責是透明化數據庫水平擴展以及柔性事務的處理。它擴展並完全兼容JDBC協議,因此任何基於JDBC的Java ORM框架均可無縫兼容使用。應用開發工程師無需對現有代碼進行任何調整,隻需要配置完成分片規則即可直接享用Sharding-JDBC帶來的便利。
Sharding-JDBC不僅僅是簡單的SQL識別,它擁有一套複雜且完善的知識理論。下圖是Sharding-JDBC的架構圖:
Dubbox:Dubbox的關鍵詞是擴展。它在阿裏開源的Dubbo基礎上直接擴展,增加了REST協議等新功能,用於實現異構語言間調用。
三個項目的Github地址是:
https://github.com/dangdangdotcom/elastic-job
https://github.com/dangdangdotcom/sharding-jdbc
https://github.com/dangdangdotcom/dubbox
這3個項目已較為成熟,已在當當大規模使用,比較符合互聯網的業務場景。歡迎感興趣的同學使用、star和fork,歡迎聯係我們並提出寶貴建議。
我的分享到此結束,謝謝大家!
編者:IT大咖說,歡迎關注“itdakashuo”,@IT大咖說 ,轉載請標明版權和出處
最後更新:2017-09-05 18:02:31
上一篇:
1年賦能100家環保機構,阿裏雲發布“青山綠水”計劃
下一篇:
9月5日雲棲精選夜讀:智能語音交互:阿裏的研究和實踐
Adding a step to the Onepage Checkout
如何在 Ubuntu16.04 中用 Apache 部署 Jenkins 自動化服務器
JS中使用正則表達式
Apache Storm 官方文檔 —— 分布式 RPC
magento -- 如何修改block在某個特定頁麵中的模板
阿裏雲雲大使幸運券哪有?怎麼領取?
hello 1,hello 2,hello 3.
通過一個模擬程序讓你明白WCF大致的執行流程
TechCrunch?????????????????????????????????70hr??????????????????????????????AI??????-??????-????????????-?????????
Oracle中數據導出成CVS,EXCEL