近年來,行動網路、社交網路和電商的興起,使各大服務提供商的客戶端請求數量激增,傳統伺服器架構已不堪重負,致使基於事件和異步的解決方案備受追捧,如Nginx、NodeJS。Vert.x框架基於事件和異步,依託於全異步Java伺服器Netty,並擴展了很多其他特性,以其輕量、高性能、支持多語言開發而備受開發者青睞。
基本介紹
- 軟體名稱:Vert.x
- 開發商:Michel Krämer.
- 軟體平台:有JVM的作業系統
- 軟體版本:3.7.1
- 更新時間:2017年6月15日
- 軟體語言:Java、JavaScript、Groovy、Ruby、Ceylon、Scala、Kotlin
- 軟體大小:96.41M
- 軟體授權:開源,Eclipse Public License 1.0,Apache License 2.0
基本介紹,事件模型,概念,事件模型流程,數據傳遞,特點,總結,
基本介紹
近年來,行動網路、社交網路和電商的興起,使各大服務提供商的客戶端請求數量激增,傳統伺服器架構已不堪重負,致使基於事件和異步的解決方案備受追捧,如Nginx、NodeJS。Vert.x框架基於事件和異步,依託於全異步Java伺服器Netty,並擴展了很多其他特性,以其輕量、高性能、支持多語言開發而備受開發者青睞。
事件模型
概念
Vert.x是事件驅動的,其處理請求的高性能也是基於其事件機制。Vert.x的事件機制中有幾個非常重要的概念:Event Loop、Event Loop Vertical、Worker Vertical、Event Bus、Vert.x Module。
Event Loop:即事件循環,是由Vert.x啟動的事件處理執行緒,也是Vert.x項目對外開放的入口,Vert.x由此接收請求事件。一個Vert.x有一個或多個事件循環執行緒組成,執行緒最大數量為主機有效的CPU核數。
Event Loop Vertical:事件的業務處理執行緒,存在於Event Loop中,用於處理非阻塞短任務。
Worker Vertical : 事件的業務處理執行緒,用於處理長任務阻塞任務。
Event Bus:即事件匯流排,是Vert.x事件模型中最核心的部分,所有的事件都經由事件匯流排進行分發,包括Vertical之間的通信事件。
Vert.x Module : Vert.x項目模組,一個套用通常由多個模組組成,每個模組一般包含多個Vertical。
事件模型流程
Vert.x以非阻塞IO的思想來實現高性能,非阻塞IO的實現,基於Event Loop Vertical和Worker Vertical的分離,在Vert.x中,Event Loop用於接收,並將短業務操作交由其內部的Vertical來處理,該模組是非阻塞的,這樣可以保證請求的處理效率;阻塞任務通過Vert.x的事件機制脫離當前執行緒,轉移到Worker Vertical中執行,並執行結果返回給Event Loop Vertical。 這一過程完成的核心是Event Bus,Event Bus中註冊了所有的事件,通過事件匹配完成事件轉移和結果返回,從而將整個流程銜接起來。
下面以一個HTTP請求的處理過程詳述Vert.x的事件處理流程。Vert.x啟動時,會將Worker Vertical的事件處理函式載入到Event Bus,當一個HTTP請求傳送到Vert.x構建的套用時,Event Loop首先接收到請求,並對請求做分析、包裝,然後將事件交給Event Bus來處理,Event Bus為此次請求事件添加一個事件ID,然後根據註冊的Worker Vertical事件尋找已經註冊的監聽函式,若未找到則會拋棄該事件,若找到則會對處理類進行實例化,並同時使用事件ID在Event Bus中註冊一個返回結果處理事件,該事件為Event Vertical類型。下一步由Worker Vertical實例執行事件處理函式,事件處理函式中通常包含業務處理、資料庫操作等。Worker Vertical實例處理結束後,將返回結果和事件信息返回給Event Bus,Event Bus找到在其中註冊的Event Vertical實例,然後將返回數據交給該實例處理,Event Vertical實例進一步處理數據並將結果返回給瀏覽器。
數據傳遞
事件驅動的處理過程,數據傳遞是非常重要的,Vert.x支持任意對象的數據格式。但使用對象時經常會遇到序列化和載入類的問題,比如在使用Java對象的時候,這種情況下使用JSON會更方便,這也是Vert.x推薦採用的方式。
特點
Vert.x的事件模型,有如下幾個特點:
1.非阻塞處理請求,異步執行阻塞程式,保證了請求處理的高效性。
2.使用Event Bus事件匯流排來進行通訊,可以輕鬆編寫出分散式、松耦合、高擴展性的程式。
3.使用Event Bus事件匯流排是Vert.x真正實現了多語言支持的基礎,目前已支持Java、JavaScript、Ruby、Python、Groovy、Clojure、Ceylon。
總結
Vert.x發布於2011年,除了多語言支持,目前也已經支持了Postgres、MySQL、MongoDB、Redis等常用組件,發展迅速,生態體系日趨成熟,非常適用於最新的移動端後台、網際網路、企業套用架構。