CODE大全告訴你java是否開始沒落了

業餘草發表於2017-08-08

CODE大全告訴你java是否開始沒落了!

22 歲,對於一個技術人來說可謂正當壯年。但對於一門程式語言來說,情況可能又有不同。各類程式語言橫空出世,紛戰不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個老牌的語言,未來會是怎樣?

1.寫在前面

從 1995 年第一個版本釋出到現在,Java 語言已經在跌宕起伏中走過了 22 年,最新的 Java 版本也已經迭代到 Java 9。當年 Java 語言的跨平臺優勢如今看來也只不過是家常小菜,Go、Rust 等語言橫空出世,進一步拓寬了程式語言的邊界。當年發明 Java 語言的 Sun 公司早已被 Oracle 收購,Oracle 現在也正處於水深火熱的雲端計算浪潮當中,甚至連 Java 之父 James Gosling 也加入了當今世界最大的雲端計算公司 AWS。

Java 語言發展的這 20 年也正是全球網際網路迅猛發展的 20 年,Java 語言同時也見證了電商浪潮、移動網際網路浪潮、大資料浪潮、雲端計算浪潮,所以在現今各大網際網路公司身上都能看到 Java 的身影。

縱看 Java 語言的發展,不禁讓人聯想到辛棄疾的一首詞:

千古江山,英雄無覓,孫仲謀處。舞榭歌臺,風流總被雨打風吹去。斜陽草樹,尋常巷陌,人道寄奴曾住。想當年,金戈鐵馬,氣吞萬里如虎。元嘉草草,封狼居胥,贏得倉皇北顧。四十三年,望中猶記,烽火揚州路。可堪回首,佛狸祠下,一片神雅社鼓。憑誰問,廉頗老矣,尚能飯否?

TIOBE 的語言排行榜顯示,自 2016 年初 Java 語言就出現了明顯的下頹趨勢,開發者社群也出現了一些唱衰 Java 語言的論調,編者心中也有些許疑問:Java 老矣,尚能『飯』否?基於這樣的背景,InfoQ 邀請到了 Java 資深專家張建鋒來為大家解讀 Java 語言的發展現狀以及未來。

2.Java 語言的發展回顧

Java 語言源於 1991 年 Sun 公司 James Gosling 領導的的 Ork 專案,1995 年 Sun 公司正式起名為 Java,並提出“Write once, Run anywhere"的口號。

1996 年 1 月 Java 1.0 釋出,提供了一個解釋執行的 Java 虛擬機器,其時恰逢網際網路開始興起,Java 的 Applet 能在 Mozilla 瀏覽器中執行,被看作是未來的網際網路語言。

1997 年 2 月 Java 1.1 釋出,Java 語言的基本形態基本確定了,比如反射 (reflection), JavaBean, 介面和類的關係等等,一直到今天都保持一致。然而,Java 最初的一些目標,如在瀏覽器中執行 Applet,以及跨平臺的圖形介面 Awt 很快遭遇到負面的評價。

1998 年 12 月,Java 第一個里程碑式的版本,即 Java 1.2 釋出了。這個版本使用了 JIT(Just in time)編譯器技術,使得語言的可遷移性和執行效率達到最優的平衡,同時 Collections 集合類設計優良,在企業應用開發中迅速得到了廣泛使用。Sun 公司把 Java 技術體系分成三個方向,分別是 J2SE(面向桌面和通用應用開發),J2EE(面向企業級應用開發),J2ME(面向移動終端開發)。這個分類影響非常久遠,體現出主流語言設計者的思想:針對於不同的應用領域,在形態,API 集合等進行劃分。

2000 年 5 月,Java 1.3 釋出,這個版本中 Corba 作為語言級別的分散式物件技術,成為 J2EE 的一個技術前提。J2EE 受到 Corba 的設計的影響較大,早期 EJB 的 Home,介面和實現就是 Corba 在 C 語言的實現,被移植到 Java 語言之中。J2EE 中的 Servlet 規範獲得了極大的成功,伴隨著網際網路的興起,和瀏覽器直接通過 HTTP 協議互動的 Servlet,和眾多的 MVC 框架,成為 Web1.0 的網紅。

2002 年 2 月,Java 1.4 釋出,Java 語言真正走向成熟,提供了非常完備的語言特性,如 NIO,正規表示式,XML 處理器等。同年微軟的.NET 框架釋出,兩者開始了為期十幾年的暗自競爭。從語言特性上來說,.NET 後發先至,一直處於優勢。但 Java 依賴良好的開發者生態,絕大多數大型軟體公司的使用者眾多和不斷貢獻,以及對 Linux 作業系統良好的支援,漸漸的在伺服器端獲得優勢地位。

2004 年 9 月,Java 5 釋出,Sun 不再採用 J2SE, J2EE 這種命名方式,而使用 Java SE 5, Java EE 5 這樣的名稱。我認為 Java 5 是第二個里程碑式的版本。Java 語言語法發生很大的變化,如註解 (Annotation),裝箱 (Autoboxing),泛型 (Generic),列舉 (Enum),foreach 等被加入,提供了 java.util.concurrent 併發包。Java 5 對於 Java 語言的推動是巨大的,特別是註解的加入,使得語言定義靈活了很多,程式設計師可以寫出更加符合領域定義的描述性程式。

2006 年 5 月, JavaEE 5 釋出,其中最主要是 EJB3.0 的版本升級。在此之前,EJB2.X 版本被廣泛質疑,SpringFramework 建立者 Rod Johnson 在經典書籍“J2EE Development without EJB“中,對 EJB2 代表的分散式物件的設計方法予以批駁。EJB3 則重新經過改造,使用註解方式,經過應用伺服器對 POJO 物件進行增強來實現分散式服務能力。在某種程度,可以說 EJB3 挽救了 JavaEE 的過早消亡。

2006 年 12 月,Java 6 釋出,這個語言語法改進不多,但在虛擬機器內部做了大量的改進,成為一個相當成熟穩定的版本,時至今日國內的很多公司依然以 Java6 作為主要 Java 開發版本來使用。同年 Sun 公司做出一個偉大的決定,將 Java 開源。OpenJDK 從 Sun JDK 1.7 版本分支出去,成為今天 OpenJDK 的基礎。OpenJDK6 則由 OpenJDK7 裁剪而來,目前由紅帽負責維護,來滿足 Redhat Enterprise Linux 6.X 使用者的需要。

2009 年 12 月,JavaEE 6 釋出,這個版本應該說是 JavaEE 到目前為止改進最大影響最深遠的一個版本。因為 JavaEE5 只有 EJB3 適應了 Java 註解語法的加入,而 EE6 全面接納了註解。CDI 和 BeanValidation 規範的加入,在 POJO 之上可以定義完備的語義,由容器來決定如何去做。Servlet 也升級到 3.0 版本,並在介面上加入非同步支援,使得系統整體效率可以大幅提高。EE 劃分為 Full Profile 和 Web Profile,使用者可以根據自己的需要選擇不同的功能集。

在此之前,Oracle 已經以 74 億美金的價格收購了 Sun 公司,獲得了 Java 商標和 Java 主導權。也收購了 BEA 公司,獲得市場份額最大的應用伺服器 Webogic。JavaEE 6 雖然是收購之後釋出的版本,但主要的設計工作仍然由原 Sun 公司的 Java 專家完成。

2011 年 7 月,Oracle 釋出 Java 7, 其中主要的特性是 NIO2 和 Fork/Join 併發包,儘管語言上沒有大的增強,但我個人認為,自從 Oracle JDK(包括 OpenJDK7),Java 虛擬機器的穩定性真正做到的工業級,成為一個計算平臺而服務於全世界。

2013 年 6 月,Oracle 釋出 JavaEE 7,這個版本加入了 Websocket,Batch 的支援,並且引入 Concurrency 來對伺服器多執行緒進行管控。然而所有的子規範,算上可選項 (Optional) 總共有 40 多項,開發者光是閱讀規範文字就很吃力了,更不要說能夠全域性精通掌握。JavaEE 規範的本質是企業級應用設計的經驗凝結,每一個 API 都經過眾多豐富經驗的專家反覆商議並確定。各個版本之間可以做到向後相容,也就是說,即使是 10 年前寫的 Servlet 程式,當前的開發者也可以流暢的閱讀原始碼,經過部分程式碼調整和配置修改,可以部署在當今的應用伺服器上。反過來,今後用 Servlet4 寫的程式,瀏覽器和伺服器通訊使用全新的 HTTP/2 協議,但程式設計師在理解上不會有障礙,就是因為 Servlet 規範的 API 非常穩定,基本沒有大的變化修改。

2014 年 3 月,Oracle 釋出 Java 8,這個版本是我認為的第三個有里程碑意義的 Java 版本。其中最引人注目的便是 Lambda 表示式了,從此 Java 語言原生提供了函數語言程式設計能力。語言方面大的特性增加還有:Streams,Date/Time API, 新的 Javascript 引擎 Nashorn,集合的平行計算支援等,Java8 更加適應海量雲端計算的需要。

按照原來的計劃,Java9 應該在今年 7 月釋出,但因為模組化 (JPMS) 投票未通過的原因,推遲到今年 9 月份釋出。

JavaEE 8 也會在今年釋出,預計的時間在 8-10 月。其中最主要更新是 Servlet 4.0 和 CDI 2.0,後者已經完成最終規範的釋出和投票。

3.Java 社群情況介紹

我們按照兩個方面介紹 Java 社群情況。

Java User Group(JUG,Java 使用者組) 目前全世界範圍有 100 多個 JUG 組織,分佈在各個大洲各個國家,一般來說以地域命名。目前最有影響力的兩個 JUG 分別是倫敦的 LJC(London Java Community) 和巴西的 SouJava,目前都是 JCP 的 EC(執行委員會) 成員。國內目前有 GreenTea JUG(北京和杭州),Shanghai JUG,GuangDong JUG, Shenzhen JUG, Nanjing JUG 等。GreanTeaJUG 以阿里巴巴研發部門成員為核心,包括北京和杭州兩地各個公司從事 Java 開發的研發人員,過去幾年成功舉辦了很多有業界影響力的活動,特別是邀請到眾多國外的 Java 技術專家來分享知識,目前是國內最大的 JUG 開發者組織。

Java 開源社群 Java 是一門開放的語言,其開源社群也是參與者眾多。最有名的應當數 Apache 社群,目前已經擁有近 200 個頂級專案,其中絕大多數是 Java 語言專案。在 Java 生態圈中,具有重要地位的如 Ant、Commons、Tomcat、Xerces、Maven、 Struts、Lucene、ActiveMQ、CXF、Camel、Hadoop 等等。很多技術時代,一大批 Java 專案加入,如 Web 時代的 Velocity、Wicket;JavaEE 相關的 Tomee、OpenJPA、OpenWebBeans、Myfaces;WebService 時代的 jUDDI、Axis、ServiceMix;Osgi 時期的 Flex、Karaf;大資料時代的 HBase、Hive、ZooKeeper、Cassandra;雲時代的 Mesos、CloudStack 等等。

涉及到軟體開發的方方面面,可以說當今幾乎所有的中型以上 Java 應用中,都會有 Apache 開源專案的身影。國內最早參與 Apache 社群的以國外軟體公司國內研發團隊成員為主,如紅帽、IONA、Intel、IBM 研發中心等。如今國內網際網路公司和軟體公司也不斷的參與,特別是開始主導一些 Apache 專案,如 Kylin 等。

JBoss 開源社群,包含了 50 多個 Java 開源專案,其中有 Hibernate、Drools、jBPM 等業界知名開源專案,也有 Undertow、Byteman、Narayana 等名氣不算大,但絕對是相應領域業界的頂級優秀專案。當前 JBoss 開源社群主要以企業應用中介軟體軟體為主,RedHat 是主要的技術貢獻力量。

Eclipse 開源社群,之前主要是包含 Eclipse IDE 的專案,後來也逐步進行多方面的擴充套件,比如 OSGi,伺服器等,目前一些知名 Java 專案,如 Jetty、Vertx 等都是 Eclipse 開源組織成員。此外 IOT 目前是 Eclispe 的一個重點方向,在這裡可以找到完整的 IOT Java 開發方案。

Spring 開源社群,以 SpringFramework 為核心,包括 SpringBoot、SpringCloud、SpringSecurity、SpringXD 等開源專案,在國內有廣泛的應用場景。

4.目前大的玩家

Java 語言和品牌都是 Oracle 公司所有,所以 Oracle 公司是 Java 最主要的廠商。絕大多數 JSR(Java 規範提案) 的領導者都是 Oracle 的僱員。

Java 是一個龐大的生態圈,全世界的軟體和網際網路公司絕大多數都是 Java 使用者,同時也可以參與推動 Java 語言的發展。任何組織或者個人都可以加入 JCP(Java Community Process),並提交 JSR 來給 JavaSE,JavaEE,JavaME 等提交新的 API 或者服務定義。Java 擁有當今最完備的語言生態,幾乎所有能想到的應用範圍,都有軟體廠商提出過標準化的構想,其中很多已經被接納為 JSR 提案。如今 JSR 總數已經都 400 多個。

JCP 是發展 Java 的國際組織,其中的執行委員會(EC)以投票的形式對 JSR 提案進行表決。目前 EC 包括 16 個合約 (Ratified) 席位,6 個選舉 (Elected) 席位和 2 個合夥 (Associate) 席位,以及 Oracle 作為所有者的永久席位。非永久席位每兩年重新選舉一次,每次選舉為 24 個席位的一半,即為 12 個。

當前 EC 委員會中,對於 Java 起到最重要作用的,無疑是 Oracle,IBM 和 Redhat 三家公司。Oracle 自然不用說;Redhat 領導著 JavaEE8 中兩項 JSR,並且在作業系統,Linux,虛擬化,雲端計算等基礎軟體方面是產品領導者;IBM 是軟硬體最大的廠商,擁有自己的 Unix 作業系統和 JDK 版本。這三家軟體廠商也是中介軟體廠商的強者,它們對於 Java 的影響是至關重要的。前不久投票被否決的 JSR 376(JPMS) 模組化提案,就是 Redhat 和 IBM 先後表示要投反對票,最後才沒有通過的。

另外的幾個重要的 Java 參與方分別包括:巨型網際網路公司,以 Twitter 為代表;大型金融公司,以高盛,瑞信為代表;強大的硬體產商,Intel,NXP,Gemalto 等;大型系統方案廠商,HP, Fijitsu;當然還有掌握先進 Java 技術的公司,如 Azul,Hazelcast,Tomitribe,Jetrains 等等。這些公司共同對 Java 的發展起到關鍵作用。

5.GC 方面的進展

JDK 中主要的 GC 分類有:

Serial,單執行緒進行 GC,在它進行垃圾收集時,必須暫停其他所有的工作執行緒,直到它收集結束。

Parallel,相比 Serial 收集器,Parallel 最主要的優勢在於使用多執行緒去完成垃圾清理工作,這樣可以充分利用多核的特性,大幅降低 GC 時間。

CMS(Concurrent Mark-Sweep),是以犧牲吞吐量為代價來獲得最短回收停頓時間的垃圾回收器。實現 GC 執行緒和應用執行緒併發工作,不需要暫停所有應用執行緒。

G1(Garbage First Garbage Collector),G 設計初衷是為了儘量縮短處理超大堆(大於 4GB)時產生的停頓。相對於 CMS 的優勢而言是記憶體碎片的產生率大大降低。

目前在 JDK8 中以上 4 種 GC 都可以使用,而在 JDK9 中 G1 GC 會成為預設的垃圾收集器。

在 OpenJDK 方面,Redhat 開源並貢獻了 Shenandoah GC。這是一種新的 Java 虛擬機器 GC 演算法,目標是利用現代多核 CPU 的優勢,減少大堆記憶體在 GC 處理時產生的停頓時間。在使用大記憶體的應用上使用,如>20G 堆空間。Fedora24 以後,官方源中的 OpenJDK 即帶有 Shenandoah 演算法,不過 JDK9 中還不會被加入。

無停頓的高效能 GC 就是 Azul 公司的 C4(Continuously Concurrent Compacting Collector) GC 了,但只提供商業版本使用。

另外 IBM J9 中 Balanced GC,表現也很出色,能夠保證相對一致的暫停時間而避免破壞性的長時間停頓。Balanced GC 應用在各類 IBM 中介軟體產品之中。

6.Java 9 目前已經可以確認的特性介紹

Java9 中,最受人關注的新特性就是 Jigsaw 專案帶來的模組化技術特性。

Java 語言一直缺乏語言級別的模組化能力,目前模組化技術通過 OSGi, JBoss Modules 等專案,已經在服務端程式得到了廣泛的應用。Java 在語言級別引入模組化能力,將極大的促進 Java 應用程式元件化,模組化的改變。應用程式通過模組化拆分,可以做到更靈活的引入,載入,移除元件,佔用更少的記憶體,更適合雲端計算時代的要求。在 JDK9 EA(預覽版)中,原有的 rt.jar 已經被劃分為若干了 jmod,通過模組內的 module-info.java 檔案來宣告模組間的引用關係。

然而,模組化改造是個漸進而適度的過程,Java9 為了可相容 Java8 以前應用程式的執行,做出很多的讓步,模組定義嚴格性沒有那麼苛刻。各個廠商也有對自己現有系統可無縫執行在 Java9 上的商業訴求。Java 模組化提案還得花更多的時間去討論和修改。

Java9 中的 jshell 工具實現了 REPL,即讀取,求值,列印,迴圈。這個工具可以使得開發者互動式的使用 Java,方便於系統管理,除錯,使用。可以想像到有了 jshell 後,Java 語言更加適合初學者入門學習。

Jlink 工具和 AOT(預先編譯技術)。一直以來,Java 執行方式是把程式編譯成 class 檔案,然後通過 jvm 執行的。這種工作方式可以做到跨平臺移植,在網際網路時代初期,各種 Unix 繁榮和 Windows 在桌面的一統局面下,對於佔據市場起到決定性作用。

然而到了今天,無論是大型網際網路公司還是企業內部,x86 平臺 64 位伺服器已經成為主要的選擇。從執行效率考慮,可以把 java 程式編譯成可執行的二進位制檔案,更加適應雲端計算和容器技術發展的需要。

利用 jlink/jaotc 工具,可以把一個 Java 程式編譯成可執行檔案,在 Java9 推出時,可能只有 java.base 模組支援 AOT。

安全方面的加強。引入新的摘要演算法 SHA-3,內建 ALPN 使得更好的支援 HTTP/2 協議,提供 DTLS(資料包傳輸層安全性協議),可以保證 UDP 資料傳輸的安全,PKCS12 格式替代原有的 JKS 成為 keystore 的預設格式。

此外,統一 JVM 日誌 (Unified JVM Logging),多版本共存 jar(Multi-release jar files),介面內部的私有方法 (Interface provate method) 等也是非常重要的新特性。

7.與其他語言的對比,Java 的優勢

Java 是最好的語言麼?不是,因為在每個領域都有更合適的程式語言。

C 語言無疑是現代計算機軟體程式語言的王者,幾乎所有的作業系統都是 C 語言寫成的。C++ 是物件導向的 C 語言,一直在不斷的改進。

JavaScript 是能執行在瀏覽器中的語言,豐富的前端介面離不開 Javascript 的功勞。近年來的 Node.js 又在後端佔有一席之地。Python 用於系統管理,並通過高效能預編譯的庫,提供 API 來進行科學計算,文字處理等,是 Linux 必選的解釋性語言。

Ruby 強於 DSL(領域特定語言),程式設計師可以定義豐富的語義來充分表達自己的思想。Erlang 就是為分散式計算設計的,能保證在大規模併發訪問的情況下,保持強壯和穩定性。Go 語言內建了併發能力,可以編譯成原生程式碼。當前新的網路相關專案,很大比例是由 Go 語言編寫的,如 Docker、Kubernetes 等。

編寫網頁用 PHP,函數語言程式設計有 Lisp,編寫 iOS 程式有 Swift/ObjectiveC。

一句話概括,能留在排行榜之上的語言,都是好的語言,在其所在的領域能做到最好。

那麼,Java 語言到底有什麼優勢可以佔據排行榜第一的位置呢?

其一,語法比較簡單,學過計算機程式設計的開發者都能快速上手。

其二,在若干了領域都有很強的競爭力,比如服務端程式設計,高效能網路程式,企業軟體事務處理,分散式計算,Android 移動終端應用開發等等。

最重要的一點是符合工程學的需求,我們知道現代軟體都是協同開發,那麼程式碼可維護性,編譯時檢查,較為高效的執行效率,跨平臺能力,豐富的 IDE,測試,專案管理工具配合。都使得 Java 成為企業軟體公司的首選,也得到很多網際網路公司的青睞。

沒有短板,容易從市場上找到 Java 軟體工程師,軟體公司選擇 Java 作為主要開發語言,再在特定的領域使用其他語言協作程式設計,這樣的組合選擇,肯定是不會有大的問題。

所以綜合而言,Java 語言全能方面是最好的。

8.Java 未來方向的展望

如今的 Java,已經在功能上相當豐富了,Java 8 加入 Lambda 特性,Java 9 加入模組化特性之後,重要的語言特性似乎已經都納入進來。如果要說值得考慮的一些功能,我覺得有以下幾點:

模組化改造完畢之後,可能會出現更多專業的 JDK 發行軟體商,提供在功能方面,比如針對於分散式計算,機器學習,圖形計算等,納入相關的功能庫作為檔案。這樣專業行業客戶可以選擇經過充分優化後的 JDK 版本。

Java 語義上對“模式匹配”有更強的支援,如今的 switch 語句能力還是比較欠缺,可以向 Erlang, Scala 等語言借鑑。

多執行緒併發處理,Java 做的已經很好了。不過我個人覺得可以在多程式多執行緒配合,以及語言級別資料管道表示上,可以進行改造和優化。

JDK9 會有 HTTP/2 client 端的能力,但毫無疑問會有更多更好的三方庫出現,JDK 可以和這些三方庫通力合作,提供一個更好 API 介面和 SPI 參考實現。

目前 Java 在雲端計算方面遇到的最大問題還是佔用記憶體過大。我個人認為從兩個方面來看:

如果該應用的確是長時間執行的服務,可以考慮結構清晰的單體結構,算下來總的記憶體消耗並不會比多個微服務程式佔用的更多。

微服務應用,未來可以採用編譯成原生程式碼的方式,並使用優化過的三方庫,甚至本地 so 檔案,減少單個程式的過多記憶體佔用。

安全框架更加清晰,SPI 可以允許三方庫提供更強大更高效的安全功能。

JavaEE 方向則有更多的改進的地方:

EJB 重構目前的 Corba 分佈通訊基礎,參考 gRPC 進行遠端系統呼叫。

分解 EJB 規範,把 JVM 程式相關的特性,如注入 / 加強 / 事務 / 安全都統一到 CDI 規範中;對 EJB 進行裁剪,保留遠端訪問特性和作為獨立執行主體分散式物件能力。

加強 JMS 和 MDB,媲美 Akka 目前的能力。

JaxRS 適度優化,不必要依賴 Servlet,或者適度調整,來提供更大的能力。

JPA 借鑑 JDO,以及融入一部分特性,做到對 NoSQL 更良好的支援。

9.一些個人的心得和經驗分享

軟體業有個 Hype Cycle 模型,有很多技術受到市場的追捧而成為明星,也有些身不逢時而備受冷漠。

EJB 是一個廣泛被誤解的技術,在企業應用分散式計算方面,EJB 給出了非常完備的技術體系。只是目前所有的應用伺服器都實現的不夠好。對於目前打算轉型微服務設計的架構師,EJB 也是一個非常值得學習借鑑的技術。

Java 的慢是相對的,有些是當前實現的不夠好。比如原來有人對 Java 的網路 IO 效能提出質疑,然而穩定的 Netty 框架出現後,就沒有人再懷疑 Java 處理網路 IO 的能力了,甚至在 JDK8 中自身的 NIO 也相當出色。要知道 Java 為了實現跨平臺能力,採用的是各個作業系統的一個公共能力子集,而且其設計哲學就是給出 API 框架,實現是可以自行實現和載入服務的。

Java 在處理介面方面,Swing 和 Swt 表現可圈可點(Idea 和 Eclipse 分別採用的圖形基礎庫),JavaFX 已經運用到很多的行業軟體上。在瀏覽器介面表現上,SpringMVC 在模板渲染頁面方面使用者最多;GWT 似乎使用者不多,但基於 GWT 的 Vaddin 在國外企業中使用者眾多,而且很多伺服器管理軟體也用 GWT 寫成;JSF 也在企業軟體中得到廣泛使用,狀態資訊直接在後端進行管理,配合 js 前端框架,可以充分發揮各種技術的優勢。

CDI 規範和 SpringFramework 在伺服器程式中作用類似,Spring 是一套設計優良,完備的框架,CDI 具有更強的可擴充套件性。通過對註解的語義定義,一家公司可以維護一套自己的元件描述語言,來做到產品和專案之間的軟體快速複用。CDI 是定義軟體元件內部模型的最佳方式,只可惜瞭解的軟體工程師實在太少。

微服務架構在網際網路應用,快速開發運維管理方面,配合容器技術使用,有很強的優勢。但並不是所有的應用場景都適合微服務:強事務應用系統,採用單體結構的軟體體系設計,更容易從整體方面維護,也能獲得更優的效能。Java 語言無論在微服務還是單體結構,都有成熟穩定的軟體架構供選擇使用。

我的部落格:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

相關文章