Spring & Spring Boot 不是 Java 的全部,2020 您應該試試 Vertx


Spring & Spring Boot 不是 Java 的全部,2020 您應該試試 Vertx

Spring Framework 1.0 自 2003 年發佈以來,主打輕量級、非侵入、AOP(切面編程)、IoC(控制反轉)等特性,在段時間內迅速走紅,在 Java 社區廣受歡迎。2004 - 2007 年,Spring 取得了相當輝煌的成就,不僅將 EJB 2 趕下舞臺,而且牢牢確立了 Spring 作為 Java 企業應用開發的主流地位。其後一段時間,SSH 框架組合(Spring + Struts + Hibernate)引領了 Java 企業開發的主流模式,當時對技術比較保守的電信金融等行業,也言必稱 Spring,Spring 成為了 Java 框架的事實標準。

再後來,Struts 被 Spring MVC 替代,Hibernate 變成了 JPA 的實現,Spring 卻熱度不減,一枝獨秀。 而 2014 年 Spring Boot 發佈,時值微服務概念的普及,Spring Boot 再次成為 Java 微服務的代名詞。Spring Boot 基於 Spring 4.0 設計,不僅繼承了 Spring 框架原有的優秀特性,而且還通過簡化配置來進一步簡化了 Spring 應用的整個搭建和開發過程。另外 Spring Boot 通過集成大量的框架使得依賴包的版本衝突、以及引用的不穩定性等問題得到了很好的解決。

如今的 Spring 5.0 版本,引入了全新的響應式編程等概念,在原 Spring 基礎上推出了 WebFlux 技術, 實現完全非阻塞,支持 Reactive Streams 背壓等特性,能基於 Netty 運行,提供不小的性能提升。其底層依賴 Spring 推出的另外一個全新項目 Project Reactor,原理類似 RxJava 等響應式框架。


Spring & Spring Boot 不是 Java 的全部,2020 您應該試試 Vertx

Spring Framework 十多年來攻城掠寨,在取得巨大成功的同時,也變得越來越複雜,體積變大,啟動變慢,當初的“輕量”變得越來越遙遠。IoC、AOP 等概念讓新手迷惑,JavaBean、XML 和 @Controller、@Service、@Repository 等各種註解讓人們誤以為這就是 Java 開發的全部。

時間來到了 2020 年,隨著 Scala、Kotlin、Groovy 等 JVM 語言的繁榮,以及函數式編程的流行,一款名為 Vert.x 的框架正異軍突起,擁有輕量、異步、可伸縮、高併發等特性,旨在為 JVM 提供一個 Node.js 的替代方案。下面就介紹 Vert.x 框架的一些特點,看看它能不能成為 Spring 框架的有力競爭對手。


Spring & Spring Boot 不是 Java 的全部,2020 您應該試試 Vertx

背靠 Red Hat,並得到 Eclipse 基金會支持

Vert.x 由 Tim Fox 於 2011 年創立,最初命名為 Node.x(受 Nodejs 啟發),當時他受僱於 VMware 旗下 SpringSource。後來 Tim 跳槽去了 RedHat / JBoss,領導 JBoss HornetQ 等項目開發。

2012 年末,在 Tim 離開工作崗位後,VMware 將 Tim 告上法庭,要求控制 Vert.x 社區的 商標、域名、博客和 Github 賬戶。在大量討論和妥協之後,2013 年 1 月,VMware 被說服將 Vert.x 社區移交給中立的法人實體 Eclipse Foundation,這符合 Vert.x 社區的最大利益。

2016 年初,Tim Fox 卸任 Vert.x 項目的負責人,另一位 Red Hat 員工、Vert.x 核心開發者 Julien Viet 取代了他的位置。目前 Vert.x 的核心開發者主要來自 Red Hat。

官方多語言支持

Vert.x 支持 Java、JavaScript、Groovy、Ruby、Ceylon、Scala 和 Kotlin 語言,併為每種語言提供了方便的、符合該語言習慣的 API。Vert.x 並沒有指定選擇優先級,您可以選擇其中任一門您熟悉的語言。當然如果需要協程支持,最好的選擇是 Kotlin。

官方多框架支持

類似 Spring 全家桶,Vertx 對各種常用技術有很好的集成,比如各種 db 的連接庫 vertx-mysql-client、vertx-redis-client、vertx-mongo-client,對 Kafka、Consul 的集成 vertx-kafka-client、vertx-consul-client,對 RxJava 支持的 vertx-rx-java,用於單元測試的 vertx-unit、vertx-junit,涉及了 Java 開發的方方面面。

基於 Netty,事件驅動、非阻塞、高性能

Vert.x 最大的特點就在於異步(基於 Netty),通過事件循環(EventLoop 線程)來調起存儲在異步任務隊列(CallBackQueue)中的任務(Verticle)。在 EventLoop 線程裡面的代碼,不能有阻塞操作,比如使用阻塞 IO、加鎖、長時間佔用 CPU 等,Vert.x 提供了單獨的 Worker 線程池來運行阻塞的代碼,比如傳統的 JDBC 操作,這種模式大大降低了傳統阻塞模型中線程對於操作系統的開銷。

而通過 EventBus 則可以非常簡單的實現分佈式消息,進而為分佈式系統調用和微服務奠定基礎。通過不同的模塊組合, Vert.x 可以實現 TCP、UDP、HTTP、WebSocket、MQ 各種不同功能,創建功能強大的應用程序。

體積小巧

十多年前討論何為 Java 輕量級框架,有一個觀點是認為該框架的 jar 包需要小於 1M,當年的 Spring 1.0 的確如此,所有內容打包在一起為 935K。然而現在光是 spring-core 就 1.4M, 加上 spring-contex、spring-aop、spring-beans、spring-mvc,以及 spring-boot、spring-data、spring-orm、spring-security,配上各種實現如 Hibernate、Redis、Mail 等,輕鬆過 50M 甚至 100M。Spring 不再是一個小而美的框架,而將交由 Vertx、Ktor 等新型框架接棒。

Vert.x 是用於創建輕量化、高性能的微服務的理想選擇。

啟動快、支持熱部署

由於體積小巧,不依賴 Tomcat、Jetty 等傳統 Web 容器,Vertx 啟動非常快。Vert.x 自帶熱部署功能,不需要任何設置。相較於 Spring 需要引入 spring-loaded 和 spring-boot-devtools 並啟用相關設置,方便許多。

支持 GrpahQL

Vertx 官方庫 vertx-web-graphql 提供了對 GraphQL 技術的支持,依賴 graphql-java 和 reactive-streams 實現,開發非常方便。GraphQL 被認為是接棒 Restful 的下一代技術,已被許多的公司( Facebook、Twitter、Github 等)大規模用於生產環境,相信其未來還有很大的發展前景。

支持 MQTT

官方模塊 vertx-mqtt 提供了對 MQTT 的支持。

簡單、容易上手

雖然 Vert.x 提供了眾多創新概念和特性,但暴露給開發者的接口屏蔽了複雜的實現,異常簡單。類似於 Node.js,Vert.x 可以快速上手,相比 Akka 等框架簡單許多,堪稱生產力工具。


分享到:


相關文章: