噹噹架構部總監張亮:玩轉Java開源項目

內容來源:2017年5月21日,噹噹架構部總監張亮在「餓了麼技術沙龍-Java專場」進行《玩轉Java開源項目》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
閱讀字數 :3334 | 7分鐘閱讀


摘要

開發一個軟件,並把源代碼發佈到github,就是開源麼?如何可以開發一個有價值的開源項目、如何可以維持一個健康活躍的社區並讓開源項目真正從中受益、如何可以經過它幫助他人和提升本身,這些纔是開源更須要關注的方面。咱們來看看噹噹架構部總監是如何從四個方面來玩轉Java開源項目。git

嘉賓演講視頻地址:t.cn/RSceo7Ngithub

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等。

而我的開源的產品,通常是處於孵化階段。

如何作一個有價值的開源項目

一、以熟悉各類輪子爲前提

重複造輪子是巨大的精力浪費,有價值的開源項目應該是現有輪子不能徹底覆蓋的範圍。

二、以解決實際問題爲目的

任何技術項目都是以解決實際存在的業務問題爲前提的,徹底脫離業務的技術其存在價值是存疑的。

三、以系統眼光去規劃設計

相比於閉源項目,開源項目的受衆更廣,影響範圍更大,每次升級都帶來顛覆性的變動是災難性的。所以儘可能的合理設計系統架構和roadmap是成功的關鍵。好的系統是設計出來,而非改造出來的。前瞻性的眼光很是重要。

四、以工匠精神去雕琢細節

開放出去的源代碼會在必定的範圍內引發共鳴。一個值得研讀開源項目,其代碼必須通過雕琢,讓其規範、一致、優雅、易懂,儘可能將細節作到極致。經過代碼質量給予使用者信心。

打造合理社區

一、灌輸開源精神

freeis not free是開源的一句名言。開源的價值不只僅在於免費,更在於自由。既然已經把源代碼開放出去了,那麼使用者想怎麼改均可以,而不該一味地向開源人索取。所以須要合理對用戶進行引導,並讓其認同開源精神,最終作到積極反饋社區。

二、關注核心用戶

應儘早識別出核心用戶,與核心用戶共同發展。最好可以抱團造成組織,或做爲周邊生態加入更大的組織,並利用核心用戶的影響力吸引更多的用戶。

三、堅持與耐心

成功歷來不是一件容易的事,開源也不例外。開源以後要堅持去推廣、運營和完善它,並保持足夠耐心。相信是金子總會發亮,堅持才能帶來最終的收穫。

四、文檔

文檔的重要性甚至優於程序自己。應儘可能將使用場景、使用限制、使用建議、配置手冊、實現原理、常見問題等描述清晰。優質文檔能夠屏蔽大量重複問題,減小開源維護者的精力消耗。

聊聊噹噹開源

噹噹目前的主要開源產品有三個,分別對應於用於異步化的做業中間件、用於服務化的服務治理中間件以及用於數據水平擴展的數據庫分庫分表中間件。其關注的核心都是分佈式和彈性化。這三個開源項目都有屬於本身的關鍵詞。

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地址是:

github.com/dangdangdot…

github.com/dangdangdot…

github.com/dangdangdot…

這3個項目已較爲成熟,已在噹噹大規模使用,比較符合互聯網的業務場景。歡迎感興趣的同窗使用、star和fork,歡迎聯繫咱們並提出寶貴建議。

個人分享到此結束,謝謝你們!

相關文章
相關標籤/搜索