1. 程式人生 > 其它 >Vert.x

Vert.x

近年來,行動網路、社交網路和電商的興起,使各大服務提供商的客戶端請求數量激增,傳統伺服器架構已不堪重負,致使基於事件和非同步的解決方案備受追捧,如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中註冊了所有的事件,通過事件匹配完成事件轉移和結果返回,從而將整個流程銜接起來。
 

資料傳遞

事件驅動的處理過程,資料傳遞是非常重要的,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等常用元件,發展迅速,生態體系日趨成熟,非常適用於最新的移動端後臺、網際網路、企業應用架構。  

VertX這項技術其實有年頭了。因為國內基本都是Spring生態。以至於大部分人,沒有Spring Boot就不會開發了。這裡不是說Spring Boot有什麼問題,只是覺得不應該被Spring禁錮我們程式設計師得思維。
下面帶大家來了解VertX。進入之前,請忘記Spring。忘記了Spring你就學會了VertX

Eclipse Vert.x是eclipse旗下的一個開源專案。Eclipse Vert.x是基於事件驅動和非阻塞的(基於netty之上,netty是一個天然的純非同步容器),換句話說這框架適合高併發的處理。

Vert.x非常靈活 ,無論是簡單的網路實用程式,複雜的現代Web應用程式,HTTP / REST微服務,大容量事件處理還是完整的後端訊息匯流排應用程式,Vert.x都非常適合。比如遊戲後端開發、銀行業務開發等等。

Vert.X 中沒有MVC、IOC、AOP、ORM這些概念,而是用自己的一套解決方案處理。

概念


1、verticle是vert.x中可被部署執行的最小程式碼塊,可以理解為一個verticle就是一個最小化的業務處理引擎。 一個應用程式可以是單個verticle或者由EventBus通訊的多個verticles構成。
2、verticle被髮布部署後,會呼叫其內部的start方法,開始業務邏輯處理,完成後會呼叫stop方法,對該程式碼塊執行銷燬動作。
3、Verticles在Vert.x例項中執行。 一個Vertx可以承載多個verticles,每個Vert.x例項在其私有的JVM例項執行。 一臺伺服器可以執行一個或多個Vert.x例項(建議執行Vertx例項的數量和CPU核數相關)。
4、一個Vert.x例項,保證其承載的verticles例項總是在同一個執行緒執行, 併發Vert.x 是單執行緒的。

簡單來說,Vert.X是一個非同步響應式框架。是基於Netty實現的。

官網地址:https://vertx.io/
官網中文地址:http://vertxchina.github.io/vertx-translation-chinese/